@spinnaker/core 0.22.1 β 0.22.2
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/CHANGELOG.md +11 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/config/settings.ts +1 -2
- package/src/help/HelpMenu.tsx +1 -2
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import*as e from"angular";import t,{module as n,element as a,noop as i,copy as r,toJson as s,isDefined as o}from"angular";import*as l from"lodash";import c,{cloneDeep as p,merge as d,isNil as u,get as m,set as g,intersection as h,uniq as f,zipObject as v,chain as A,isEqual as E,padStart as b,isNumber as y,isString as C,isPlainObject as w,isArray as x,isNull as k,isUndefined as B,forIn as S,without as M,startCase as N,isBoolean as D,values as I,map as F,flatten as T,xor as Q,isFunction as P,truncate as R,defaults as U,toPath as z,throttle as G,isObject as j,findLast as L,maxBy as O,sortBy as Y,has as H,find as V,cloneDeepWith as J,pick as W,size as K,some as q,reduce as X,includes as Z,forOwn as ee,pickBy as te,filter as ne,identity as ae,groupBy as ie,isEmpty as re,every as se,each as oe,extend as le,compact as ce,noop as pe,head as de,partition as ue,memoize as me,fromPairs as ge,omit as he,omitBy as fe,isDate as ve,uniqBy as Ae,kebabCase as Ee,union as be,keyBy as ye,flatMap as Ce,debounce as we,reverse as xe,orderBy as ke,toNumber as Be,keys as Se,unset as Me,capitalize as Ne,flow as De,clone as Ie,bindAll as Fe,template as Te,trim as Qe,join as Pe,last as Re,max as Ue,sumBy as ze,sum as Ge,assign as je,toPairs as Le,defaultsDeep as Oe,upperFirst as Ye,forEach as $e,first as He,countBy as Ve,range as Je}from"lodash";import{$http as We,$location as Ke,$rootScope as qe,$log as Xe,$q as Ze,$timeout as _e,$templateRequest as et,$compile as tt,$controller as nt,$window as at,$interpolate as it,$templateCache as rt}from"ngimport";import*as st from"react";import ot,{useEffect as lt,useRef as ct,useMemo as pt,useState as dt,useCallback as ut,memo as mt}from"react";import*as gt from"rxjs";import{fromEvent as ht,defer as ft,from as vt,Subject as At,of as Et,merge as bt,timer as yt,BehaviorSubject as Ct,empty as wt,ReplaySubject as xt,combineLatest as kt,forkJoin as Bt}from"rxjs";import{map as St,publishReplay as Mt,refCount as Nt,switchMap as Dt,takeUntil as It,delay as Ft,filter as Tt,debounceTime as Qt,tap as Pt,mergeMap as Rt,catchError as Ut,finalize as zt,toArray as Gt,skip as jt,take as Lt,startWith as Ot,withLatestFrom as Yt,distinctUntilChanged as $t,merge as Ht,first as Vt,bufferCount as Jt,concatMap as Wt,scan as Kt}from"rxjs/operators";import{Modal as qt,OverlayTrigger as Xt,Tooltip as Zt,Overlay as _t,Popover as en,Dropdown as tn,Glyphicon as nn,MenuItem as an,Button as rn,Pagination as sn}from"react-bootstrap";import*as on from"react-dom";import ln from"react-dom";import cn,{Creatable as pn}from"react-select";import dn from"react-virtualized-select";import un from"memoize-one";import mn from"react-tether";import gn from"diff-match-patch";import hn from"jquery";import{formatDistanceToNow as fn,formatDistance as vn,format as An}from"date-fns";import{DateTime as En,Duration as bn}from"luxon";import{react2angular as yn}from"react2angular";import Cn from"classnames";import{Parser as wn,HtmlRenderer as xn}from"commonmark";import kn from"dompurify";import{Icon as Bn,Illustration as Sn}from"@spinnaker/presentation";export{Icon,Illustration}from"@spinnaker/presentation";import{CacheFactory as Mn}from"cachefactory";import*as Nn from"@uirouter/react";import{UISref as Dn,useSref as In,useIsActive as Fn,useCurrentStateAndParams as Tn,UIView as Qn,useSrefActive as Pn,useRouter as Rn,useParentView as Un,UISrefActive as zn,useOnStateChanged as Gn}from"@uirouter/react";import{connect as jn,Formik as Ln,FormikConsumer as On,FastField as Yn,Field as $n,getIn as Hn,Form as Vn,FieldArray as Jn}from"formik";import Wn from"root/version.json";import{toast as Kn,ToastContainer as qn}from"react-toastify";import{SpelExpressionEvaluator as Xn}from"spel2js";import Zn from"react-day-picker/DayPickerInput";import"react-day-picker/lib/style.css";import _n from"react-ace";import"brace/mode/json";import"brace/ext/searchbox";import{CSSTransition as ea}from"react-transition-group";import{UIRouterContextComponent as ta,UIRouterContext as na,UI_ROUTER_REACT_HYBRID as aa}from"@uirouter/react-hybrid";import{dump as ia,loadAll as ra,YAMLException as sa,load as oa}from"js-yaml";import{angular2react as la}from"angular2react";import"jquery-textcomplete";import ca from"@uirouter/angularjs";import{hri as pa}from"human-readable-ids";import{Debounce as da,Throttle as ua}from"lodash-decorators";import*as ma from"@apollo/client";import{ApolloClient as ga,InMemoryCache as ha,HttpLink as fa,ApolloProvider as va,gql as Aa,useApolloClient as Ea}from"@apollo/client";import{atom as ba,useRecoilValue as ya,useRecoilState as Ca,RecoilRoot as wa}from"recoil";import xa from"lodash/isEqual";import ka from"react-content-loader";import Ba from"ansi_up";import*as Sa from"@uirouter/core";import{RejectType as Ma,Category as Na,Glob as Da}from"@uirouter/core";import{SortableHandle as Ia,arrayMove as Fa,SortableElement as Ta,SortableContainer as Qa}from"react-sortable-hoc";import*as Pa from"@uirouter/rx";import{UIRouterRxPlugin as Ra}from"@uirouter/rx";import*as Ua from"prop-types";import"brace/mode/yaml";import"brace/theme/textmate";import"bootstrap/dist/css/bootstrap.css";import"bootstrap/dist/js/bootstrap";import"@fortawesome/fontawesome-free/css/solid.css";import"@fortawesome/fontawesome-free/css/regular.css";import"@fortawesome/fontawesome-free/css/fontawesome.css";import"react-select/dist/react-select.css";import"react-virtualized/styles.css";import"react-virtualized-select/styles.css";import"ui-select/dist/select.css";import"@spinnaker/styleguide/public/styleguide.min.css";import"select2/select2.css";import"select2-bootstrap-css/select2-bootstrap.css";import"source-sans/source-sans-3.css";import"@uirouter/angularjs/release/stateEvents";import za from"angulartics";import Ga from"angulartics-google-analytics";import"react-toastify/dist/ReactToastify.min.css";import{createUltimatePagination as ja,ITEM_TYPES as La}from"react-ultimate-pagination";import Oa from"angular-ui-bootstrap";import{CellMeasurer as Ya,CellMeasurerCache as $a,AutoSizer as Ha,List as Va,SortDirection as Ja,Table as Wa,Column as Ka}from"react-virtualized";import qa from"js-worker-search";import"angular-ui-sortable";import Xa from"react-ga";import Za from"ui-select";import _a from"angular-messages";import ei from"angular-sanitize";import{angularSpinner as ti}from"angular-spinner";var ni=Object.freeze({__proto__:null,get AccountSelectInput(){return es},get AccountService(){return Di},get AccountTag(){return ns},get InvalidAPIResponse(){return Ei},get RequestBuilder(){return Ci},get DeprecatedRequestBuilder(){return wi},get invalidContentMessage(){return xi},get makeRequestBuilderConfig(){return ki},get API(){return Bi},get REST(){return Si},get ApplicationContext(){return as},get ApplicationContextProvider(){return is},get ApplicationIcon(){return ks},get Application(){return Qh},get ApplicationStateProvider(){return Ff},get APPLICATION_STATE_PROVIDER(){return Tf},get ApplicationModelBuilder(){return Df},get ConfigSectionFooter(){return Qf},get ConfigSectionFooterController(){return Rf},get CONFIG_SECTION_FOOTER(){return zf},get AppListExtractor(){return jf},get PlatformHealthOverride(){return Sc},get PlatformHealthOverrideInput(){return Mc},get ApplicationNameValidator(){return Lf},get INFRASTRUCTURE_KEY(){return Of},get DELIVERY_KEY(){return Yf},get verticalNavExpandedAtom(){return gf},get NavigationCategoryRegistry(){return Af},get navigationCategoryRegistry(){return Ef},get ApplicationDataSourceRegistry(){return Hg},get ApplicationReader(){return Jg},get ApplicationWriter(){return Pf},get ApplicationDataSource(){return Th},get ArtifactIconService(){return sm},get ArtifactReferenceService(){return om},get EXECUTION_ARTIFACT_TAB(){return pm},get ExpectedArtifactService(){return dm},get IMAGE_SOURCE_SELECTOR_COMPONENT(){return mm},get ExecutionArtifactTab(){return cm},get ArtifactIconList(){return lm},get ArtifactTypePatterns(){return vp},get excludeAllTypesExcept(){return Ap},get ExpectedArtifactSelectorViewController(){return gm},get defaultExcludedArtifactTypes(){return fm},get NgGenericArtifactDelegate(){return vm},get NgGCEImageArtifactDelegate(){return Em},get NgAppEngineDeployArtifactDelegate(){return bm},get NgBakeManifestArtifactDelegate(){return ym},get NgAppengineConfigArtifactDelegate(){return Cm},get ArtifactAccountSelector(){return xm},get ARTIFACT_ACCOUNT_SELECTOR_COMPONENT_REACT(){return km},get ArtifactIcon(){return wm},get ExpectedArtifactSelector(){return Nm},get EXPECTED_ARTIFACT_SELECTOR_COMPONENT_REACT(){return Dm},get ExpectedArtifactEditor(){return Im},get EXPECTED_ARTIFACT_EDITOR_COMPONENT_REACT(){return Fm},get ExpectedArtifactSourceSelector(){return Sm},get EXPECTED_ARTIFACT_SOURCE_SELECTOR_COMPONENT_REACT(){return Mm},get ExpectedArtifactModal(){return Pm},get StageArtifactSelector(){return Rm},get STAGE_ARTIFACT_SELECTOR_COMPONENT_REACT(){return Um},get StageArtifactSelectorDelegate(){return zm},get AuthenticationService(){return ri},get AuthenticationInitializer(){return Ai},get UserMenu(){return $f},get BannerContainer(){return Wf},get BannerContainerContent(){return Kf},get CacheInitializerService(){return bd},get CACHE_INITIALIZER_SERVICE(){return yd},get CollapsibleSectionStateCacheInternal(){return Ss},get CollapsibleSectionStateCache(){return Ms},get DeckCacheFactory(){return Vp},get InfrastructureCachesInternal(){return pd},get InfrastructureCaches(){return dd},get INFRASTRUCTURE_CACHE_CONFIG(){return ld},get ViewStateCacheInternal(){return Kp},get ViewStateCache(){return qp},get CertificateReader(){return qf},get BuildServiceType(){return Yu},get IgorService(){return Hu},get CloudProviderRegistry(){return Ni},get ProviderSelectionService(){return dp},get CloudProviderLabel(){return up},get CloudProviderLogo(){return mp},get ProviderServiceDelegate(){return gp},get PROVIDER_SERVICE_DELEGATE(){return hp},get ClusterPodTitleWrapper(){return cy},get DefaultClusterMatcher(){return py},get ClusterMatcher(){return dy},get ClusterService(){return Ey},get CLUSTER_SERVICE(){return by},get TaskMatcher(){return uy},get taskMatcher(){return Ay},get ClusterFilterService(){return Id},get FilterSearch(){return yy},get FilterSection(){return Cy},get SETTINGS(){return di},get VersionChecker(){return no},get ConfirmationModalService(){return lp},get CoreRedBlackAdditionalFields(){return By},get DeploymentStrategySelector(){return ky},get DeploymentStrategyRegistrar(){return wy},get DeploymentStrategyRegistry(){return xy},get Key(){return Kg},get ManagedResourceStatus(){return ev},get AddEntityTagLinks(){return Sy},get EntitySource(){return Ny},get EntityTagEditor(){return cf},get ClusterTargetBuilder(){return Dy},get EntityTagsReader(){return ud},get EntityTagWriter(){return of},get CategorizedNotifications(){return sf},get EntityName(){return Xh},get GroupedNotificationList(){return Zh},get NotificationCategory(){return ef},get NotificationList(){return tf},get NotificationCategories(){return rf},get ExecutionMarkerIcon(){return Up},get EntityNotifications(){return Zf},get VIEW_CHANGES_LINK(){return Uy},get ViewChangesLink(){return Ry},get DIFF_MODULE(){return zy},get EventBus(){return Cp},get FilterModelService(){return rd},get FilterCheckbox(){return sd},get FilterCollapse(){return od},get FilterTags(){return Cd},get digestDependentFilters(){return xd},get MapEditor(){return jy},get MapEditorInput(){return Oy},get MapPair(){return Gy},get NumberList(){return $y},get HealthCounts(){return $g},get HelpField(){return _s},get HelpMenu(){return oo},get HelpTextExpandedContext(){return Vs},get HelpContentsRegistry(){return Ks},get RecentHistoryService(){return bg},get RECENT_HISTORY_SERVICE(){return yg},get ImageReader(){return Hy},get IMAGE_READER(){return Vy},get InstanceReader(){return Jy},get ConsoleOutputLink(){return Ky},get InstanceActions(){return qy},get InstanceDetails(){return eC},get InstanceDetailsCmp(){return tC},get InstanceDetailsHeader(){return nC},get InstanceDetailsPane(){return Xy},get InstanceInsights(){return aC},get InstanceLinks(){return iC},get InstanceWriter(){return sC},get InstanceTypeService(){return oC},get INSTANCE_TYPE_SERVICE(){return lC},get InstanceLoadBalancerHealth(){return cC},get LoadBalancerDataUtils(){return pC},get LoadBalancerReader(){return dC},get LOAD_BALANCER_READ_SERVICE(){return uC},get LoadBalancerWriter(){return mC},get CreateLoadBalancerButton(){return gC},get LoadBalancerClusterContainer(){return bC},get LoadBalancerInstances(){return AC},get LoadBalancerServerGroup(){return EC},get LoadBalancersTagWrapper(){return xC},get FunctionDetails(){return SC},get FunctionReader(){return MC},get FUNCTION_READ_SERVICE(){return NC},get FunctionWriter(){return DC},get CreateFunctionButton(){return IC},get V2_MODAL_WIZARD_COMPONENT(){return Vc},get V2ModalWizard(){return $c},get ModalClose(){return Nc},get SubmitButton(){return Dc},get ModalWizard(){return Ic},get WizardModal(){return Lc},get WizardPage(){return Fc},get WizardStepLabel(){return Tc},get DeployingIntoManagedClusterWarning(){return cv},get ManagedMenuItem(){return pv},get addManagedResourceMetadataToServerGroups(){return Ev},get addManagedResourceMetadataToLoadBalancers(){return bv},get addManagedResourceMetadataToSecurityGroups(){return yv},get ManagedResourceDetailsIndicator(){return Lv},get MANAGED_RESOURCE_DETAILS_INDICATOR(){return Ov},get ManagedResourceStatusIndicator(){return Jv},get confirmNotManaged(){return rv},get toggleResourcePause(){return sv},get MANAGED_RESOURCES_DATA_SOURCE(){return Wv},get CORE_MANAGED_MANAGED_MODULE(){return sy},get getKindName(){return gv},get getResourceKindForLoadBalancerType(){return hv},get ManagedReader(){return fv},get ManagedWriter(){return _f},get registerManagedDeliveryPlugin(){return oy},get resourceManager(){return uv},get ManifestWriter(){return FC},get ManifestReader(){return TC},get JobStageExecutionLogs(){return PC},get JobManifestPodLogs(){return QC},get ManifestYaml(){return RC},get DefaultPodNameProvider(){return UC},get JobEventBasedPodNameProvider(){return zC},get NameUtils(){return gd},get StateConfigProvider(){return Dg},get trueKeyObjectParamType(){return Ig},get inverseBooleanParamType(){return Fg},get booleanParamType(){return Tg},get sortKeyParamType(){return Qg},get STATE_CONFIG_PROVIDER(){return Pg},get UrlBuilderRegistry(){return cp},get UrlBuilder(){return Ug},get UrlParser(){return zg},get NetworkReader(){return GC},get NotificationDetails(){return WC},get EditNotificationModal(){return KC},get NotificationTransformer(){return YC},get NotificationSelector(){return $C},get NOTIFICATION_LIST(){return ZC},get NotificationsList(){return XC},get OrchestratedItemTransformer(){return Wc},get OverrideRegistry(){return Vh},get OVERRIDE_REGISTRY(){return Jh},get Overridable(){return ys},get overridableComponent(){return Cs},get RegistrationQueue(){return Oh},get overrideRegistrationQueue(){return Yh},get Overrides(){return $h},get overridesComponent(){return Hh},get PageTitleService(){return _C},get PAGE_TITLE_SERVICE(){return ew},get PagerDutyReader(){return bf},get PagerDutyWriter(){return yf},get PagerDutyTagComponentController(){return Cf},get PAGER_DUTY_TAG_COMPONENT(){return xf},get PagerDutySelectFieldController(){return kf},get PAGER_DUTY_SELECT_FIELD_COMPONENT(){return Sf},get PipelineRegistry(){return Lm},get PipelineConfigService(){return id},get FormikStageConfig(){return nw},get BakeExecutionLabel(){return aw},get BakeryReader(){return iw},get AsgActionExecutionDetailsSection(){return Sp},get ExecutionDetailsSection(){return bp},get ExecutionBarLabel(){return Fp},get ExecutionDetailsTasks(){return Rp},get StageConfigField(){return zp},get applySuspendedStatuses(){return Gp},get ExecutionStepDetails(){return Pp},get PipelineStageExecutionDetails(){return pw},get TitusExecutionLogs(){return dw},get PreconfiguredJobExecutionDetails(){return uw},get PreconfiguredJobStageConfig(){return mw},get PreconfiguredJobReader(){return fp},get makePreconfiguredJobStage(){return gw},get PRECONFIGUREDJOB_STAGE(){return hw},get StageConstants(){return vw},get PipelineTemplates(){return Aw},get PipelineTemplateV2Service(){return nd},get PipelineTemplateReader(){return Ew},get RunAsUserInput(){return yw},get Triggers(){return Vw},get BaseBuildTriggerTemplate(){return Ww},get PipelineConfigValidator(){return Yw},get CreatePipelineModal(){return ex},get ExecutionDetailsSectionService(){return rw},get EXECUTION_DETAILS_SECTION_SERVICE(){return sw},get ExecutionDetailsSectionNav(){return ow},get StageExecutionLogs(){return yp},get StageFailureMessages(){return wp},get StageFailureMessage(){return Bp},get StageSummary(){return cw},get Execution(){return Tx},get filterModelConfig(){return Yd},get ExecutionFilterModel(){return $d},get ManualExecutionModal(){return Hx},get TriggerTemplate(){return jx},get ExecutionsTransformer(){return Yp},get ExecutionService(){return iu},get EXECUTION_SERVICE(){return ru},get ArtifactList(){return Yx},get registerPluginExtensions(){return Vx},get PLUGINS_MODULE(){return Kx},get PluginRegistry(){return Jx},get Icon(){return Bn},get Illustration(){return Sn},get CollapsibleElement(){return Bs},get CollapsibleSection(){return Ds},get CustomLabels(){return Is},get Details(){return Qs},get SpInput(){return Rs},get spelNumberCheck(){return Us},get FormikForm(){return zs},get SpinFormik(){return Gs},get FormField(){return Dl},get FormikExpressionField(){return Fl},get FormikExpressionRegexField(){return Tl},get createFieldValidator(){return xl},get FormikFormField(){return kl},get renderContent(){return uo},get useSaveRestoreMutuallyExclusiveFields(){return Ql},get useFormInputValueMapper(){return Pl},get CheckboxInput(){return xo},get ChecklistInput(){return Bo},get DayPickerInput(){return So},get JsonEditor(){return Mo},get NumberInput(){return Fo},get RadioButtonInput(){return To},get reactSelectValidationErrorStyle(){return Jr},get reactSelectOnChangeAdapter(){return Wr},get reactSelectOnBlurAdapter(){return Kr},get ReactSelectInput(){return qr},get SelectInput(){return Zr},get StringsAsOptions(){return Fi},get TextAreaInput(){return Po},get TextInput(){return go},get ExpressionError(){return mo},get ExpressionInput(){return bo},get ExpressionPreview(){return yo},get evaluateExpression(){return Eo},get parseSpelExpressions(){return Ao},get useInternalValidator(){return Do},get orEmptyString(){return gr},get validationClassName(){return hr},get createFakeReactSyntheticEvent(){return fr},get isStringArray(){return vr},get StandardFieldLayout(){return Os},get LayoutContext(){return Ys},get LayoutProvider(){return $s},get LayoutConsumer(){return Hs},get ResponsiveFieldLayout(){return po},get FormValidator(){return Br},get FormValidatorField(){return Ar},get ValidationMessage(){return Ir},get categoryLabels(){return Fr},get asyncMessage(){return Ur},get errorMessage(){return zr},get infoMessage(){return Gr},get messageMessage(){return jr},get successMessage(){return Lr},get warningMessage(){return Or},get categorizeValidationMessage(){return $r},get categorizeValidationMessages(){return Hr},get useValidationData(){return Vr},get FORM_VALIDATION_VALIDATABLE_FIELD_IS_VALID_SHORT_CIRCUIT(){return Er},get composeValidators(){return br},get Validators(){return kr},get useApplicationContext(){return Ro},get useApplicationContextSafe(){return Uo},get useContainerClassNames(){return $o},get useData(){return Jo},get useDataSource(){return _o},get useDebouncedValue(){return el},get useDeepObjectDiff(){return nl},get useEscapeKeyPressed(){return rl},get useEventListener(){return il},get useForceUpdate(){return sl},get useInterval(){return ol},get useIsMobile(){return cl},get useIsMountedRef(){return No},get useLatestCallback(){return qo},get useLatestPromise(){return Vo},get useMountStatusRef(){return Ls},get useObservable(){return Xo},get useObservableValue(){return Zo},get usePollingData(){return pl},get usePrevious(){return jo},get HoverablePopover(){return qs},get LabelComponent(){return Rl},get LabeledValue(){return Ul},get LabeledValueList(){return zl},get LinkWithClipboard(){return Gl},get LINK_WITH_CLIPBOARD(){return Yl},get Markdown(){return Sr},get toMarkdown(){return Mr},get Modal(){return Vl},get ModalHeader(){return Wl},get ModalBody(){return Kl},get ModalFooter(){return ql},get showModal(){return Xl},get PageNavigator(){return Zl},get PageSection(){return _l},get ReactModal(){return si},get RenderOutputFile(){return ec},get robotToHuman(){return yr},get robotToHumanFilter(){return Cr},get ROBOT_TO_HUMAN_FILTER(){return wr},get SortToggle(){return tc},get SpanDropdownTrigger(){return nc},get SpelInput(){return dl},get SimpleSpelInput(){return ul},get SpelService(){return Co},get FormikSpelContext(){return ml},get FormikSpelContextProvider(){return gl},get SpelAwareInputMode(){return hl},get SpelToggle(){return vl},get withErrorBoundary(){return jl},get SpinErrorBoundary(){return Ll},get UI_ROUTER_REACT_ERROR_BOUNDARY(){return Ol},get TabBoundary(){return Hl},get Table(){return sc},get TableRow(){return pc},get TableCell(){return uc},get minimalNativeTableLayout(){return mc},get getGridColumnsStyle(){return gc},get standardGridTableLayout(){return Ac},get TetheredCreatable(){return Ec},get TetheredSelect(){return Ti},get BreakString(){return bc},get SingleLineString(){return yc},get ToggleSize(){return Cc},get ToggleButtonGroup(){return xc},get Tooltip(){return Ps},get WatchValue(){return js},get IconTooltip(){return kc},get Applications(){return qx},get Clusters(){return Xx},get ConfigureProjectModal(){return ik},get Pipelines(){return _x},get ProjectAttributes(){return ek},get ProjectHeader(){return ok},get ProjectReader(){return tk},get ProjectWriter(){return nk},get PubsubSubscriptionReader(){return lk},get AngularJSAdapter(){return rs},get CoreModalInject(){return fi},get ModalInjector(){return vi},get NgReactInjector(){return eg},get NgReact(){return tg},get ReactInject(){return mi},get CoreReactInject(){return gi},get ReactInjector(){return hi},get REACT_MODULE(){return ig},get StateEvents(){return ng},get STATE_EVENTS(){return ag},get arePropsEqual(){return rg},get RegionSelectField(){return pk},get RegionSelectInput(){return ck},get Registry(){return $m},get RetryService(){return dk},get SchedulerFactory(){return eo},get GlobalSearch(){return Sg},get InfrastructureSearcher(){return kh},get InfrastructureSearchService(){return Bh},get INFRASTRUCTURE_SEARCH_SERVICE(){return Sh},get SearchService(){return hd},get SearchTableHeader(){return ih},get SearchTableRow(){return rh},get SearchTableBody(){return sh},get HeaderCell(){return lh},get BasicCell(){return ch},get HrefCell(){return ph},get AccountCell(){return dh},get HealthCountsCell(){return uh},get DefaultSearchResultTab(){return mh},get SearchResultType(){return gh},get SearchResultTypeRegistry(){return Lg},get searchResultTypeRegistry(){return Og},get SearchResults(){return xh},get SearchStatus(){return Gg},get Filter(){return Mh},get Filters(){return Nh},get Search(){return Fh},get FilterTypeRegistry(){return Dh},get SearchFilterTypeRegistry(){return Ih},get SecurityGroupWriter(){return sg},get FirewallLabels(){return Js},get SecurityGroupReader(){return Ad},get SECURITY_GROUP_READER(){return Ed},get ServerGroup(){return Nk},get LoadBalancers(){return Ak},get MultiSelectCheckbox(){return Ek},get CloudProviderIcon(){return bk},get ImageList(){return yk},get SequenceAndBuildAndImages(){return Ck},get Alerts(){return wk},get Health(){return xk},get RunningTasks(){return kk},get ServerGroupHeader(){return Bk},get DeployInitializer(){return Dk},get DeployInitializerController(){return Ik},get DEPLOY_INITIALIZER_COMPONENT(){return Tk},get setMatchingResourceSummary(){return Qk},get ServerGroupCommandBuilderService(){return Pk},get SERVER_GROUP_COMMAND_BUILDER_SERVICE(){return Rk},get ServerGroupCommandRegistry(){return Uk},get SERVER_GROUP_COMMAND_REGISTRY_PROVIDER(){return zk},get ServerGroupConfigurationService(){return Gk},get SERVER_GROUP_CONFIGURATION_SERVICE(){return jk},get ServerGroupNamePreview(){return Yk},get ServerGroupDetailsField(){return Vk},get ServerGroupDetails(){return Xk},get ServerGroupDetailsWrapper(){return Zk},get ShowUserData(){return _k},get CapacityDetailsSection(){return nB},get CurrentCapacity(){return eB},get DesiredCapacity(){return tB},get ViewScalingActivitiesLink(){return iB},get ServerGroupWarningMessageService(){return rB},get CloudMetricsReader(){return sB},get MinMaxDesiredChanges(){return oB},get ServerGroupReader(){return rC},get ServerGroupWriter(){return lB},get SERVER_GROUP_WRITER(){return cB},get ServerGroupTemplates(){return pB},get SERVER_GROUP_MANAGER_DATA_SOURCE(){return uB},get SERVER_GROUP_MANAGER_STATES(){return fB},get ServerGroupManagerReader(){return dB},get ServerGroupManagerTag(){return vB},get ServiceAccountReader(){return bw},get ServicesReader(){return AB},get SLACK_COMPONENT(){return bB},get SlackReader(){return EB},get ClusterState(){return Wd},get ExecutionState(){return Kd},get LoadBalancerState(){return qd},get SecurityGroupState(){return Xd},get FunctionState(){return Zd},get initialize(){return _d},get StorageAccountReader(){return yB},get SubnetReader(){return CB},get SubnetTag(){return wB},get PlatformHealthOverrideMessage(){return Jc},get TaskMonitor(){return qc},get TaskMonitorWrapper(){return jc},get TaskReason(){return Xc},get TaskMonitorModal(){return np},get TaskReader(){return Kc},get TaskExecutor(){return tp},get UserVerification(){return rp},get RenderWhenVisible(){return Qi},get CopyToClipboard(){return zi},get now(){return Gi},get DebugTiming(){return Oi},get DebugTimingCumulative(){return Yi},get firstDefined(){return $i},get JsonUtils(){return Hi},get DiffView(){return Vi},get traverseObject(){return Ji},get noop(){return qi},get toIPromise(){return Xi},get RENDER_IF_FEATURE(){return _i},get ScrollToService(){return er},get duration(){return ar},get timeDiffToString(){return ir},get timestamp(){return rr},get relativeTime(){return sr},get timePickerTime(){return or},get TIME_FORMATTERS(){return lr},get decodeUnicodeBase64(){return cr},get UUIDGenerator(){return pr},get WorkerPool(){return ur},get filterObjectValues(){return mr},get logger(){return Ui},get ApplicationsPickerInput(){return Wg},get ScopeClusterSelector(){return qg},get ClusterMatches(){return Xg},get CLUSTER_MATCHES_COMPONENT(){return Zg},get NotifierService(){return to},get SpelNumberInput(){return _g},get SpelText(){return su},get Spinner(){return bs},get DeleteType(){return eh},get Tag(){return nh},get TagList(){return ah},get YAML_EDITOR_COMPONENT(){return SB},get yamlStringToDocuments(){return xB},get yamlDocumentsToString(){return kB},get YamlEditor(){return BB},get CORE_MODULE(){return pQ}});const ai=t.module;t.module=function(e,t,n){if(t&&t.some((e=>!e))){const n=t.map((e=>"string"==typeof e?`'${e}'`:`${e}`)).join(", ");throw new Error(`Got falsey dependency whilst registering angular module '${e}': [${n}]`)}return ai(e,t,n)};const ii={name:"[anonymous]",roles:[],authenticated:!1};class ri{static getAuthenticatedUser(){return{...this.user}}static setAuthenticatedUser(e){e&&e.name&&(this.user.name=e.name,this.user.authenticated=!0,this.user.lastAuthenticated=(new Date).getTime(),this.user.roles=e.roles),this.authEvents.forEach((e=>e()))}static onAuthentication(e){this.authEvents.push(e)}static authenticationExpired(){this.user.authenticated=!1}static reset(){this.user={...ii}}}ri.user={...ii},ri.authEvents=[];class si{static show(e,t,n){const a=new Promise(((a,i)=>{let r=document.createElement("div"),s=!0;function o(){r&&(ln.unmountComponentAtNode(r),r=null)}const l=e=>t=>{r&&(e(t),s=!1,d())},c=l(a),p=l(i);function d(){ln.render(ot.createElement(qt,{show:s,...n,onExited:o},ot.createElement(e,{...t,dismissModal:p,closeModal:c})),r)}d()}));return a.catch((()=>{})),a}}function oi(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var a=document.head||document.getElementsByTagName("head")[0],i=document.createElement("style");i.type="text/css","top"===n&&a.firstChild?a.insertBefore(i,a.firstChild):a.appendChild(i),i.styleSheet?i.styleSheet.cssText=e:i.appendChild(document.createTextNode(e))}}var li,ci;oi(".modal-logged-out {\n text-align: center;\n padding: 30px 60px !important;\n}\n.modal-logged-out h3 {\n margin: 30px 0 !important;\n}\n.modal-logged-out p {\n margin-bottom: 30px;\n}\n.modal-logged-out .fa-hourglass {\n position: absolute;\n display: block;\n top: 95px;\n left: 278px;\n height: 0;\n font-size: 62px;\n}\n");class pi extends ot.Component{static show(){return si.show(pi,{})}render(){return ot.createElement(qt.Body,{className:"modal-logged-out"},ot.createElement("svg",{width:"162px",height:"143px",viewBox:"0 0 162 143"},ot.createElement("g",{id:"Page-1",stroke:"none",strokeWidth:"1",fill:"none",fillRule:"evenodd"},ot.createElement("g",{transform:"translate(3.000000, 3.000000)"},ot.createElement("polygon",{id:"Fill-1",fill:"#E8AE2F",points:"0 138 81 0 156 138"}),ot.createElement("polygon",{id:"Stroke-3",stroke:"#000000",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round",points:"0 138 81 0 156 138"})))),ot.createElement("i",{className:"far fa-hourglass"}),ot.createElement("h3",null,"You have been logged out."),ot.createElement("p",null,"Please click below or refresh your browser to log back in."),ot.createElement("p",null,ot.createElement("button",{className:"btn btn-primary",onClick:()=>window.location.reload()},"Refresh and log me back in")))}}const di=window.spinnakerSettings||{};di.feature=di.feature||{},di.feature.roscoMode=null==(li=di.feature.roscoMode)||li,di.kubernetesAdHocInfraWritesEnabled=null==(ci=di.kubernetesAdHocInfraWritesEnabled)||ci,di.analytics=di.analytics||{},di.providers=di.providers||{},di.defaultTimeZone=di.defaultTimeZone||"America/Los_Angeles",di.dockerInsights=di.dockerInsights||{enabled:!1,url:""},di.changelogUrl=di.changelogUrl||"https://www.spinnaker.io/community/releases/versions/:version-changelog",di.managedDelivery=di.managedDelivery||{defaultManifest:"spinnaker.yml",manifestBasePath:".spinnaker"};const ui=p(di);di.resetToOriginal=()=>{Object.keys(di).filter((e=>"function"!=typeof di[e])).forEach((e=>delete di[e])),d(di,ui)},di.resetProvider=e=>()=>{const t=di.providers[e];Object.keys(t).filter((e=>"function"!=typeof t[e])).forEach((e=>delete t[e])),d(t,ui.providers[e])};class mi{}class gi extends mi{get $state(){return this.wrappedState||(this.wrappedState=this.createStateService()),this.wrappedState}get $q(){return this.$injector.get("$q")}get $rootScope(){return this.$injector.get("$rootScope")}get $stateParams(){return this.$injector.get("$stateParams")}get $uiRouter(){return this.$injector.get("$uiRouter")}get cacheInitializer(){return this.$injector.get("cacheInitializer")}get clusterService(){return this.$injector.get("clusterService")}get executionDetailsSectionService(){return this.$injector.get("executionDetailsSectionService")}get executionService(){return this.$injector.get("executionService")}get imageReader(){return this.$injector.get("imageReader")}get infrastructureSearchService(){return this.$injector.get("infrastructureSearchService")}get insightFilterStateModel(){return this.$injector.get("insightFilterStateModel")}get instanceTypeService(){return this.$injector.get("instanceTypeService")}get instanceWriter(){return this.$injector.get("instanceWriter")}get manualJudgmentService(){return this.$injector.get("manualJudgmentService")}get overrideRegistry(){return this.$injector.get("overrideRegistry")}get pageTitleService(){return this.$injector.get("pageTitleService")}get providerServiceDelegate(){return this.$injector.get("providerServiceDelegate")}get securityGroupReader(){return this.$injector.get("securityGroupReader")}get serverGroupWriter(){return this.$injector.get("serverGroupWriter")}get stateEvents(){return this.$injector.get("stateEvents")}createStateService(){const e=Object.create(this.$injector.get("$state")),t=this.$injector.get("$rootScope"),n=this.$injector.get("$q"),a=e.go;return e.go=function(){const e=arguments,i=Object.create(n.defer()),{promise:r}=i;return r.transition=null,r.catch((()=>{})),t.$applyAsync((()=>{const t=a.apply(this,e);r.transition=t.transition,t.then(i.resolve,i.reject)})),r},e}initialize(e){this.$injector=e}}const hi=new gi;class fi extends mi{get modalService(){return this.$injector.get("$uibModal")}get modalStackService(){return this.$injector.get("$uibModalStack")}initialize(e){this.$injector=e}}const vi=new fi;class Ai{static checkForReauthentication(){We.get(di.authEndpoint).then((e=>{e.data.username&&(ri.setAuthenticatedUser({name:e.data.username,authenticated:!1,roles:e.data.roles}),vi.modalStackService.dismissAll(),this.visibilityWatch.unsubscribe())})).catch((()=>{}))}static loginNotification(){ri.authenticationExpired(),this.userLoggedOut=!0,this.openLoggedOutModal(),this.visibilityWatch=ht(document,"visibilitychange").subscribe((()=>{"visible"===document.visibilityState&&this.checkForReauthentication()}))}static openLoggedOutModal(){pi.show()}static loginRedirect(){const e=encodeURIComponent(Ke.absUrl());window.location.href=`${di.gateUrl}/auth/redirect?to=${e}`}static authenticateUser(){qe.authenticating=!0,We.get(di.authEndpoint).then((e=>{e.data.username?(ri.setAuthenticatedUser({name:e.data.username,authenticated:!1,roles:e.data.roles}),qe.authenticating=!1):this.loginRedirect()})).catch((()=>this.loginRedirect()))}static reauthenticateUser(){this.userLoggedOut||(this.userLoggedOut=!0,We.get(di.authEndpoint).then((e=>{e.data.username?(ri.setAuthenticatedUser({name:e.data.username,authenticated:!1,roles:e.data.roles}),qe.authenticating=!1,this.userLoggedOut=!1):this.loginNotification()})).catch((()=>this.loginNotification())))}static logOut(){if(!this.userLoggedOut){const e={headers:{"Content-Type":"text/plain"},transformResponse:e=>e};We.get(`${di.gateUrl}/auth/logout`,e).then((()=>this.loggedOutSequence()),(()=>this.loggedOutSequence()))}}static loggedOutSequence(){ri.authenticationExpired(),this.userLoggedOut=!0,this.openLoggedOutModal()}}Ai.userLoggedOut=!1,Ai.visibilityWatch=null;class Ei extends Error{constructor(e,t){super(e),this.originalResult=t,this.data={message:e}}}function bi(...e){return e.filter((e=>!u(e)&&""!==e)).map((e=>e.toString())).map((e=>e.replace(/^\/+/,""))).map((e=>e.replace(/\/+$/,""))).join("/")}const yi=class{constructor(e=ki(),t,n){this.config=e,this._httpClient=t,this._baseUrl=n}builder(e){return new yi(e,this.httpClient,this._baseUrl)}get httpClient(){var e;return null!=(e=this._httpClient)?e:yi.defaultHttpClient}get baseUrl(){var e;return bi(null!=(e=this._baseUrl)?e:di.gateUrl)}path(...e){const t=bi(this.config.url,...e.map((e=>encodeURIComponent(e))));return this.builder({...this.config,url:t})}headers(e){return this.builder({...this.config,headers:{...this.config.headers,...e}})}get(e={}){const t={...this.config.params,...e},n=bi(this.baseUrl,this.config.url);return this.httpClient.get({...this.config,url:n,params:t})}post(e){const t=null!=e?e:this.config.data,n=bi(this.baseUrl,this.config.url);return this.httpClient.post({...this.config,url:n,data:t})}put(e){const t=null!=e?e:this.config.data,n=bi(this.baseUrl,this.config.url);return this.httpClient.put({...this.config,url:n,data:t})}patch(e){const t=null!=e?e:this.config.data,n=bi(this.baseUrl,this.config.url);return this.httpClient.patch({...this.config,url:n,data:t})}delete(e){const t=null!=e?e:this.config.data,n=bi(this.baseUrl,this.config.url);return this.httpClient.delete({...this.config,url:n,data:t})}useCache(e=!0){return this.builder({...this.config,cache:e})}query(e){const t={...this.config.params,...e};return this.builder({...this.config,params:t})}};let Ci=yi;Ci.defaultHttpClient=new class{constructor(){this.delete=e=>this.request("DELETE",e),this.get=e=>this.request("GET",e),this.post=e=>this.request("POST",e),this.put=e=>this.request("PUT",e),this.patch=e=>this.request("PATCH",e)}request(e,t){return We({...t,method:e}).then((e=>{const t=e.headers("content-type");if(t){const n=t.match(/application\/(.+\+)?json/),a=t.match(/application\/(.+-)?yaml/),i=t.includes("text/html")&&""===e.data,r=t.includes("text/plain")&&""===e.data;if(!(n||a||i||r))throw Ai.reauthenticateUser(),new Ei(xi,e)}return e.data}))}};class wi extends Ci{constructor(){super(...arguments),this.builder=e=>new wi(e,this._httpClient,this._baseUrl),this.getList=this.get.bind(this),this.one=this.path.bind(this),this.all=this.path.bind(this),this.remove=this.delete.bind(this).bind(this),this.data=e=>this.builder({...this.config,data:e}),this.withParams=this.query.bind(this),this.useCache=(e=!0)=>this.builder({...this.config,cache:e})}get baseUrl(){return super.baseUrl}}const xi="API response was neither JSON nor zero-length html or text";function ki(e){return{url:bi(e),cache:!1,data:void 0,params:{},timeout:2*(di.apiTimeoutMs||di.pollSchedule||3e4)+5e3,headers:{"X-RateLimit-App":"deck"}}}const Bi=new class extends wi{constructor(){super(...arguments),this.one=(...e)=>{const t=bi(this.config.url,...e);return this.builder({...this.config,url:t})},this.all=(...e)=>{const t=bi(this.config.url,...e);return this.builder({...this.config,url:t})}}}(ki()),Si=e=>new Ci(ki(e)),Mi=class{static registerProvider(e,t){di.providers[e]&&this.providers.set(e,t)}static getProvider(e){return this.providers.has(e)?p(this.providers.get(e)):null}static listRegisteredProviders(){return Array.from(this.providers.keys())}static overrideValue(e,t,n){this.providers.has(e)?g(this.providers.get(e),t,n):console.warn(`Cannot override "${t}" for provider "${e}" (provider not registered)`)}static hasValue(e,t){return this.providers.has(e)&&null!==this.getValue(e,t)}static getValue(e,t){var n;return null!=(n=m(this.getProvider(e),t))?n:null}static isDisabled(e){return!u(Mi.getValue(e,"adHocInfrastructureWritesEnabled"))&&!1===Mi.getValue(e,"adHocInfrastructureWritesEnabled")}};let Ni=Mi;Ni.providers=new Map;class Di{static initialize(){this.accounts$=ft((()=>{const e=Si("/credentials").useCache().query({expand:!0}).get();return vt(e)})).pipe(Mt(1),Nt()),this.providers$=Di.accounts$.pipe(St((e=>{const t=f(e.map((e=>e.type)));return h(t,Ni.listRegisteredProviders())})))}static challengeDestructiveActions(e){return Ze((t=>{e?this.getAccountDetails(e).then((e=>{t(!!e&&e.challengeDestructiveActions)})).catch((()=>t(!1))):t(!1)}))}static getArtifactAccounts(){return Si("/artifacts/credentials").useCache().get()}static getAccountDetails(e){return this.listAllAccounts().then((t=>t.find((t=>t.name===e))))}static getAllAccountDetailsForProvider(e){return this.listAccounts(e).catch((t=>(Xe.warn(`Failed to load accounts for provider "${e}"; exception:`,t),[])))}static getAvailabilityZonesForAccountAndRegion(e,t,n){return this.getPreferredZonesByAccount(e).then((e=>e[t]&&e[t][n]||[]))}static getCredentialsKeyedByAccount(e=null){return this.listAllAccounts(e).then((e=>{const t=e.map((e=>e.name));return v(t,e)}))}static getPreferredZonesByAccount(e){const t={};return this.getAllAccountDetailsForProvider(e).then((e=>(e.forEach((e=>{t[e.name]={},e.regions.forEach((n=>{let a=n.availabilityZones;n.preferredZones&&(a=h(n.preferredZones,n.availabilityZones)),t[e.name][n.name]=a}))})),t)))}static getRegionsForAccount(e){return this.getAccountDetails(e).then((e=>e?e.regions:[]))}static getUniqueAttributeForAllAccounts(e,t){return this.getCredentialsKeyedByAccount(e).then((e=>A(e).map(t).flatten().compact().map((e=>e.name||e)).uniq().value()))}static listAllAccounts(e=null){return Ze.when(this.accounts$.toPromise()).then((t=>t.filter((t=>!e||t.type===e))))}static listAccounts(e=null){return this.listAllAccounts(e).then((e=>e.filter((e=>!1!==e.authorized))))}static applicationAccounts(e=null){return Ze.all([this.listProviders(e),this.listAccounts()]).then((([e,t])=>e.reduce(((e,n)=>e.concat(t.filter((e=>e.cloudProvider===n)))),[])))}static listProviders$(e=null){return this.providers$.pipe(St((t=>e?e.attributes.cloudProviders.length?h(t,e.attributes.cloudProviders):di.defaultProviders?h(t,di.defaultProviders):t:t)),St((e=>e.sort())))}static listProviders(e=null){return Ze.when(this.listProviders$(e).toPromise())}static getAccountForInstance(e,t,n){return n.ready().then((()=>{const a=n.getDataSource("serverGroups").data,i=n.getDataSource("loadBalancers").data,r=i.map((e=>e.serverGroups)).reduce(((e,t)=>e.concat(t)),[]),s=[].concat(a).concat(i).concat(r).find((n=>n.cloudProvider===e&&(n.instances||[]).some((e=>e.id===t))));return s&&s.account}))}}Di.initialize();const Ii=e=>(e=e||[]).map((e=>({label:e,value:e})));class Fi extends ot.Component{constructor(){super(...arguments),this.memoizedMakeOptions=un(Ii,E)}render(){const e=this.memoizedMakeOptions(this.props.strings);return(this.props.render||this.props.children)(e)}}class Ti extends cn{constructor(e){super(e),this.renderOuter=this._renderOuter}_renderOuter(){const e=super.renderOuter.apply(this,arguments);if(!e)return null;const t=this.wrapper?this.wrapper.offsetWidth:null;return ot.createElement(mn,{classes:{element:"layer-critical"},attachment:"top left",targetAttachment:"top left",constraints:[{to:"window",attachment:"together",pin:["top"]}]},ot.createElement("div",null),ot.cloneElement(e,{style:{position:"static",width:t}}))}}const Qi=({bufferHeight:e=0,initiallyVisible:t,placeholderHeight:n,render:a,container:i,disableHide:r})=>{const[s,o]=ot.useState(!!t),[l,c]=ot.useState(n);let p;const d=ot.useRef();return ot.useEffect((()=>{let t=s;return p=new IntersectionObserver((e=>{const n=e[0].isIntersecting;n&&!t&&(t=!0,o(!0)),n||!t||r||(t=!1,c(e[0].boundingClientRect.height),o(!1))}),{root:i,threshold:[0],rootMargin:e&&i?`${e}px 0px`:"0px"}),p.observe(d.current),()=>{p.disconnect()}}),[]),ot.createElement("div",{ref:d,className:"render-when-visible"},s&&a(),!s&&ot.createElement("div",{style:{height:l+"px"}}))},Pi={DEBUG:1,INFO:2,WARN:3,ERROR:4},Ri=e=>Pi[e||"INFO"];const Ui=new class{constructor(){this.loggers=[],this.ignoredErrors=["ResizeObserver loop limit exceeded","ResizeObserver loop completed with undelivered notifications."]}subscribe(e){return this.loggers.push(e),()=>this.loggers.filter((t=>t!==e))}unsubscribe(e){this.loggers.filter((t=>t.key!==e))}log(e){var t;(null==(t=e.error)?void 0:t.message)&&this.ignoredErrors.includes(e.error.message)||this.loggers.forEach((t=>{Ri(e.level)>=Ri(t.level)&&t.onEvent(e)}))}};oi(".clipboard-btn {\n background-color: transparent !important;\n border-width: 0 !important;\n color: var(--color-dovegray) !important;\n display: inline-block !important;\n margin-left: 2px !important;\n}\n.clipboard-btn:hover {\n background-color: transparent;\n}\n.copy-to-clipboard-sm .clipboard-btn {\n margin-bottom: 3px;\n}\n");class zi extends ot.Component{constructor(e){super(e),this.inputRef=ot.createRef(),this.mounted=!1,this.handleClick=e=>{e.preventDefault(),this.props.stopPropagation&&e.stopPropagation();const{analyticsLabel:t,text:n}=this.props;Ui.log({category:"Copy to Clipboard",action:"copy",data:{label:t||n}});const a=this.inputRef.current;a.focus(),a.select();try{document.execCommand("copy"),a.blur(),this.setState({tooltipCopy:"Copied!",shouldUpdatePosition:!0}),window.setTimeout(this.resetToolTip,3e3)}catch(e){a.blur(),this.setState({tooltipCopy:"Couldn't copy!",shouldUpdatePosition:!0})}},this.resetToolTip=()=>{this.mounted&&this.setState({tooltipCopy:!1,shouldUpdatePosition:!0})},this.state={tooltipCopy:!1,shouldUpdatePosition:!1}}componentDidMount(){this.mounted=!0}componentWillUnmount(){this.mounted=!1}renderTooltip(e){const{toolTip:t,text:n=""}=this.props,{tooltipCopy:a,shouldUpdatePosition:i}=this.state,r=Boolean(a),s=a||t,o=`clipboardValue-${n.toString().replace(" ","-")}`,l=ot.createElement(Zt,{id:o},s),c={shouldUpdatePosition:i};return s?ot.createElement(Xt,{defaultOverlayShown:r,placement:"top",overlay:l,delayHide:250,...c},e):e}render(){const{buttonInnerNode:e,text:t="",className:n="btn btn-xs btn-default clipboard-btn"}=this.props,a=ot.createElement("button",{onClick:this.handleClick,className:n,"aria-label":"Copy to clipboard"},e||ot.createElement("span",{className:"glyphicon glyphicon-copy"}));return ot.createElement(ot.Fragment,null,ot.createElement("textarea",{onChange:e=>e,ref:this.inputRef,value:t,tabIndex:-1,style:{zIndex:-1,position:"fixed",opacity:0,top:0,left:0}}),this.renderTooltip(a))}}zi.defaultProps={displayText:!1};const Gi=performance?performance.now.bind(performance):Date.now.bind(Date),ji=console.log.bind(console),Li=(e,t)=>"object"==typeof e&&e.constructor&&e.constructor.name?`${e.constructor.name}.${t}():`:`${t}():`,Oi=e=>(t,n,a)=>{const i=a.value;e=b(e||Li(t,n),50),a.value=function(){const t=Gi(),n=i.apply(this,arguments),a=Gi()-t;return ji(`${e} ${a} ms`),n}},Yi=(e,t=5e3)=>(n,a,i)=>{const r=i.value;let s=0;e=b(e||Li(n,a),50);let o=0;setInterval((()=>ji(`${e} ${b(""+s,10)} calls in ${o} ms`)),t),i.value=function(){s++;const e=Gi(),t=r.apply(this,arguments);return o+=Gi()-e,t}};function $i(...e){return e.find((e=>!u(e)))}class Hi{static generateDiff(e,t){const n=new gn,a=n.diff_linesToChars_(e,t),i=n.diff_main(a.chars1,a.chars2,!1);return n.diff_charsToLines_(i,a.lineArray),i}static sortObject(e){return!e||y(e)||C(e)?e:Object.keys(e).sort().reduce(((t,n)=>(w(e[n])?t[n]=this.sortObject(e[n]):x(e[n])?t[n]=e[n].map((e=>this.sortObject(e))):t[n]=e[n],t)),{})}static makeSortedString(e){return this.makeSortedStringFromObject(JSON.parse(e))}static makeSortedStringFromObject(e){return this.makeStringFromObject(this.sortObject(e))}static makeStringFromObject(e,t=2){return JSON.stringify(e,null,t)}static makeSortedStringFromAngularObject(e,t=[]){return JSON.stringify(this.sortObject(e),((e,n)=>{let a=n;return"string"==typeof e&&"$"===e.charAt(0)&&"$"===e.charAt(1)&&(a=void 0),t.includes(e)&&(a=void 0),a}))}static diff(e,t,n=!1){n&&(e=this.makeSortedString(e),t=this.makeSortedString(t));const a=this.generateDiff(e,t),i=[];let r=0,s=0,o=0,l=0;const c=[];return a.forEach((e=>{const t=e[1].split("\n");""===t[t.length-1]&&t.pop();let n="match";1===e[0]&&(n="add",r+=t.length,c.push({type:n,lines:t.length,start:l,height:null,top:null})),-1===e[0]&&(n="remove",s+=t.length,c.push({type:n,lines:t.length,start:l,height:null,top:null})),0===e[0]&&(o+=t.length),t.forEach((e=>i.push({type:n,text:e}))),l+=t.length})),c.forEach((e=>{e.height=100*e.lines/l,e.top=100*e.start/l})),{details:i,summary:{additions:r,removals:s,unchanged:o,total:l},changeBlocks:c}}}function Vi(e){const{diff:t}=e,n=ot.useRef();return ot.createElement(ot.Fragment,null,ot.createElement("pre",{ref:n,className:"form-control flex-fill diff"},t.details.map(((e,t)=>ot.createElement("div",{"data-attr-line":t,className:e.type,key:t},e.text)))),ot.createElement("div",{className:"summary-nav flex-fill",onClick:function(e){var a;let i;const r=e.target,s=e.currentTarget,o=n.current.firstChild.clientHeight;i=r.getAttribute("data-attr-block-line")?Number(r.getAttribute("data-attr-block-line")):(null==(a=e.nativeEvent)?void 0:a.offsetY)/s.clientHeight*t.summary.total,n.current.scroll({top:(i-3)*o,behavior:"smooth"})}},t.changeBlocks.map(((e,t)=>ot.createElement("div",{"data-attr-block-line":e.start,key:t,style:{height:e.height+"%",top:e.top+"%"},className:"delta "+e.type})))))}oi(".diff-view {\n width: 100%;\n display: block;\n position: relative;\n}\n.diff-view .diff {\n color: var(--color-black);\n font-size: 80%;\n overflow-x: visible;\n margin: 0;\n padding-bottom: 0;\n}\n.diff-view .diff .match,\n.diff-view .diff .add,\n.diff-view .diff .remove {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\n.diff-view .diff .match::before,\n.diff-view .diff .add::before,\n.diff-view .diff .remove::before {\n position: relative;\n left: 0;\n}\n.diff-view .diff .match {\n color: var(--color-dovegray);\n}\n.diff-view .diff .match::before {\n content: ' ';\n}\n.diff-view .diff .add {\n background-color: var(--color-github-history-add);\n}\n.diff-view .diff .add::before {\n content: '+';\n}\n.diff-view .diff .remove {\n background-color: var(--color-github-history-remove);\n}\n.diff-view .diff .remove::before {\n content: '-';\n}\n.diff-view .diff .form-group {\n margin-bottom: 0;\n}\n.diff-view .diff::-webkit-scrollbar {\n height: 8px;\n}\n.diff-view .summary-nav {\n cursor: pointer;\n z-index: 2;\n width: 12px;\n position: absolute;\n top: 0;\n right: 7px;\n height: calc(100% - 8px);\n}\n.diff-view .summary-nav .delta {\n width: 100%;\n position: absolute;\n min-height: 3px;\n}\n.diff-view .summary-nav .delta.add {\n background: var(--color-success);\n}\n.diff-view .summary-nav .delta.remove {\n background: var(--color-danger);\n}\n");const Ji=(e,t,n=!1)=>Ki(null,e,t,n);function Wi(e,t){const n=y(t)?`[${t}]`:t.includes(".")?`["${t}"]`:t,a=n.includes("["),i=e?a?e:`${e}.`:"";if(a&&!i)throw new Error(`Cannot construct path from '${n}' using array syntax because the parent path is undefined.`);return`${i}${n}`}const Ki=(e,t,n,a)=>{function i(i){null===e||!i&&a||n(e,t)}k(t)||B(t)?i(!0):w(t)?(i(!1),S(t,((t,i)=>Ki(Wi(e,i),t,n,a)))):Array.isArray(t)?(i(!1),t.forEach(((t,i)=>Ki(Wi(e,i),t,n,a)))):i(!0)};const qi=function(){};function Xi(e){return Ze(((t,n)=>{let a;e.subscribe((e=>a=e),(e=>n(e)),(()=>t(a)))}))}const Zi={bindings:{feature:"@"},controller:class{constructor(){this.featureEnabled=!1}$onInit(){this.featureEnabled=this.feature&&di.feature[this.feature]}},transclude:!0,template:'<ng-transclude ng-if="$ctrl.featureEnabled"></ng-transclude>'},_i="spinnaker.core.renderIfFeature.directive";n(_i,[]).component("renderIfFeature",Zi);class er{static toDomId(e){return e.replace(/[\W]/g,"-")}static scrollTo(e,t,n=0,a=0){_e((()=>{const a=hn(e);if(a.length){const e=t?a.closest(t):hn("body");if(e.length){const t=e.scrollTop()+a.offset().top-n;e.animate({scrollTop:t+"px"},200)}}}),a)}}const tr=()=>{const e=di.defaultTimeZone,t=En.local().setZone(e);return ot.createElement("span",null,t.offsetNameShort)},nr=e=>!(!e||isNaN(e)||e<0||e>864e13);function ar(e){if(!nr(e))return"-";const t=bn.fromMillis(e),n=Math.floor(t.as("days")),a=t.minus({days:Math.floor(t.as("days"))}),i=a.days||Math.floor(a.as("hours"))?"hh:mm:ss":"mm:ss";let r="";return a.isValid&&n>0&&(r=n+"d"),a.isValid?r+a.toFormat(i):"-"}function ir(e,t){const n=t.diff(e).shiftTo("days","hours","minutes","seconds"),a=[];let i=!1;const r=(e,t)=>{(n[e]||i)&&(a.push(t),i=!0)};return r("days","d'd'"),r("hours","h'h'"),r("minutes","m'm'"),a.push("s's'"),n.toFormat(a.join(" "))}function rr(e){if(!nr(e))return"-";const t=di.feature.displayTimestampsInUserLocalTime?void 0:di.defaultTimeZone,n=En.fromMillis(parseInt(e,10),{zone:t});return n.isValid?n.toFormat("yyyy-MM-dd HH:mm:ss ZZZZ"):"-"}function sr(e){if(!nr(e))return"-";const t=e>Date.now(),n=En.fromMillis(e),a=fn(n.toJSDate(),{includeSeconds:!0});return n.isValid?`${t?"in ":""}${a}${t?"":" ago"}`:"-"}function or(e){if(e&&!isNaN(e.hours)&&!isNaN(e.minutes)){const t=parseInt(e.hours,10),n=parseInt(e.minutes,10);let a="";return t<10&&(a+="0"),a+=t+":",n<10&&(a+="0"),a+=n,a}return"-"}const lr="spinnaker.core.utils.timeFormatters";n(lr,[]).filter("timestamp",(()=>rr)).filter("relativeTime",(()=>sr)).filter("duration",(()=>ar)).filter("timePickerTime",(()=>or)).component("systemTimezone",yn(tr));const cr=e=>decodeURIComponent(atob(e).split("").map((e=>"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2))).join(""));class pr{static getRandom(e){return Math.random()*e}static generateUuid(){let e="";for(let t=0;t<36;t++)switch(t){case 14:e+="4";break;case 19:e+="89ab".charAt(pr.getRandom(4));break;case 8:case 13:case 18:case 23:e+="-";break;default:e+="0123456789abcdef".charAt(pr.getRandom(16))}return e}}class dr{constructor(e){this.task=e,this.workerPromise=new Promise(((e,t)=>Object.assign(this,{resolve:e,reject:t})))}run(){const e=this.task();return e.then(this.resolve,this.reject),e}cancel(e){this.reject(B(e)?"Cancelled":e)}}class ur{constructor(e){this.concurrency=e,this.queuedTasks=[],this.runningTasks=[]}task(e){const t=new dr(e);return this.queuedTasks.push(t),this.flush(),t.workerPromise}cancelAll(e){[].concat(this.runningTasks).concat(this.queuedTasks).forEach((t=>t.cancel(e))),this.runningTasks=[],this.queuedTasks=[]}flush(){const{queuedTasks:e,runningTasks:t}=this;e.length&&t.length<this.concurrency&&this.runTask(e.shift())}completeTask(e){this.runningTasks=M(this.runningTasks,e),this.flush()}runTask(e){this.runningTasks.push(e);const t=()=>this.completeTask(e);e.run().then(t,t)}}function mr(e,t,n={leafNodesOnly:!0}){const a={};return Ji(e,((e,n)=>{t(n,e)&&g(a,e,n)}),n.leafNodesOnly),a}const gr=e=>u(e)?"":e,hr=(e={})=>Cn({"ng-dirty":!!e.touched,"ng-invalid":"error"===e.category,"ng-warning":"warning"===e.category}),fr=e=>({persist:qi,stopPropagation:qi,preventDefault:qi,target:e}),vr=e=>e&&e.length&&e.every(C);class Ar{constructor(e,t){this.name=e,this.label=t,this.validators=[]}required(e){return this.isRequired=!0,this.isRequiredMessage=e,this}optional(){return this.isRequired=!1,this.isRequiredMessage=void 0,this}spelAware(e=!0){return this.isSpelAware=e,this}withValidators(...e){return this.validators=this.validators.concat(e),this}}const Er="__FIELD_IS_VALID_SHORT_CIRCUIT__",br=e=>{const t=e.filter((e=>!!e));if(!t.length)return null;if(1===t.length)return t[0];return(e,n)=>t.map((t=>t(e,n))).find((e=>!!e))};function yr(e){if(!e)return"";let t=e.charAt(0).toUpperCase()+e.substr(1);return/\s/g.test(t)||(t=t.replace(/[A-Z]/g," $&"),t=t.replace(/_[a-z]/g,(function(e){return" "+e.charAt(1).toUpperCase()+e.substr(2)})),t=t.replace(/-[a-z]/g,(function(e){return" "+e.charAt(1).toUpperCase()+e.substr(2)})),t=t.replace(/([A-Z])\s([A-Z])\s/g,"$1$2")),t}function Cr(){return yr}const wr="spinnaker.core.presentation.robotToHuman.filter";n(wr,[]).filter("robotToHuman",Cr);const xr=new RegExp('^(([^<>()\\[\\]\\\\.,;:\\s@"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@"]+)*)|(".+"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$'),kr={arrayNotEmpty:e=>function(t,n="This field"){return e=e||`${n} must contain at least one entry`,t&&t.length<1&&e},checkBetween:(e,t,n)=>function(a){const i=Number.parseInt(a,10);if(!Number.isNaN(i)){return kr.minValue(t)(i,yr(e))||kr.maxValue(n)(i,yr(e))}return null},emailValue:e=>function(t,n="This field"){return e=e||`${n} is not a valid email address.`,t&&!xr.test(t)&&e},isNum:e=>function(t){return y(t)?null:e||"Must be a number"},isRequired:e=>function(t,n="This field"){return e=e||`${n} is required.`,(null==t||""===t)&&e},isValidJson:e=>function(t,n="this field"){try{JSON.parse(t)}catch(t){return e=e||`${n} must be valid JSON: ${t.message}`}},isValidXml:e=>function(t,n="this field"){const a=(new DOMParser).parseFromString(t,"text/xml").getElementsByTagName("parsererror");if(a&&a.length>0)return e=e||`${n} must be valid XML`},maxValue:(e,t)=>function(n,a="This field"){if(!y(n))return t||`${a} must be a number`;if(n>e){const n=`cannot be greater than ${e}`;return t||`${a} ${n}`}return null},minValue:(e,t)=>function(n,a="This field"){if(!y(n))return t||`${a} must be a number`;if(n<e){const n=0===e?"cannot be negative":`cannot be less than ${e}`;return t||`${a} ${n}`}return null},oneOf:(e,t)=>function(n,a="This field"){return e=e||[],t=t||`${a} must be one of (${e.join(", ")})`,!e.includes(n)&&t},skipIfUndefined:e=>function(t,n="This field"){return void 0!==t&&e(t,n)},skipIfSpel:e=>function(t,n="This field"){return"string"==typeof t&&t.includes("${")?void 0:e(t,n)},valueUnique:(e,t)=>function(n,a="This field"){return e=e||[],t=t||`${a} must be not be included in (${e.join(", ")})`,e.includes(n)&&t}};class Br{constructor(e){this.values=e,this.fields=[],this.isSpelAwareDefault=!1}field(e,t){t=t||N(e);const n=new Ar(e,t);return this.fields.push(n),n}spelAware(e=!0){return this.isSpelAwareDefault=e,this}getFieldValidators(e,t){const n=D(e.isSpelAware)?e.isSpelAware:t;return[e.isRequired?kr.isRequired(e.isRequiredMessage):null,e.isRequired?null:e=>null==e||""===e?Er:null,n?e=>"string"==typeof e&&e.includes("${")?Er:null:null,...e.validators].filter((e=>!!e))}validateForm(){return((e,t)=>e.reduce(((e,t)=>g(e,t.name,t.error)),t?[]:{}))(this.fields.map((e=>{const{name:t,label:n}=e,a=m(this.values,t);return{name:t,error:((e,t,n)=>e.reduce(((e,a)=>e||a(t,n)),""))(this.getFieldValidators(e,this.isSpelAwareDefault),a,n)}})).filter((e=>{return!(!(t=e.error)||t===Er||"string"!=typeof t&&(Array.isArray(t)?!t.length:"object"==typeof t?!Object.keys(t).length:!t));var t})),Array.isArray(this.values))}arrayForEach(e){return((e,t)=>(n,a)=>{if(!Array.isArray(n))return!1;const i=e(n);return n.forEach(((e,r)=>{const s=((e,t)=>({item:n=>e.field(`[${t}]`,n),field:(n,a)=>e.field(`[${t}].${n}`,a),validateForm:e.validateForm,arrayForEach:e.arrayForEach}))(i,r);t&&t(s,e,r,n,a)})),i.validateForm()})((e=>new Br(e)),e)}}function Sr(e){const{message:t,tag:n,className:a,trim:i,tag:r="div",...s}=e,o=ot.useMemo((()=>new wn),[]),l=ot.useMemo((()=>new xn),[]),c=`Markdown ${a||""}`;if(null==t)return null;const p=i?t.trim():t,d=s,u=o.parse(p.toString()),m=l.render(u);return d.dangerouslySetInnerHTML={__html:kn.sanitize(m,{...e.options,RETURN_DOM_FRAGMENT:!1,RETURN_DOM:!1})},ot.createElement(r,{...d,className:c})}oi(".Markdown p {\n margin: 0;\n}\n.Markdown p + p {\n margin-top: 4px;\n}\nspan.Markdown p {\n display: contents;\n}\n");const Mr=(e,t={},n=!1)=>ot.createElement(Sr,{message:e,tag:n?"span":"div",options:t});oi(".ValidationMessage {\n min-height: 40px;\n display: flex;\n margin-bottom: 2px;\n}\n.ValidationMessage.errorMessage {\n color: var(--color-validation-error);\n background-color: var(--color-validation-error-light);\n}\n.ValidationMessage.infoMessage {\n color: var(--color-validation-info);\n background-color: var(--color-validation-info-light);\n}\n.ValidationMessage.previewMessage {\n color: var(--color-validation-info);\n background-color: var(--color-validation-info-light);\n}\n.ValidationMessage.successMessage {\n color: var(--color-validation-success);\n background-color: var(--color-validation-success-light);\n}\n.ValidationMessage.warningMessage {\n color: var(--color-validation-black);\n background-color: var(--color-validation-warning-light);\n}\n.ValidationMessage i {\n flex: 0 0 40px;\n height: 40px;\n font-size: 24px;\n padding: 7px;\n}\n.ValidationMessage .message {\n margin: 8px 8px 8px 0;\n align-self: center;\n}\n");const Nr={async:"infoMessage",error:"errorMessage",info:"infoMessage",message:"infoMessage",success:"successMessage",warning:"warningMessage"},Dr={async:"fa fa-spinner fa-spin",error:"fa fa-exclamation-circle",info:"fa fa-info-circle",message:"icon-view-1",success:"far fa-check-circle",warning:"fa icon-alert-triangle"},Ir=e=>{const{type:t,message:n,iconClassName:a,containerClassName:i}=e,r=!1!==a;return ot.createElement("div",{className:`ValidationMessage ${i||Nr[t]||""}`},r&&ot.createElement("i",{className:a||Dr[t]||""}),ot.createElement("div",{className:"message"},C(n)?ot.createElement(Sr,{message:n}):n))},Fr={async:"Async",error:"Error",info:"Info",message:"Message",success:"Success",warning:"Warning"},Tr=I(Fr),Qr=Object.keys(Fr),Pr=Object.keys(Fr).reduce(((e,t)=>({...e,[Fr[t]]:t})),{}),Rr=e=>t=>t?`${Fr[e]}: ${t}`:null,Ur=Rr("async"),zr=Rr("error"),Gr=Rr("info"),jr=Rr("message"),Lr=Rr("success"),Or=Rr("warning"),Yr=new RegExp(`^(${Tr.join("|")}): ((?:[\r\n]|.)*)$`,"m"),$r=e=>{if(!e)return[null,null];const t=Yr.exec(e);if(!t)return["error",e];const[n,a]=t.slice(1);return[Pr[n],a]},Hr=e=>{const t=Qr.reduce(((e,t)=>({...e,[t]:{}})),{});return Ji(e,((e,n)=>{const[a,i]=$r(n);i&&g(t[a],e,i)}),!0),t};function Vr(e,t){return ot.useMemo((()=>{if(!e)return{category:null,messageNode:null,hidden:!0};if(ot.isValidElement(e))return{category:null,messageNode:e,hidden:!1};if(C(e)){const[n,a]=$r(e),i="error"===n||"warning"===n;return{category:n,messageNode:a,hidden:!t&&i}}return{category:null,messageNode:e,hidden:!0}}),[e,t])}const Jr={borderColor:"var(--color-danger)",WebkitBoxShadow:"inset 0 1px 1px rgba(0, 0, 0, 0.075)",boxShadow:"inset 0 1px 1px rgba(0, 0, 0, 0.075)"},Wr=(e,t)=>n=>{const a=n?Array.isArray(n)?n.map((e=>e.value)):n.value:null,i=fr({name:e,value:a});return(t||qi)(i)},Kr=(e,t,n)=>()=>{const a=fr({name:e,value:t});return(n||qi)(a)};function qr(e){const{name:t,onChange:n,onBlur:a,value:i,validation:r={},stringOptions:s,options:o,ignoreAccents:l,inputClassName:c,...p}=e,d=!u(l)&&l,m=e.mode||"TETHERED",g=gr(c),{category:h}=Vr(r.messageNode,r.touched),f={className:g,style:"error"===h?Jr:{},ignoreAccents:d,...{name:t,value:e.multi?u(i)?[]:i:gr(i),onBlur:Kr(t,i,a),onChange:Wr(t,n)},...p},v=({options:e})=>"TETHERED"===m?ot.createElement(Ti,{...f,options:e}):"VIRTUALIZED"===m?ot.createElement(dn,{...f,options:e,optionRenderer:null}):"CREATABLE"===m?ot.createElement(Xr,{...f,options:e}):ot.createElement(cn,{...f,options:e});return vr(s)?ot.createElement(Fi,{strings:s},(e=>ot.createElement(v,{options:e}))):ot.createElement(v,{options:o})}function Xr(e){const t=ot.useMemo((()=>{var t,n;const a=null!=(t=e.options)?t:[],i=a.map((e=>e.value)),r=(null!=(n=e.value)?n:[]).filter((e=>!i.includes(e))).map((e=>({label:e,value:e})));return a.concat(r)}),[e.options,e.value]);return ot.createElement(pn,{...e,options:t})}function Zr(e){const{value:t,defaultValue:n,validation:a,options:i,inputClassName:r,...s}=e,o=`SelectInput form-control ${gr(r)} ${hr(a)}`;lt((()=>{if(!u(n)){(vr(i)?i:i.map((e=>e.value))).includes(t)||e.onChange(fr({name:e.name,value:n}))}}),[t,n,i]);const l=({opts:e})=>ot.createElement("select",{className:o,value:gr(t),...s},e.map((e=>ot.createElement("option",{key:e.value,value:e.value,disabled:e.disabled},e.label))));return vr(i)?ot.createElement(Fi,{strings:i},(e=>ot.createElement(l,{opts:e}))):ot.createElement(l,{opts:i})}const _r=e=>!!e&&e.includes("${");class es extends ot.Component{constructor(){super(...arguments),this.state={mergedAccounts:[],primaryAccounts:[],secondaryAccounts:[]},this.groupAccounts=e=>{const{name:t,value:n,onChange:a,provider:i}=this.props;if(!e||!e.length)return;if(_r(n))return;const r=Boolean(e[0].name);let s=Ze.when([]);if(i&&(s=Di.getAllAccountDetailsForProvider(i)),!i&&r){const t=f(F(e,"type"));s=Ze.all(t.map((e=>Di.getAllAccountDetailsForProvider(e)))).then((e=>T(e)))}s.then((i=>{const s=r?F(e,"name"):e;let o=s,l=[],c=[];s&&(l=s.sort()),s&&s.length&&i.length&&(l=s.filter((e=>i.some((t=>t.name===e&&t.primaryAccount)))).sort(),c=Q(s,l).sort(),o=T([l,c])),o.includes(n)||a(fr({value:"",name:t})),this.setState({mergedAccounts:o,primaryAccounts:l,secondaryAccounts:c})}))}}componentDidMount(){this.groupAccounts(this.props.accounts)}componentWillReceiveProps(e){E(e.accounts,this.props.accounts)||this.groupAccounts(e.accounts)}render(){const{value:e,readOnly:t}=this.props,{mergedAccounts:n}=this.state,{primaryAccounts:a,secondaryAccounts:i}=this.state,r=a.length>0&&i.length>0,s=[{label:"Select...",value:"",disabled:!0}];if(s.push(...a.map((e=>({label:e,value:e})))),r&&s.push({label:"---------------",value:"-",disabled:!0}),s.push(...i.map((e=>({label:e,value:e})))),_r(e))return ot.createElement("div",{className:"sm-control-field"},ot.createElement("span",null,"Resolved at runtime from expression: ",ot.createElement("code",null,e)));if(t)return ot.createElement("div",null,ot.createElement("p",{className:"form-control-static"},e));const{renderFilterableSelectThreshold:o,...l}=this.props;if(n.length<o){const e=e=>{e.persist(),this.props.onChange(e)};return ot.createElement(Zr,{...l,inputClassName:"form-control input-sm",onChange:e,required:!0,options:s})}return ot.createElement(qr,{...l,clearable:!1,required:!0,options:s,mode:"PLAIN",menuContainerStyle:{minWidth:"150px"}})}}es.defaultProps={renderFilterableSelectThreshold:6};const ts=class extends ot.Component{constructor(){super(...arguments),this.state={isProdAccount:!1},this.mounted=!0}componentWillUnmount(){this.mounted=!1}componentDidMount(){this.updateAccount(this.props.account)}componentWillReceiveProps(e){this.updateAccount(e.account)}updateAccount(e){const{cache:t}=ts;t.hasOwnProperty(e)||(t[e]=Di.challengeDestructiveActions(e).then((n=>t[e]=!!n)));const n=t[e];"boolean"==typeof n?this.setState({isProdAccount:n}):n.then((e=>this.mounted&&this.setState({isProdAccount:e})))}render(){const{account:e,className:t}=this.props,{isProdAccount:n}=this.state,a="account-tag-wrapper"===t;return ot.createElement("span",{className:`account-tag account-tag-${n?"prod":"notprod"} ${t||""}`},ot.createElement("span",{className:"account-tag-name",title:a?e:null},e))}};let ns=ts;ns.cache={};const as=ot.createContext(void 0),is=({app:e,children:t})=>ot.createElement(as.Provider,{value:e},t);class rs extends ot.Component{constructor(e){super(e)}componentWillReceiveProps(e){this.$scope&&(this.$scope.props=e)}refCallback(e){if(!e)return;const{controller:t,controllerAs:n,locals:a}=this.props,i=this.props.template,r=this.props.templateUrl,s={...this.props,...a};r?et(r).then((a=>{this.renderAngularTemplateAndController(e,a,t,n,s)})):this.renderAngularTemplateAndController(e,i,t,n,s)}renderAngularTemplateAndController(e,t,n,i,r){const s=a(e),o=s.scope(),l=this.$scope=o.$new();if(l.props=this.props,s.html(t),tt(e)(l),n){const e=nt(i?`${n} as ${i}`:n,{$scope:l,$element:s,...r});s.data("$ngControllerController",e)}}componentWillUnmount(){this.$scope.$destroy()}render(){return ot.createElement("div",{className:"AngularJSAdapter",ref:e=>this.refCallback(e)})}}var ss,os,ls,cs,ps,ds,us,ms,gs,hs,fs,vs;function As(){return(As=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e}).apply(this,arguments)}rs.defaultProps={locals:{}};var Es=function(e){return st.createElement("svg",As({xmlns:"http://www.w3.org/2000/svg",style:{margin:"auto",background:"0 0",display:"block",shapeRendering:"auto"},preserveAspectRatio:"xMidYMid",viewBox:"24 24 52 52"},e),ss||(ss=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.9166666666666666s",repeatCount:"indefinite"}))),os||(os=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(30 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.8333333333333334s",repeatCount:"indefinite"}))),ls||(ls=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(60 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.75s",repeatCount:"indefinite"}))),cs||(cs=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(90 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.6666666666666666s",repeatCount:"indefinite"}))),ps||(ps=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(120 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.5833333333333334s",repeatCount:"indefinite"}))),ds||(ds=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(150 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.5s",repeatCount:"indefinite"}))),us||(us=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(180 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.4166666666666667s",repeatCount:"indefinite"}))),ms||(ms=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(210 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.3333333333333333s",repeatCount:"indefinite"}))),gs||(gs=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(240 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.25s",repeatCount:"indefinite"}))),hs||(hs=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(270 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.16666666666666666s",repeatCount:"indefinite"}))),fs||(fs=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(300 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.08333333333333333s",repeatCount:"indefinite"}))),vs||(vs=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(330 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"0s",repeatCount:"indefinite"}))))};const bs=({color:e="#ffffff",fullWidth:t,message:n,className:a,mode:i="horizontal",size:r="small"})=>{if("circular"===i){const t={nano:12,small:16,medium:24,large:32};return ot.createElement(Es,{className:a,style:{height:t[r],fill:e}})}const s=()=>{let e=3;r&&("nano"===r?e=1:"large"===r&&(e=5));const t=[];let n;for(n=0;n<e;n++)t.push(ot.createElement("div",{key:n,className:"bar"}));return t},o="message color-text-accent "+("medium"===r?"heading-4":"heading-2"),l=["medium","large"].includes(r)&&ot.createElement("div",{className:o},n||"Loading ..."),c=["medium","large"].includes(r)?ot.createElement("div",{className:"bars"},s()):s();return ot.createElement("div",{className:Cn("load",r||"small",a,{"full-width":t})},l,c)};function ys(e){return function(t){return Cs(t,e)}}function Cs(e,t){class n extends ot.Component{constructor(e){super(e),this.account$=new At,this.destroy$=new At;let t=!0;this.account$.pipe(Dt((e=>e?Di.accounts$.pipe(St((t=>t.find((t=>t.name===e))))):Et(null))),St((e=>this.getComponent(e))),It(this.destroy$)).subscribe((e=>{t?this.state={Component:e}:this.setState({Component:e})})),this.account$.next(this.props.accountId),t=!1}componentWillUnmount(){this.destroy$.next()}componentWillReceiveProps(e){const{accountId:t}=e;this.props.accountId!==t&&this.account$.next(t)}getComponentFromCloudProvider(e){const{cloudProvider:n}=e;if(!n)return null;const a=Ni.getValue(n,t);if(a)return a;const i=Ni.getValue(n,t+"TemplateUrl");if(i){const e=Ni.getValue(n,t+"Controller"),a=e&&e.includes(" as ")?void 0:"ctrl";return t=>ot.createElement(rs,{...t,templateUrl:i,controller:e,controllerAs:a})}return null}getComponentFromOverrideRegistry(){const{overrideRegistry:e}=hi,n=e.getComponent(t);if(n)return n;const a=e.getTemplate(t,null);if(a){const n=e.getController(t,null),i=n&&n.includes(" as ")?void 0:"ctrl";return e=>ot.createElement(rs,{...e,templateUrl:a,controller:n,controllerAs:i})}return null}getComponent(t){return this.getComponentFromCloudProvider(t||{})||this.getComponentFromOverrideRegistry()||e}render(){const t=this.state&&this.state.Component,n=t&&t!==e,a={...this.props,...n?{OriginalComponent:e}:{}};if(!t)return ot.createElement(bs,null);return["render","prototype.render"].some((e=>"function"==typeof m(t,e)))?ot.createElement(t,{...a,ref:this.props.forwardedRef}):ot.createElement(t,{...a})}}n.OriginalComponent=e;const a=ot.forwardRef(((e,t)=>ot.createElement(n,{...e,forwardedRef:t})));return Object.getOwnPropertyNames(e).filter((e=>"constructor"!==e&&!n.hasOwnProperty(e))).forEach((t=>a[t]=e[t])),a}var ws=Object.defineProperty,xs=Object.getOwnPropertyDescriptor;let ks=class extends ot.Component{render(){return ot.createElement("i",{className:"application-header-icon far fa-window-maximize"})}};ks=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?xs(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&ws(t,n,r),r})([ys("applicationIcon")],ks);oi(".collapsible-element {\n position: relative;\n}\n.collapsible-element .content {\n position: relative;\n overflow: hidden;\n}\n.collapsible-element .content.collapsed:after {\n content: '';\n width: 100%;\n height: 100%;\n position: absolute;\n left: 0;\n bottom: 0;\n background: linear-gradient(0deg, var(--color-white) 0px, transparent 40px);\n}\n.collapsible-element .expand-button {\n display: none;\n position: absolute;\n bottom: 0;\n text-align: center;\n padding-top: 2px;\n border: none;\n border-top: 2px solid #009cb8;\n color: #009cb8;\n width: 100%;\n background-color: var(--color-white);\n outline: none;\n}\n.collapsible-element .expand-button:hover {\n text-decoration: underline;\n}\n.collapsible-element:hover .expand-button {\n display: block;\n}\n");const Bs=({children:e,maxHeight:t})=>{const[n,a]=ot.useState(!0),[i,r]=ot.useState(!1),s=ot.useRef(null),o=ot.useCallback((()=>{s.current&&r(s.current.offsetHeight<s.current.scrollHeight)}),[]);return ot.useEffect((()=>{o()}),[e,o]),ot.useEffect((()=>(window.addEventListener("resize",o),()=>window.removeEventListener("resize",o))),[]),ot.createElement("div",{className:"collapsible-element"},ot.createElement("div",{style:{maxHeight:n?t:void 0},className:Cn(["content",{collapsed:n&&i}]),ref:s},e),(i||!n)&&ot.createElement("button",{className:"expand-button",onClick:()=>a((e=>!e))},n?"Read more":"Read less"))};class Ss{constructor(){this.cacheFactory=new Mn,this.cacheId="collapsibleSectionStateCache",this.handlers=new Map;try{this.cacheFactory.createCache(this.cacheId,{maxAge:6048e5,deleteOnExpire:"aggressive",storageMode:"localStorage"})}catch(e){}this.stateCache=this.cacheFactory.get(this.cacheId)}isSet(e){return!!e&&void 0!==this.stateCache.get(e)}isExpanded(e){return!!e&&!0===this.stateCache.get(e)}setExpanded(e,t){if(e){this.stateCache.put(e,!!t);const n=this.handlers.get(e);n&&n(!Ms.isSet(e)||Ms.isExpanded(e))}}onChange(e,t){this.handlers.get(e)||this.handlers.set(e,t)}}const Ms=new Ss,Ns={left:{expanded:"rotate-0",collapsed:"rotate-m90"},right:{expanded:"rotate-p180",collapsed:"rotate-p270"}},Ds=({outerDivClassName:e="collapsible-section",toggleClassName:t="section-heading",headingClassName:n="collapsible-heading",bodyClassName:a="content-body",enableCaching:i=!0,cacheKey:r,defaultExpanded:s,heading:o,expandIconPosition:l="left",expandIconType:c="arrow",expandIconSize:p,onToggle:d,children:u})=>{const m=ot.useMemo((()=>r||("string"==typeof o?o:void 0)),[r,o]),[g,h]=ot.useState(i&&Ms.isSet(m)?Ms.isExpanded(m):s),f={size:p||"16px",color:"concrete"},v=u?ot.createElement("span",{className:Cn("section-heading-chevron",l)},"arrow"===c?ot.createElement(Bn,{name:"accordionCollapse",className:Ns[l][g?"expanded":"collapsed"],...f}):"plus"===c?ot.createElement(Bn,{name:g?"minus":"plus",...f}):ot.createElement(Bn,{name:g?"closeSmall":"accordionCollapse",...f})):void 0,A="string"==typeof o?ot.createElement("h4",{className:n},"left"===l?ot.createElement(ot.Fragment,null,v," ",o):ot.createElement(ot.Fragment,null,o," ",v)):ot.createElement(ot.Fragment,null,o({chevron:v}));return ot.createElement("div",{className:e},u?ot.createElement("div",{className:Cn(t,"clickable","as-link"),onClick:()=>{h(!g),i&&Ms.setExpanded(m,!g),null==d||d(!g)}},A):A,g&&u&&ot.createElement("div",{className:a},u))};class Is{static get(e){return this.labels.get(e)||e}static register(e,t){this.labels.set(e,t)}}Is.labels=new Map;const Fs=ot.createElement("div",{className:"close-button"},ot.createElement(Dn,{to:"^"},ot.createElement("a",{className:"btn btn-link"},ot.createElement("span",{className:"glyphicon glyphicon-remove"})))),Ts=ot.createElement("div",{className:"header"},ot.createElement("div",{className:"horizontal center middle spinner-container"},ot.createElement(bs,null))),Qs=e=>ot.createElement("div",{className:"details-panel"},e.loading?Ts:e.children);Qs.Header=e=>ot.createElement("div",{className:"header"},Fs,ot.createElement("div",{className:"header-text horizontal middle"},e.icon,ot.createElement("h3",{className:"horizontal middle space-between flex-1"},e.name)),ot.createElement("div",null,e.children));class Ps extends ot.Component{constructor(){super(...arguments),this.handleRef=e=>{e&&(this.popover=e)}}componentWillReceiveProps(e){this.popover&&(this.props.value&&!e.value&&this.popover.hide(),!this.props.value&&e.value&&this.popover.show())}render(){const{delayShow:e,id:t,placement:n,template:a,value:i}=this.props,r=t||i||"tooltip";let s=ot.createElement(Zt,{id:r},ot.createElement(Sr,{message:i}));a&&(s=ot.createElement(Zt,{id:r},a));const o=i&&i.length>0||a?["hover","focus"]:[];return ot.createElement(Xt,{ref:this.handleRef,delayShow:e,placement:n,overlay:s,trigger:o},this.props.children)}}Ps.defaultProps={placement:"top",value:""};const Rs=e=>{const{error:t,...n}=e;return t&&(n.className=`${n.className||""} invalid`),n.type=n.type||"text",ot.createElement(Ps,{id:n.name,value:e.error,placement:"right"},ot.createElement("input",{...n}))},Us=(e,t)=>{const n=`Value must be a${t?" ":" positive "}number or a SpEL expression.`,a=Number(e);if(Number.isNaN(a)){const t=String(e),a=t?t.indexOf("${"):-1;return-1!==a&&t.includes("}",a)?null:n}return!t&&a<0?n:null},zs=jn((({render:e,formik:t})=>e(t)));const Gs=ot.forwardRef((function(e,t){const n=ot.useRef(),a=t||n,[i,r]=ot.useState(!1),[s,o]=ot.useState(!1);return ot.useEffect((()=>{if(i){const t=a.current,n={};Ji(e.initialValues,(e=>g(n,e,!0)),!0),t.setTouched(n),t.getFormikActions().validateForm(),o(!0)}}),[i]),ot.createElement(Ln,{ref:function(e){a.current=e,i||r(!0)},...e,isInitialValid:e.isInitialValid||(()=>a.current&&0===Object.keys(a.current.state.errors).length),render:t=>s&&e.render&&e.render(t)})}));class js extends ot.Component{constructor(e){super(e);const{value:t}=e;this.state={value:t}}componentDidUpdate(){if(!this.props.onChange)return;const{value:e,isEqual:t}=this.props,{value:n}=this.state;t(e,n)||(this.setState({value:e}),this.props.onChange(e,n))}render(){return this.props.children||null}}function Ls(){const e=ct("FIRST_RENDER");return lt((()=>(e.current="MOUNTED",()=>{e.current="UNMOUNTED"}))),e}js.defaultProps={isEqual:(e,t)=>e===t};function Os(e){const{label:t,help:n,input:a,actions:i,validation:r={}}=e,{hidden:s,messageNode:o,category:l}=r,c=!B(t)||!B(n);return ot.createElement("div",{className:"StandardFieldLayout flex-container-h baseline margin-between-lg"},c&&ot.createElement("div",{className:"StandardFieldLayout_Label sm-label-right"},t," ",n),ot.createElement("div",{className:"flex-grow"},ot.createElement("div",{className:"flex-container-v margin-between-md"},ot.createElement("div",{className:"flex-container-h baseline space-between margin-between-lg StandardFieldLayout_Contents"},a," ",i),!s&&ot.createElement(Ir,{message:o,type:l}))))}oi(".StandardFieldLayout + .StandardFieldLayout {\n margin-top: 6px;\n}\n\n.StandardFieldLayout .StandardFieldLayout_Label {\n min-width: 120px;\n}\n\n.StandardFieldLayout .StandardFieldLayout_Contents > *:first-child {\n flex: 1;\n}\n");const Ys=ot.createContext(Os),{Provider:$s,Consumer:Hs}=Ys,Vs=ot.createContext(!1);class Js{static get(e){return this.labels.get(e)||e}static register(e,t){this.labels.set(e,t)}}function Ws(e){return ot.createElement("span",null,Js.get(e.label))}Js.labels=new Map,di.useClassicFirewallLabels&&(Js.register("firewall","security group"),Js.register("firewalls","security groups"),Js.register("Firewall","Security Group"),Js.register("Firewalls","Security Groups"));class Ks{static getHelpField(e){let t=this.helpFields.get(e);return t&&(t=t.replace(/{{(.+?)}}/g,((e,t)=>Js.get(t)))),t||null}static register(e,t){this.overrides.has(e)||this.helpFields.set(e,t)}static registerOverride(e,t){this.register(e,t),this.overrides.add(e)}}Ks.helpFields=new Map,Ks.overrides=new Set;oi(".HoverablePopover {\n display: inline;\n -webkit-text-decoration: dotted underline var(--color-dovegray);\n text-decoration: dotted underline var(--color-dovegray);\n}\n");class qs extends ot.Component{constructor(e){super(e),this.mouseEvents$=new At,this.hidePopoverEvents$=new At,this.destroy$=new At,this.targetRef=ot.createRef(),this.handleMouseEvent=e=>{this.mouseEvents$.next(e)},this.rendererRefCallback=e=>{if(e){const{clientWidth:t,clientHeight:n}=ln.findDOMNode(e),a=this.targetRef.current.getBoundingClientRect(),i=window.innerHeight-a.bottom,r=window.innerWidth-a.right;let s;switch(this.props.placement){case"top":s=n>a.top&&a.top<i?"bottom":void 0;break;case"bottom":s=n>i&&i<a.top?"top":void 0;break;case"left":s=t>a.left&&a.left<r?"right":void 0;break;case"right":s=t>r&&r<a.left?"left":void 0}this.setState({placementOverride:s})}},this.Wrapper=({children:e,...t})=>{const{svgMode:n}=this.props;return n?ot.createElement("g",{...t,ref:this.targetRef},e):ot.createElement("div",{...t,ref:this.targetRef},e)},this.state={popoverIsOpen:!1,animation:!0}}componentWillUnmount(){this.destroy$.next()}componentDidMount(){const e=["mouseenter","mouseover"],t=this.mouseEvents$.pipe(St((t=>{const n=e.includes(t.type);return{shouldOpen:n,eventDelay:n?this.props.delayShow:this.props.delayHide,animation:!0}}))),n=this.hidePopoverEvents$.pipe(St((()=>({shouldOpen:!1,eventDelay:0,animation:!1}))));bt(t,n).pipe(St((({shouldOpen:e,eventDelay:t,animation:n})=>Et({shouldOpen:e,animation:n}).pipe(Ft(t)))),Dt((e=>e)),Tt((({shouldOpen:e})=>e!==this.state.popoverIsOpen)),It(this.destroy$)).subscribe((({shouldOpen:e,animation:t})=>this.setPopoverOpen(e,t)))}setPopoverOpen(e,t=!0){this.setState({animation:t,popoverIsOpen:e});const n=e?this.props.onShow:this.props.onHide;n&&n()}render(){const{Component:e,template:t,placement:n,container:a,hOffsetPercent:i,id:r,title:s,className:o}=this.props,{popoverIsOpen:l,animation:c,placementOverride:p}=this.state,{Wrapper:d}=this,u=e?ot.createElement(e,{...this.props,hidePopover:()=>this.hidePopoverEvents$.next()}):t;return ot.createElement(d,{className:Cn("HoverablePopover",this.props.wrapperClassName),onMouseEnter:this.handleMouseEvent,onMouseLeave:this.handleMouseEvent},this.props.children,ot.createElement(_t,{show:l,animation:c,placement:p||n,target:this.targetRef.current,container:a,shouldUpdatePosition:!0},ot.createElement(Xs,{ref:this.rendererRefCallback,onMouseOver:this.handleMouseEvent,onMouseLeave:this.handleMouseEvent,offsetPercent:i,id:r,title:s,className:o},u)))}}qs.defaultProps={placement:"top",id:pr.generateUuid(),delayShow:0,delayHide:300};class Xs extends ot.Component{constructor(){super(...arguments),this.state={}}componentDidMount(){this.setState(this.getState(this.props))}componentWillReceiveProps(e){this.setState(this.getState(e))}getState(e){const{offsetPercent:t}=e,n=e=>{const t=/(\d+(?:\.\d+)?)%/.exec(e);return t?parseFloat(t[1])/100:.5},a=n(t)-n(e.arrowOffsetLeft);return{offset:0-ln.findDOMNode(this).clientWidth*a}}render(){const{offsetPercent:e,...t}=this.props,{offset:n}=this.state;if(n){const{style:a}=this.props,i=parseInt(`${a.left}`,10)+n,r={...a,left:i};return ot.createElement(en,{...t,style:r,arrowOffsetLeft:e})}return ot.createElement(en,{...t})}}function Zs(e){const{id:t,fallback:n,content:a}=e;let i=a;t&&!i&&(i=Ks.getHelpField(t)||n);return ot.createElement(Sr,{message:i,options:{ADD_ATTR:["target"]},trim:!0})}function _s(e){const{content:t,expand:n,fallback:a,id:i,label:r,placement:s}=e,[o,l]=ot.useState(),c=ot.createElement("i",{className:"small glyphicon glyphicon-question-sign"}),p=ot.useContext(Vs),d=B(n)?p:n;if(!i&&!t)return null;const u=ot.createElement(Zs,{content:t,fallback:a,id:i}),m=ot.createElement(qs,{placement:s||"top",template:u,onShow:()=>l(Date.now()),onHide:()=>{Date.now()-o>500&&Ui.log({action:"Help contents viewed",category:"Help",data:{label:e.id||e.content}})}},ot.createElement("span",{className:"clickable help-field"}," ",r||c," "));if(r)return ot.createElement("div",{className:"text-only"},!d&&u&&m);{const e=ot.createElement("div",{className:"help-contents small"}," ",u," ");return ot.createElement("div",{style:{display:"inline-block"}},!d&&u&&m,d&&u&&e)}}class eo{static createScheduler(e=di.pollSchedule||3e4){let t=new At,n=(new Date).getTime(),a=null,i=!1,r=yt(e,e);const s=()=>{i||(_e.cancel(a),n=(new Date).getTime(),t.next(!0),a=null)};r.subscribe(s);const o=()=>{Xe.debug("auto refresh suspended"),i=!0},l=e=>{i=!1,a=a||_e(s,e)},c=()=>{i=!1;const t=(new Date).getTime();Xe.debug("auto refresh resumed"),t-n>e?s():l(e-(t-n))},p=()=>{Xe.debug("document visibilityState changed to: ",document.visibilityState),"visible"===document.visibilityState?c():o()};return document.addEventListener("visibilitychange",p),at.addEventListener("offline",o),at.addEventListener("online",c),t.next(!0),{subscribe:t.subscribe.bind(t),scheduleImmediate:()=>{s(),i=!0,l(e)},unsubscribe:()=>{i=!0,t&&t.unsubscribe(),t=null,r=null,_e.cancel(a),document.removeEventListener("visibilitychange",p),at.removeEventListener("offline",o),at.removeEventListener("online",c)}}}}class to{static publish(e){Kn.isActive(e.key)?Kn.update(e.key,{render:e.content,...e.options}):Kn(e.content,{toastId:e.key,...e.options})}static clear(e){Kn.dismiss(e)}}class no{static initialize(){Xe.debug("Deck version",this.currentVersion.version,"created",rr(this.currentVersion.created)),this.scheduler=eo.createScheduler(),this.scheduler.subscribe((()=>this.checkVersion()))}static checkVersion(){const e=`/version.json?_=${Date.now()}`;We.get(e).then((e=>this.versionRetrieved(e))).catch((()=>{}))}static versionRetrieved(e){const t=e.data;t.version===this.currentVersion.version?this.newVersionSeenCount=0:(this.newVersionSeenCount++,this.newVersionSeenCount>5&&(Xe.debug("New Deck version:",t.version,"created",rr(t.created)),to.publish({key:"newVersion",action:"create",content:ot.createElement("div",null,"A new version of Spinnaker is available"," ",ot.createElement("a",{role:"button",className:"action",onClick:()=>document.location.reload(!0)},"Refresh"))}),this.scheduler.unsubscribe()))}}no.currentVersion=Wn,no.newVersionSeenCount=0;oi(".help-menu {\n border: 0;\n}\n.help-menu .dropdown-toggle,\n.help-menu .dropdown-toggle:active {\n font-size: 14px;\n font-weight: 200;\n margin: 0;\n border: 0;\n background: transparent;\n border-radius: 0;\n color: var(--color-white);\n}\n.help-menu .dropdown-toggle .caret,\n.help-menu .dropdown-toggle:active .caret {\n margin-left: 3px;\n}\n.help-menu .dropdown.open .dropdown-toggle {\n background-color: transparent;\n text-decoration: none;\n color: var(--color-white);\n box-shadow: none;\n}\n.help-menu .dropdown-menu {\n border: 0;\n}\n");const ao="https://spinnaker.io/docs",io=()=>di.feedback&&di.feedback.url?ot.createElement(an,{href:di.feedback.url,target:"_blank"},ot.createElement("i",{className:di.feedback.icon||"fa fa-envelope"}),"Β ",di.feedback.text||"Send feedback"):null,ro=()=>di.additionalHelpLinks&&di.additionalHelpLinks.length?ot.createElement(ot.Fragment,null,di.additionalHelpLinks.map(((e,t)=>ot.createElement(an,{href:e.url,key:t,target:"_blank"},e.icon?ot.createElement("span",null,ot.createElement("i",{className:e.icon})," Β "):null,e.text||"Additional Help")))):null,so=()=>{if(!di.version)return null;const e=di.version.replace(/\./g,"-"),t=di.changelogUrl.replace(":version",e);return ot.createElement(an,{href:t,target:"_blank"},"Spinnaker ",di.version)},oo=()=>ot.createElement("li",{className:"help-menu"},ot.createElement(tn,{id:"help-menu-dropdown",pullRight:!0},ot.createElement(tn.Toggle,{className:"hidden-lg",noCaret:!0},ot.createElement(nn,{glyph:"question-sign"})),ot.createElement(tn.Menu,null,ot.createElement(io,null),ot.createElement(ro,null),ot.createElement(an,{href:ao,target:"_blank"},"Docs"),ot.createElement(an,{divider:!0}),ot.createElement(an,{href:"https://spinnaker.io/community",target:"_blank"},"Community Resources"),ot.createElement(so,null),di.feature.pagerDuty&&ot.createElement("li",{role:"presentation"},ot.createElement(Dn,{to:"home.page"},ot.createElement("a",{className:"clickable"},ot.createElement("span",{className:"feedback-item-label"},"Send a Page")))))),ot.createElement(tn,{id:"help-menu-dropdown-large",pullRight:!0},ot.createElement(tn.Toggle,{className:"hidden-xs hidden-sm hidden-md",noCaret:!0},ot.createElement(nn,{glyph:"question-sign"})," Help"),ot.createElement(tn.Menu,null,ot.createElement(io,null),ot.createElement(ro,null),ot.createElement(an,{href:ao,target:"_blank"},"Docs"),ot.createElement(an,{href:"https://spinnaker.io/community",target:"_blank"},"Community Resources"),ot.createElement(so,null),di.feature.pagerDuty&&ot.createElement("li",{role:"presentation"},ot.createElement(Dn,{to:"home.page"},ot.createElement("a",{className:"clickable"},ot.createElement("span",{className:"feedback-item-label"},"Send a Page")))))));var lo;const co={"core.serverGroup.detail":"(Optional) <b>Detail</b> is a string of free-form alphanumeric characters and hyphens to describe any other variables in naming a cluster.","core.serverGroup.strategy":"The deployment strategy tells Spinnaker what to do with the previous version of the server group.","cluster.search":'\n Quickly filter the displayed server groups by the following fields:\n <ul>\n <li>Build # (e.g. <samp>#337</samp>)</li>\n <li>Jenkins host</li>\n <li>Jenkins job name</li>\n <li>Cluster (prefixed, e.g. <samp>cluster:myapp-int</samp>)\n <li>VPC (prefixed, e.g. <samp>vpc:main</samp>)\n <li>Clusters (comma-separated list, e.g. <samp>clusters:myapp-int, myapp-test</samp>)\n <li>Server Group Name</li>\n <li>Region</li>\n <li>Account</li>\n <li>Load Balancer Name</li>\n <li>Instance ID</li>\n <li>Labels (comma-separated list of key-value pairs that must all apply to entity, e.g. <samp>labels:app=spinnaker, source=prod</samp>)</li>\n </ul>\n <p>You can search for multiple words or word fragments. For instance, to find all server groups in a prod stack with "canary" in the details, enter <samp>prod canary</samp>.</p>\n <p>To find a particular instance, enter the instance ID. Only the containing server group will be displayed, and the instance\n will be highlighted for you.</p>',"loadBalancer.search":'\n Quickly filter the displayed load balancers by the following fields:\n <ul>\n <li>VPC (prefixed, e.g. <samp>vpc:main</samp>)\n <li>Server Group Name</li>\n <li>Load Balancer Name</li>\n <li>Region</li>\n <li>Account</li>\n <li>Instance ID</li>\n </ul>\n <p>You can search for multiple words or word fragments. For instance, to find all load balancers in a prod stack with "canary" in the details, enter <samp>prod canary</samp>.</p>',"securityGroup.search":"\n Filter by the following fields:\n <ul>\n <li>VPC (prefixed, e.g. <samp>vpc:main</samp>)\n <li>Name</li>\n <li>Server Group Name</li>\n <li>Load Balancer Name</li>\n <li>Region</li>\n <li>Account</li>\n </ul>","executions.search":"\n Quickly filter the displayed executions by the following fields:\n <ul>\n <li>Name</li>\n <li>Trigger</li>\n </ul>","pipeline.config.triggers.respectQuietPeriod":"\n <p>The quiet period is a system operator designated period of time when automated pipelines and deploys should not run.</p>","pipeline.config.expectedArtifact":"Artifacts required for trigger to execute. Only one of the artifacts needs to be present for the trigger to execute.","pipeline.config.artifact.help":"\n <p>There are certain types of triggers (e.g. Pub/Sub triggers) that can produce artifacts and inject them into the execution context for a pipeline.</p>\n <p>You can specify artifacts that your pipeline expects to be present in the execution context in this section.</p>","pipeline.config.artifact.missingPolicy":"\n <p>The behavior of the pipeline if the Artifact is missing from the pipeline execution.</p>","pipeline.config.artifact.name":"\n <p>The name of the Artifact.</p>","pipeline.config.artifact.type":"\n <p>The type of the Artifact, e.g. 'gcs/object' or 'rpm'.</p>","pipeline.config.lock.allowUnlockUi":"\n <p><strong>Checked</strong> - the pipeline can be unlocked via the Spinnaker UI.</p>\n <p><strong>Unchecked</strong> - the pipeline can only be unlocked via the Spinnaker API.</p>","pipeline.config.lock.description":"\n <p>Friendly description of why this pipeline is locked.</p>\n <p>Please include an email address or slack channel as appropriate.</p>","pipeline.config.optionalStage":"\n <p>When this option is enabled, stage will only execute when the supplied expression evaluates true.</p>\n <p>The expression <em>does not</em> need to be wrapped in ${ and }.</p>\n <p>If this expression evaluates to false, the stages following this stage will still execute.</p>","pipeline.config.checkPreconditions.failPipeline":"\n <p><strong>Checked</strong> - the overall pipeline will fail whenever this precondition is false.</p>\n <p><strong>Unchecked</strong> - the overall pipeline will continue executing but this particular branch will stop.</p>","pipeline.config.checkPreconditions.failureMessage":"\n <p> This failure message will be shown to the user if the precondition evaluates to false. </p>","pipeline.config.checkPreconditions.expectedSize":"Number of server groups in the selected cluster","pipeline.config.checkPreconditions.expression":'\n <p>Value must evaluate to "true".</p>\n <p>Use of the <b>Spring Expression Language</b> allows for complex evaluations.</p>',"pipeline.config.deploy.template":"\n <p>Select an existing cluster to use as a template for this deployment, and we'll pre-fill\n the configuration based on the newest server group in the cluster.</p>\n <p>If you want to start from scratch, select \"None\".</p>\n <p>You can always edit the cluster configuration after you've created it.</p>","pipeline.config.expectedArtifact.matchArtifact":'\n <p>\n This specifies which fields in your incoming artifact to match against. Every field that\n you supply will be used to match against all incoming artifacts. If all specified fields\n match, the incoming artifact is bound to your pipeline context.\n </p>\n <p>\n The field comparisons are done against the incoming artifact. Example: if you are parsing\n artifacts from pub/sub messages via a Jinja template, the comparison will be done after\n the pub/sub -> Spinnaker artifact translation.\n </p>\n <p>For example, if you want to match against any GCS object, only supply <b>type</b> = gcs/object. If you also want to restrict the matches by other fields, include those as well.</p>\n <p>Regex is accepted, so you could for example match on a filepath like so <b>name</b> = .*\\.yaml to match all incoming YAML files.</p>\n <p>See the <a href="https://www.spinnaker.io/reference/artifacts/in-pipelines/#expected-artifacts">reference</a> for more information.</p>',"pipeline.config.expectedArtifact.ifMissing":"\n <p>If no artifact was supplied by your trigger to match against this expected artifact, you have a few options:\n <ol>\n <li>Attempt to match against an artifact in the prior pipeline execution's context. This ensures that you will always be using the most recently supplied artifact to this pipeline, and is generally a safe choice.</li>\n <li>If option 1 fails, or isn't specified, you can provide a default artifact with the required fields to use instead.</li>\n <li>Fail the pipeline if options 1 or 2 fail or aren't selected.</li>\n </ol>\n </p>\n <p>See the <a href=\"https://www.spinnaker.io/reference/artifacts/in-pipelines\">reference</a> for more information.</p>","pipeline.config.expectedArtifact.usePriorExecution":"\n <p>Attempt to match against an artifact in the prior pipeline execution's context. This ensures that you will always be using the most recently supplied artifact to this pipeline, and is generally a safe choice.</p>","pipeline.config.expectedArtifact.defaultArtifact":"\n <p>If your artifact either wasn't supplied from a trigger, or it wasn't found in a prior execution, the artifact specified below will end up in your pipeline's execution context.</p>\n <p>See the <a href=\"https://www.spinnaker.io/reference/artifacts/in-pipelines\">reference</a> for more information.</p>","pipeline.config.expectedArtifact.gcs.name":"\n <p>The GCS object name, in the form <code>gs://bucket/path/to/file.yml</code>.</p>","pipeline.config.expectedArtifact.defaultGcs.reference":"\n <p>The GCS object name, <i>optionally</i> appending the version. An example: <code>gs://bucket/file.yml#123948581</code></p>","pipeline.config.expectedArtifact.s3.name":"\n <p>The S3 object name, in the form <code>s3://bucket/path/to/file.yml</code>.</p>","pipeline.config.expectedArtifact.defaultS3.reference":"\n <p>The S3 object name, <i>optionally</i> appending the version. An example: <code>s3://bucket/file.yml#123948581</code></p>","pipeline.config.expectedArtifact.oracle.name":"\n <p>The Oracle object artifact name, in the form <code>oci://bucket/path/file.yml</code>.</p>","pipeline.config.expectedArtifact.defaultOracle.reference":"\n <p>The Oracle object artifact name, <i>optionally</i> appending the version. An example: <code>oci://bucket/file.yml#9ce463aa-d843-4438-b206-5365cd643e2e</code></p>","pipeline.config.expectedArtifact.docker.name":"\n <p>The Docker image name you want to trigger on changes to. By default, this does <i>not</i> include the image tag or digest, only the registry and image repository.</p>","pipeline.config.expectedArtifact.defaultDocker.reference":"\n <p>The fully-qualified docker image to deploy. An example: <code>gcr.io/project/image@sha256:59bb771c86</code></p>","pipeline.config.expectedArtifact.git.name":"\n <p>The file's path from the git root, in the form 'path/to/file.json'</p>","pipeline.config.expectedArtifact.defaultGithub.version":"\n <p>Either the commit or branch to checkout.</p>","pipeline.config.expectedArtifact.defaultGithub.reference":'\n <p>The GitHub API content url the artifact lives under. The domain name may change if you\'re running GHE.</p>\n <p>An example for GitHub.com is <code>https://api.github.com/repos/$ORG/$REPO/contents/$FILEPATH</code>. An example for GitHub Enterprise is <code>https://github.domain.com/api/v3/repos/$ORG/$REPO/contents/$FILEPATH</code>. See <a href="https://www.spinnaker.io/reference/artifacts/types/github-file/#fields">our docs</a> for more info.</p>',"pipeline.config.expectedArtifact.defaultGitlab.version":"\n <p>Either the commit or branch to checkout.</p>","pipeline.config.expectedArtifact.defaultGitlab.reference":'\n <p>The Gitlab API file url the artifact lives under. The domain name may change if you\'re running your own Gitlab server. The repository and path to files must be URL encoded.</p>\n <p>An example is <code>https://gitlab.com/api/v4/projects/$ORG%2F$REPO/repository/files/path%2Fto%2Ffile.yml/raw</code>. See <a href="https://www.spinnaker.io/reference/artifacts/types/gitlab-file/#fields">our docs</a> for more info.</p>',"pipeline.config.expectedArtifact.gitrepo.url":"<p>The location of your Git repository.</p>","pipeline.config.expectedArtifact.gitrepo.branch":"<p>The branch of the repository you want to use.</p>","pipeline.config.expectedArtifact.gitrepo.checkoutSubpath":"<p>Check this if you want to specify a subpath; doing so will reduce the size of the generated artifact.</p>","pipeline.config.expectedArtifact.gitrepo.subpath":"\n <p>The subpath within the Git repository you desire to checkout.</p>\n <p>e.g.: <b>examples/wordpress/mysql/</b></p>","pipeline.config.expectedArtifact.helm.account":"\n <p>The account contains url the charts can be found</p>","pipeline.config.expectedArtifact.helm.name":"\n <p>The name of chart you want to trigger on changes to</p>","pipeline.config.expectedArtifact.helm.version":"\n <p>The version of chart you want to trigger on changes to</p>","pipeline.config.expectedArtifact.defaultBitbucket.reference":'\n <p>The Bitbucket API file url the artifact lives under. The domain name may change if you\'re running your own Bitbucket server. The repository and path to files must be URL encoded.</p>\n <p>An example is <code>https://api.bitbucket.org/1.0/repositories/$ORG/$REPO/raw/$VERSION/$FILEPATH</code>. See <a href="https://www.spinnaker.io/reference/artifacts/types/bitbucket-file/#fields">our docs</a> for more info.</p>',"pipeline.config.expectedArtifact.defaultBitbucket.filepath":"\n <p>The file path within your repo. path/to/file.yml is an example.</p>","pipeline.config.trigger.helm.chart":"The Helm chart name.","pipeline.config.trigger.helm.version":"The Helm chart version, as semver.","pipeline.config.trigger.helm.version.manual":"The Helm chart version, as an exact version.","pipeline.config.trigger.webhook.source":"\n <p>Determines the target URL required to trigger this pipeline, as well as how the payload can be transformed into artifacts.</p>\n ","pipeline.config.trigger.webhook.payloadConstraints":'\n <p>When provided, only a webhook with a payload containing at least the specified key/value pairs will be allowed to trigger this pipeline. For example, if you wanted to lock down the systems/users that can trigger this pipeline via this webhook, you could require the key "secret" and value "something-secret" as a constraint.</p>\n <p>The constraint values may be supplied as regex.</p>\n ',"pipeline.config.trigger.pubsub.attributeConstraints":"\n <p>Pubsub messages can have system-specific metadata accompanying the payload called <b>attributes</b>.</p>\n <p>When provided, only a pubsub message with attributes containing at least the specified key/value pairs will be allowed to trigger this pipeline.</p>\n <p>The constraint value is a java regex string.</p>\n ","pipeline.config.trigger.pubsub.payloadConstraints":'\n <p>\n When provided, only a pubsub message with a payload containing at least the specified\n key/value pairs will be allowed to trigger this pipeline. For example, if you wanted\n to restrict the systems/users that can trigger this pipeline via this pubsub\n subscription, you could require the key "secret" and value "something-secret" as a constraint.\n </p>\n <p>\n The key/value pairs are matched against the unprocessed payload body, prior to any\n transformation using, for example, a Jinja template in a pubsub subscription configuration.\n </p>\n <p>The constraint value is a java regex string.</p>\n ',"pipeline.config.findArtifactFromExecution.considerExecutions":'\n <p>Select the types of executions to consider. When no selection is made, the default is "any execution".</p>\n <p>This will always evaluate to the most recent execution matching your provided criteria.</p>\n ',"pipeline.config.tags":"<p>Pipeline tags let you filter pipelines/executions by addition dimensions in the executions page</p>","loadBalancer.advancedSettings.healthTimeout":"<p>Configures the timeout, in seconds, for reaching the healthCheck target. Must be less than the interval.</p><p> Default: <b>5</b></p>","loadBalancer.advancedSettings.idleTimeout":"<p>Configures the idle timeout, in seconds. If no data has been sent or received by the time that the idle timeout period elapses, the load balancer closes the connection. </p><p> Default: <b>60</b></p>","loadBalancer.advancedSettings.deletionProtection":"<p>To prevent your load balancer from being deleted accidentally, you can enable deletion protection.</p><p> Default: <b>false</b></p>","loadBalancer.advancedSettings.healthInterval":"<p>Configures the interval, in seconds, between ELB health checks. Must be greater than the timeout.</p><p>Default: <b>10</b></p>","loadBalancer.advancedSettings.healthyThreshold":"<p>Configures the number of healthy observations before reinstituting an instance into the ELBβs traffic rotation.</p><p>Default: <b>10</b></p>","loadBalancer.advancedSettings.unhealthyThreshold":"<p>Configures the number of unhealthy observations before deservicing an instance from the ELB.</p><p>Default: <b>2</b></p>","loadBalancer.advancedSettings.loadBalancingCrossZone":"<p>Cross-zone load balancing distributes traffic evenly across all targets in the Availability Zones enabled for the load balancer.</p><p> Default: <b>True</b></p>","loadBalancer.advancedSettings.albIpAddressType":'<p>Assigns both a v4 and v6 IP address to the load balancer. If left unchecked, this value will default to <b>"ipv4"</b>.</p>',"loadBalancer.advancedSettings.nlbIpAddressType":'<p>Assigns both a v4 and v6 IP address to the load balancer. This option is only valid for NLBs which are external and only have Ip targets (not instance targets). If left unchecked, this value will default to <b>"ipv4"</b>.</p>',"pipeline.config.resizeAsg.action":"\n <p>Configures the resize action for the target server group.\n <ul>\n <li><b>Scale Up</b> increases the size of the target server group by an incremental or percentage amount</li>\n <li><b>Scale Down</b> decreases the size of the target server group by an incremental or percentage amount</li>\n <li><b>Scale to Cluster Size</b> increases the size of the target server group to match the largest server group in the cluster, optionally with an incremental or percentage additional capacity. Additional capacity will not exceed the existing maximum size.</li>\n <li><b>Scale to Exact Size</b> adjusts the size of the target server group to match the provided capacity</li>\n </ul></p>","pipeline.config.resizeAsg.cluster":"<p>Configures the cluster upon which this resize operation will act. The <em>target</em> specifies what server group to resolve for the operation.</p>","pipeline.config.modifyScalingProcess.cluster":"<p>Configures the cluster upon which this modify scaling process operation will act. The <em>target</em> specifies what server group to resolve for the operation.</p>","pipeline.config.enableAsg.cluster":"<p>Configures the cluster upon which this enable operation will act. The <em>target</em> specifies what server group to resolve for the operation.</p>","pipeline.config.disableAsg.cluster":"<p>Configures the cluster upon which this disable operation will act. The <em>target</em> specifies what server group to resolve for the operation.</p>","pipeline.config.destroyAsg.cluster":"<p>Configures the cluster upon which this destroy operation will act. The <em>target</em> specifies what server group to resolve for the operation.</p>","pipeline.config.jenkins.trigger.propertyFile":'<p>(Optional) Configures the name to the Jenkins artifact file used to pass in properties to later stages in the Spinnaker pipeline. The contents of this file will now be available as a map under the trigger and accessible via <em>trigger.properties</em>. See <a target="_blank" href="https://www.spinnaker.io/guides/user/pipeline-expressions/">Pipeline Expressions docs</a> for more information.</p>',"pipeline.config.jenkins.trigger.payloadConstraints":'<p>(Optional, Requires Property File) When provided, only a build that contains a Property File with correct constraints will trigger this pipeline. For example, you could restrict the trigger to certain branches by placing the branch name in your Property File and adding a constraint with a key like "branch" and value "master".</p>\n <p>The constraint values may be supplied as regex.</p>',"pipeline.config.jenkins.propertyFile":'<p>(Optional) Configures the name to the Jenkins artifact file used to pass in properties to later stages in the Spinnaker pipeline. The contents of this file will now be available as a map under the stage context. See <a target="_blank" href="https://www.spinnaker.io/guides/user/pipeline-expressions/">Pipeline Expressions docs</a> for more information.</p>',"pipeline.config.travis.job.isFiltered":"<p>Note that for performance reasons, not all jobs are displayed. Please use the search field to limit the number of jobs.</p>","pipeline.config.travis.trigger.propertyFile":'<p>(Optional) Configures the name to the Travis artifact file used to pass in properties to later stages in the Spinnaker pipeline. The contents of this file will now be available as a map under the trigger and accessible via <em>trigger.properties</em>. See <a target="_blank" href="https://www.spinnaker.io/guides/user/pipeline-expressions/">Pipeline Expressions docs</a> for more information.</p>',"pipeline.config.travis.trigger.payloadConstraints":'<p>(Optional, Requires Property File) When provided, only a build that contains a Property File with correct constraints will trigger this pipeline. For example, you could restrict the trigger to certain branches by placing the branch name in your Property File and adding a constraint with a key like "branch" and value "master".</p>\n <p>The constraint values may be supplied as regex.</p>',"pipeline.config.travis.propertyFile":'<p>(Optional) Configures the name to the Travis artifact file used to pass in properties to later stages in the Spinnaker pipeline. The contents of this file will now be available as a map under the stage context. See <a target="_blank" href="https://www.spinnaker.io/guides/user/pipeline-expressions/">Pipeline Expressions docs</a> for more information.</p>',"pipeline.config.bake.skipRegionDetection":"\n <p>By default, Spinnaker will detect regions to bake in from downstream deploy stages.</p>\n <p>To prevent failed deploys from accidentally missed regions during the bake process.</p>\n <p>This setting will disable this detection mechanism.</p>","pipeline.config.bake.package":'\n <p>The name of the package you want installed (without any version identifiers).</p>\n <p>If your build produces a deb file named "myapp_1.27-h343", you would want to enter "myapp" here.</p>\n <p>If there are multiple packages (space separated), then they will be installed in the order they are entered.</p>',"pipeline.config.bake.packageArtifacts":"\n <p>Artifacts representing packages you want installed.</p>\n <p>These artifacts must be either deb or rpm packages, whichever applies to the operating system on your base image.</p>\n <p>Package artifacts are installed in order, after any packages in the 'Packages' field are installed.</p>","pipeline.config.docker.bake.targetImage":"<p>The name of the resulting docker image.</p>","pipeline.config.docker.bake.targetImageTag":"<p>The tag of the resulting docker image, defaults to commit hash if available.</p>","pipeline.config.docker.bake.organization":"<p>The name of the organization or repo to use for the resulting docker image.</p>","pipeline.config.bake.baseAmi":"<p>(Optional) If Base AMI is specified, this will be used instead of the Base OS provided","pipeline.config.bake.amiSuffix":"<p>(Optional) String of date in format YYYYMMDDHHmm, default is calculated from timestamp,</p>","pipeline.config.bake.amiName":"<p>(Optional) Default = $package-$arch-$ami_suffix-$store_type</p>","pipeline.config.bake.templateFileName":"<p>(Optional) The explicit packer template to use, instead of resolving one from rosco's configuration.</p>","pipeline.config.bake.varFileName":"<p>(Optional) The name of a json file containing key/value pairs to add to the packer command.</p>","pipeline.config.bake.extendedAttributes":"<p>(Optional) Any additional attributes that you want to pass onto rosco, which will be injected into your packer runtime variables.</p>","pipeline.config.cf.createservice.updatable":"<p>If checked, this will try to update the existing service. If not, if the service exists this stage will succeed and not try to update.</p>","pipeline.config.cf.createservice.versioned":"<p>If checked, this stage should always deploy a new service with an incremented version number (mysql-v001).</p>","pipeline.config.manualJudgment.instructions":"<p>(Optional) Instructions are shown to the user when making a manual judgment.</p><p>May contain HTML.</p>","pipeline.config.manualJudgment.propagateAuthentication":"\n <p><strong>Checked</strong> - the pipeline will continue with the permissions of the approver.</p>\n <p><strong>Unchecked</strong> - the pipeline will continue with its current permissions.</p>","pipeline.config.manualJudgment.judgmentInputs":'\n <p>(Optional) Entries populate a dropdown displayed when performing a manual judgment.</p>\n <p>The selected value can be used in a subsequent <strong>Check Preconditions</strong> stage to determine branching.</p>\n <p>For example, if the user selects "rollback" from this list of options, that branch can be activated by using the expression:\n <samp class="small">execution.stages[n].context.judgmentInput=="rollback"</samp></p>',"pipeline.config.bake.manifest.expectedArtifact":"<p>This is the template you want to render.</p>","pipeline.config.bake.manifest.overrideExpressionEvaluation":'<p>Explicitly evaluate SpEL expressions in overrides just prior to manifest baking. Can be paired with the "Skip SpEL evaluation" option in the Deploy Manifest stage when baking a third-party manifest artifact with expressions not meant for Spinnaker to evaluate as SpEL.</p>',"pipeline.config.bake.manifest.templateRenderer":"<p>This is the engine used for rendering your manifest.</p>","pipeline.config.bake.manifest.helm.chartFilePath":"\n <p>This is the relative path to the Chart.yaml file within your Git repo.</p>\n <p>e.g.: <b>helm/my-chart/Chart.yaml</b></p>","pipeline.config.bake.manifest.helm.rawOverrides":"Use <i>--set</i> instead of <i>--set-string</i> when injecting override values. Values injected using <i>--set</i> will be converted to primitive types by Helm.","pipeline.config.bake.manifest.kustomize.filePath":"\n <p>This is the relative path to the kustomization.yaml file within your Git repo.</p>\n <p>e.g.: <b>examples/wordpress/mysql/kustomization.yaml</b></p>","pipeline.config.bake.cf.manifest.name":"<p> Name should be the same as the expected artifact in the Produces Artifact section. </p>","pipeline.config.bake.cf.manifest.templateArtifact":"\n <p> This is the manifest template needing resolution. Variables in this template should use double parentheses notation.</p>\n <p>e.g.: </p>\n <p>---</p>\n <p>buildpack: ((javabuildpack)) </p>\n <p>foo: ((some.nestedKey)) </p>","pipeline.config.bake.cf.manifest.varsArtifact":'\n <p> These are the variables that will be substituted in the manifest template. These should be yaml files and follow standard convention. </p>\n <p>e.g.: </p>\n <p>---</p>\n <p>javabuildpack: java_buildpack_offline </p>\n <p>some: </p>\n <p style="padding-left: 1em">nestedKey: bar </p>',"pipeline.config.haltPipelineOnFailure":"Immediately halts execution of all running stages and fails the entire execution.","pipeline.config.haltBranchOnFailure":"Prevents any stages that depend on this stage from running, but allows other branches of the pipeline to run.","pipeline.config.haltBranchOnFailureFailPipeline":"Prevents any stages that depend on this stage from running, but allows other branches of the pipeline to run. The pipeline will be marked as failed once complete.","pipeline.config.ignoreFailure":"Continues execution of downstream stages, marking this stage as failed/continuing.","pipeline.config.jenkins.markUnstableAsSuccessful.true":"If Jenkins reports the build status as UNSTABLE, Spinnaker will mark the stage as SUCCEEDED and continue execution of the pipeline.","pipeline.config.jenkins.markUnstableAsSuccessful.false":"\n If Jenkins reports the build status as UNSTABLE,\n Spinnaker will mark the stage as FAILED; subsequent execution will be determined based on the configuration of the\n <b>If build fails</b> option for this stage.","pipeline.config.travis.markUnstableAsSuccessful.true":"If Travis reports the build status as UNSTABLE, Spinnaker will mark the stage as SUCCEEDED and continue execution of the pipeline.","pipeline.config.travis.markUnstableAsSuccessful.false":"\n If Travis reports the build status as UNSTABLE,\n Spinnaker will mark the stage as TERMINAL; subsequent execution will be determined based on the configuration of the\n <b>If build fails</b> option for this stage.","pipeline.config.wercker.markUnstableAsSuccessful.true":"If Wercker reports the build status as UNSTABLE, Spinnaker will mark the stage as SUCCEEDED and continue execution of the pipeline.","pipeline.config.wercker.markUnstableAsSuccessful.false":"\n If Wercker reports the build status as UNSTABLE,\n Spinnaker will mark the stage as FAILED; subsequent execution will be determined based on the configuration of the\n <b>If build fails</b> option for this stage.","pipeline.config.cron.expression":'<strong>Format (Year is optional)</strong><p><samp>Seconds Minutes Hour DayOfMonth Month DayOfWeek (Year)</samp></p><p><strong>Example: every 30 minutes</strong></p><samp>0 0/30 * * * ?</samp><p><strong>Example: every Monday at 10 am</strong></p><samp>0 0 10 ? * 2</samp><p><strong>Note:</strong> values for "DayOfWeek" are 1-7, where Sunday is 1, Monday is 2, etc. You can also use MON,TUE,WED, etc.',"cluster.rollback.explicit":"\n <p>A server group running the previous build will be enabled and appropriately resized.</p>\n <p>The current server group will be disabled after the resize completes.</p>\n ","cluster.rollback.previous_image":"\n <p>The current server group will be cloned with the previous build.</p>\n ","pipeline.config.findAmi.cluster":"The cluster to look at when selecting the image to use in this pipeline.","pipeline.config.findAmi.imageNamePattern":"A regex used to match the name of the image. Must result in exactly one match to succeed. Empty is treated as match any.","pipeline.config.dependsOn":"Declares which stages must be run <em>before</em> this stage begins.","pipeline.config.parallel.cancel.queue":"<p>If concurrent pipeline execution is disabled, then the pipelines that are in the waiting queue will get canceled when the next execution starts. <br><br>Check this box if you want to keep them in the queue.</p>","pipeline.config.parallel.max.concurrent":"<p>If concurrent pipeline execution is enabled, this variable sets the maximum number of concurrent pipelines executing. <br><br>If set to 0, then max is unlimited.</p>","pipeline.config.timeout":"\n <p>Allows you to force the stage to fail if its running time exceeds a specific length.</p>\n <p><b>Note:</b> By default, Spinnaker will use sensible timeouts that depend on the stage type and the operations the stage needs to perform at runtime. These defaults can vary based on chosen configuration and other external factors.\n </p>","pipeline.config.trigger.runAsUser":"The current user must have access to the specified service account, and the service account must have access to the current application. Otherwise, you'll receive an 'Access is denied' error.","pipeline.config.trigger.authorizedUser":"The current user must have the permission to approve the manual judgment stage. Otherwise, you'll not be able continue to the next pipeline stage.","pipeline.config.script.repoUrl":"<p>Path to the repo hosting the scripts in Stash. (e.g. <samp>CDL/mimir-scripts</samp>). Leave empty to use the default.</p>","pipeline.config.script.repoBranch":"<p>Git Branch. (e.g. <samp>master</samp>). Leave empty to use the master branch.</p>","pipeline.config.script.path":"<p>Path to the folder hosting the scripts in Stash. (e.g. <samp>groovy</samp>, <samp>python</samp> or <samp>shell</samp>)</p>","pipeline.config.script.command":"<p>Executable script and parameters. (e.g. <samp>script.py --ami-id ${deploymentDetails[0].ami}</samp> ) </p>","pipeline.config.script.image":"<p>(Optional) image passed down to script execution as IMAGE_ID</p>","pipeline.config.script.account":"<p>(Optional) account passed down to script execution as ENV_PARAM</p>","pipeline.config.script.region":"<p>(Optional) region passed down to script execution as REGION_PARAM</p>","pipeline.config.script.cluster":"<p>(Optional) cluster passed down to script execution as CLUSTER_PARAM</p>","pipeline.config.script.cmc":"<p>(Optional) cmc passed down to script execution as CMC</p>","pipeline.config.script.propertyFile":"<p>(Optional) The name to the properties file produced by the script execution to be used by later stages of the Spinnaker pipeline. </p>","pipeline.config.docker.trigger.tag":"<p>(Optional) If specified, only the tags that match this Java Regular Expression will be triggered. Leave empty to trigger builds on any tag pushed.</p><p>Builds will not be triggered off the latest tag or updates to existing tags.</p>","pipeline.config.docker.trigger.digest":"<p>The SHA256 hash of the image.</p>","pipeline.config.git.trigger.branch":"<p>(Optional) If specified, only pushes to the branches that match this Java Regular Expression will be triggered. Leave empty to trigger builds for every branch.</p>","pipeline.config.git.trigger.githubSecret":'<p>(Optional, but recommended) If specified, verifies GitHub as the sender of this trigger. See <a target="_blank" href="https://developer.github.com/webhooks/securing/">GitHub docs</a> for more information.</p>',"serverGroup.ipv6":"<p>Associating an IPv6 address to nodes allows for ingress and egress communication over IPv6. Most modern software supports IPv6 and enablement is transparent. This is an incremental addition to IPv4 and will not remove the ability for connectivity over IPv4.</p>","serverGroupCapacity.useSourceCapacityTrue":"\n <p>Spinnaker will use the current capacity of the existing server group when deploying a new server group.</p>\n <p>This setting is intended to support a server group with auto-scaling enabled, where the bounds and desired capacity are controlled by an external process.</p>\n <p>In the event that there is no existing server group, the deploy will fail.</p>","serverGroupCapacity.useSourceCapacityFalse":"<p>The specified capacity is used regardless of the presence or size of an existing server group.</p>","strategy.redblack.scaleDown":"\n <p>Resizes the target server group to zero instances before disabling it.</p>\n <p>Select this if you wish to retain the launch configuration for the old server group without running any instances.</p>","strategy.redblack.maxRemainingAsgs":'\n <p><b>Optional</b>: indicates the maximum number of server groups that will remain in this cluster - including the newly created one.</p>\n <p>If you wish to destroy all server groups except the newly created one, select "Highlander" as the strategy.</p>\n <p><strong>Minimum value:</strong> 2</p>',"strategy.redblack.rollback":"\n <p>Disable the new server group and ensure that the previous server group is restored to its original capacity.</p>\n <p>The rollback <strong>will only be</strong> initiated if instances in the new server group fail to launch and become healthy.</p>\n <p>Should an error occur disabling or destroying other server groups in the cluster, the new server group <strong>will not be</strong> rolled back.</p>\n ","strategy.rollingPush.relaunchAll":"<p>Incrementally terminates each instance in the server group, waiting for a new one to come up before terminating the next one.</p>","strategy.rollingPush.totalRelaunches":"<p>Total number of instances to terminate and relaunch.</p>","strategy.rollingPush.concurrentRelaunches":"<p>Number of instances to terminate and relaunch at a time.</p>","strategy.rollingPush.concurrentRelaunches.migration":"\n <p>Number of instances to terminate and relaunch at a time.</p>\n <p>Can be expressed as an explicit instance count or as a percentage of instances in server group being migrated.</p>\n ","strategy.rollingPush.order":"\n <p>Determines the order in which instances will be terminated.\n <ul><li><b>Oldest</b> will terminate the oldest instances first</li>\n <li><b>Newest</b> will terminate those most recently launched.</li></ul></p>","strategy.rollingRedBlack.targetPercentages":"<p>Rolling red black will slowly scale up the new server group. It will resize the new server group by each percentage defined.</p>","strategy.rollingRedBlack.rollback":"<p>Disable the new server group and ensure that the previous server group is restored to its original capacity.</p>","strategy.monitored.deploySteps":"<p>Monitored Deploy will scale up the new server group as specified by these per cent steps. After each step, the health of the new server group will be evaluated by the specified deployment monitor.</p>","strategy.monitored.rollback":"<p>If deploy fails, disable the new server group and ensure that the previous server group is active and restored to its original capacity.</p>","strategy.monitored.destroyFailedAsg":"<p>If deploy fails and rollback succeeds destroys the server group that failed the deploy instead of just disabling it.</p>","loadBalancers.filter.serverGroups":"\n <p>Displays all server groups configured to use the load balancer.</p>\n <p>If the server group is configured to <em>not</em> add new instances to the load balancer, it will be grayed out.</p>","loadBalancers.filter.instances":"\n <p>Displays all instances in the context of their parent server group. The color of the instance icon\n indicates <em>only its health in relation to the load balancer</em>. That is, if the load balancer health check reports the instance\n as healthy, the instance will appear green - even if other health indicators (Discovery, other load balancers, etc.) report the instance\n as unhealthy.</p>\n <p>A red icon indicates the instance is failing the health check for the load balancer.</p>\n <p>A gray icon indicates the instance is currently detached from the load balancer.</p>","loadBalancers.filter.onlyUnhealthy":"\n <p>Filters the list of load balancers and server groups (if enabled)\n to only show load balancers with instances failing the health check for the load balancer.</p>","project.cluster.stack":"<p>(Optional field)</p><p>Filters displayed clusters by stack.</p><p>Enter <samp>*</samp> to include all stacks; leave blank to omit any clusters with a stack.</p><p>Only <samp>*</samp> is valid for Kubernetes V2 accounts.</p>","project.cluster.detail":"<p>(Optional field)</p><p>Filters displayed clusters by detail.</p><p>Enter <samp>*</samp> to include all details; leave blank to omit any clusters with a detail.</p><p>Only <samp>*</samp> is valid for Kubernetes V2 accounts.</p>","instanceType.storageOverridden":"<p>These storage settings have been cloned from the base server group and differ from the default settings for this instance type.</p>","instanceType.unavailable":"<p>This instance type is not available for the selected configuration.</p>","execution.forceRebake":"\n <p>By default, the bakery will <b>not</b> create a new image if the contents of the package and base image have not changed.\n Instead, it will return the previously baked image, though this behavior is not guaranteed.</p>\n <p>Select this option to force the bakery to create a new image, regardless of whether or not a matching image exists.</p>","execution.dryRun":"\n <p>Select this option to run the pipeline without <em>really</em> executing anything.</p>\n <p>This is a good way to test parameter-driven behavior, expressions, optional stages, etc.</p>","user.verification":'\n Typing into this verification field is annoying! But it serves as a reminder that you are\n changing something in an account deemed important, and prevents you from accidentally changing something\n when you meant to click on the "Cancel" button.',"pipeline.waitForCompletion":"if unchecked, marks the stage as successful right away without waiting for the pipeline to complete","jenkins.waitForCompletion":"if unchecked, marks the stage as successful right away without waiting for the Jenkins job to complete","travis.waitForCompletion":"if unchecked, marks the stage as successful right away without waiting for the Travis job to complete","wercker.waitForCompletion":"if unchecked, marks the stage as successful right away without waiting for the Wercker job to complete","script.waitForCompletion":"if unchecked, marks the stage as successful right away without waiting for the script to complete","markdown.examples":"\n Some examples of markdown syntax: <br/> `*italic*` <br/> `**bold**` <br/> `[link text](http://url-goes-here)`\n ","pipeline.config.webhook.payload":"JSON payload to be added to the webhook call.","pipeline.config.webhook.cancelPayload":"JSON payload to be added to the webhook call when it is called in response to a cancellation.","pipeline.config.webhook.waitForCompletion":"If not checked, we consider the stage succeeded if the webhook returns an HTTP status code 2xx, otherwise it will be failed. If checked, it will poll a status url (defined below) to determine the progress of the stage.","pipeline.config.webhook.statusUrlResolutionIsGetMethod":"Use the webhook's URL with GET method as status endpoint.","pipeline.config.webhook.statusUrlResolutionIsLocationHeader":"Pick the status url from the Location header of the webhook's response call.","pipeline.config.webhook.statusUrlResolutionIsWebhookResponse":"Pick the status url from the JSON returned by the webhook's response call.","pipeline.config.webhook.statusUrlJsonPath":"JSON path to the status url in the webhook's response JSON. (i.e. <samp>$.buildInfo.url</samp>)","pipeline.config.webhook.retryStatusCodes":"Normally, webhook stages only retry on 429 and 5xx status codes. <br>You can specify additional status codes here that will cause the monitor to retry (e.g. <samp>404, 418</samp>)","pipeline.config.webhook.waitBeforeMonitor":"Optional delay (in seconds) to wait before starting to poll the endpoint for monitoring status","pipeline.config.webhook.statusJsonPath":"JSON path to the status information in the webhook's response JSON (e.g. <samp>$.buildInfo.status</samp>). <br>If left empty, a 200 response from the status endpoint will be treated as a success.","pipeline.config.webhook.progressJsonPath":"JSON path to a descriptive message about the progress in the webhook's response JSON. (e.g. <samp>$.buildInfo.progress</samp>)","pipeline.config.webhook.successStatuses":"Comma-separated list of strings (that will be returned in the response body in the previously defined `statusJsonPath` field) that will be considered as SUCCESS status.","pipeline.config.webhook.canceledStatuses":"Comma-separated list of strings (that will be returned in the response body in the previously defined `statusJsonPath` field) that will be considered as CANCELED status.","pipeline.config.webhook.terminalStatuses":"Comma-separated list of strings (that will be returned in the response body in the previously defined `statusJsonPath` field) that will be considered as TERMINAL status.","pipeline.config.webhook.customHeaders":"Key-value pairs to be sent as additional headers to the service.","pipeline.config.webhook.failFastCodes":"Comma-separated HTTP status codes (4xx or 5xx) that will cause this webhook stage to fail without retrying.","pipeline.config.webhook.signalCancellation":"Trigger a specific webhook if this stage is cancelled by user or due to pipeline failure","pipeline.config.parameter.label":"(Optional): a label to display when users are triggering the pipeline manually","pipeline.config.parameter.description":"(Optional): if supplied, will be displayed to users as a tooltip\n when triggering the pipeline manually. You can include HTML in this field.","pipeline.config.parameter.pinned":"(Optional): if checked, this parameter will be always shown in a pipeline execution view, otherwise it'll be collapsed by default.","pipeline.config.parameter.pinAll":"(Optional): if checked, all parameters will be shown in a pipeline execution view.","pipeline.config.failOnFailedExpressions":"When this option is enabled, the stage will be marked as failed if it contains any failed expressions","pipeline.config.roles.help":"\n <p> When the pipeline is triggered using an automated trigger, these roles will be used to decide if the pipeline has permissions to access a protected application or account.</p>\n <ul>\n <li>\n To read from a protected application or account, the pipeline must have at least one role that has read access to the application or account.\n </li>\n <li>\n To write to a protected application or account, the pipeline must have at least one role that has write access to the application or account.\n </li>\n </ul>\n <p><strong>Note:</strong> To prevent privilege escalation vulnerabilities, a user must be a member of <strong>all</strong> of the groups specified here in order to modify, and execute the pipeline.</p>","pipeline.config.entitytags.namespace":"All tags have an associated namespace (<strong>default</strong> will be used if unspecified) that provides a means of grouping tags by a logical owner.","pipeline.config.entitytags.value":"Value can either be a string or an object. If you want to use an object, input a valid JSON string.","pipeline.config.entitytags.region":"(Optional) Target a specific region, use * if you want to apply to all regions.","pipeline.config.deliveryConfig.manifest":`(Optional) Name of the file with your Delivery Config manifest. Leave blank to use the default name (<strong><i>${null==(lo=di.managedDelivery)?void 0:lo.defaultManifest}</i></strong>).`,"pipeline.config.codebuild.source":"(Optional) Source of the build. It will be overridden to Spinnaker artifact if checked. If not checked, source configured in CodeBuild project will be used.","pipeline.config.codebuild.sourceType":"(Optional) Type of the source. It can be specified explicitly; otherwise, it will be inferred from source artifact.","pipeline.config.codebuild.sourceVersion":'(Optional) Source version of the build. If not specified, the artifact version will be used. If artifact doesn\'t have a version, the latest version will be used. See the <a href="https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StartBuild.html#CodeBuild-StartBuild-request-sourceVersion">CodeBuild reference</a> for more information.',"pipeline.config.codebuild.buildspec":"(Optional) Inline buildspec definition of the build. If not specified, buildspec configured in CodeBuild project will be used.","pipeline.config.codebuild.secondarySources":"(Optional) Secondary sources of the build. It can be overridden by adding Spinnaker Artifacts. If not specified, secondary sources configured in CodeBuild project will be used.","pipeline.config.codebuild.secondarySourcesVersionOverride":"(Optional) Existing secondary sources version overrides. Pre-defined secondary source's version can be overriden by specifying the source identifier and version. If not specified, secondary sources configured in CodeBuild project will be used.","pipeline.config.codebuild.sourceIdentifier":"(Optional) Name of a pre-defined secondary source.","pipeline.config.codebuild.secondarySourceVersion":"Version of secondary source identifier to use. Required if specifying a source identifier.","pipeline.config.codebuild.image":"(Optional) Image in which the build will run. It can be overridden by specifying the name of the image. If not specified, image configured in CodeBuild project will be used.","pipeline.config.codebuild.envVar":"(Optional) Environment variables that will be propagated into the build."};Object.keys(co).forEach((e=>Ks.register(e,co[e])));function po(e){const{label:t,help:n,input:a,actions:i,validation:r={}}=e,{hidden:s,messageNode:o,category:l}=r,c=!!t||!!n;return ot.createElement(Vs.Provider,{value:false},ot.createElement("div",{className:"sp-formItem"},ot.createElement("div",{className:"sp-formItem__left"},c&&ot.createElement("div",{className:"sp-formLabel"},t," ",n)),ot.createElement("div",{className:"sp-formItem__right"},ot.createElement("div",{className:"sp-form"},ot.createElement("span",{className:"flex-container-h margin-between-lg field"},ot.createElement("span",{className:"input"},a),i)),false,!s&&ot.createElement(Ir,{message:o,type:l}))))}function uo(e,t){if(P(e)){return e(t)}return e}oi(".sp-formSection {\n border: 1px solid var(--color-concrete);\n border-radius: 16px;\n max-width: 800px;\n overflow: hidden;\n margin-bottom: 16px;\n box-shadow: 0 4px 0 0 var(--color-concrete);\n background-color: var(--color-white);\n padding-bottom: 8px;\n}\n.sp-formSection__header {\n font-size: 18px;\n font-weight: 600;\n border-bottom: 1px solid var(--color-concrete);\n display: flex;\n align-items: center;\n width: 100%;\n background-color: rgba(0, 0, 0, 0.06);\n padding: 8px 16px;\n margin-bottom: 8px;\n}\n.sp-formSection__header .title {\n flex: 1 1 auto;\n min-height: 48px;\n}\n.sp-formGroup {\n border: 1px solid var(--color-titanium);\n border-radius: 8px;\n box-shadow: 0 2px 0 0 var(--color-titanium);\n max-width: 800px;\n margin-bottom: 16px;\n overflow: visible;\n}\n.sp-formItem {\n font-size: 14px;\n padding: 0 0 8px 16px;\n max-width: 800px;\n}\n@media only screen and (min-width: 640px) {\n .sp-formItem {\n display: flex;\n }\n}\n.sp-formItem .help-contents {\n font-style: italic;\n}\n.groupHeader {\n background-color: rgba(0, 0, 0, 0.025);\n border-bottom: 1px dotted var(--color-concrete);\n padding-bottom: 0;\n margin-bottom: 7px;\n padding-top: 8px;\n}\n.sp-formItem__left {\n display: flex;\n}\n@media only screen and (min-width: 640px) {\n .sp-formItem__left {\n flex: 0 0 32%;\n }\n}\n@media only screen and (min-width: 640px) {\n .sp-formItem__right {\n flex: 0 0 68%;\n padding: 0 14px;\n }\n}\n.sp-formLabel {\n align-self: flex-end;\n margin-left: 8px;\n margin-bottom: 4px;\n flex: 1 1 100%;\n font-size: 13px;\n font-weight: 700;\n}\n@media only screen and (min-width: 640px) {\n .sp-formLabel {\n align-self: flex-start;\n text-align: right;\n margin: 6px 0 8px 0;\n }\n}\n.sp-formLabel .optional {\n font-weight: 600;\n font-style: italic;\n font-size: 12px;\n}\n.sp-formActions {\n white-space: nowrap;\n}\n.sp-formActions .action {\n display: inline-block;\n width: 32px;\n height: 32px;\n padding: 3px 4px;\n border: 1px solid var(--color-concrete);\n cursor: pointer;\n border-radius: 2px;\n margin-left: 4px;\n}\n@media only screen and (min-width: 640px) {\n .sp-formActions .action {\n margin-left: 2px;\n }\n}\n.sp-formActions .action [class^='icon-'],\n.sp-formActions .action [class*=' icon-'] {\n font-size: 24px;\n}\n.sp-formActions--mobile {\n flex: 1 0 1px;\n margin-bottom: 8px;\n align-self: flex-end;\n}\n@media only screen and (min-width: 640px) {\n .sp-formActions--mobile {\n display: none;\n }\n}\n.sp-formActions--web {\n display: none;\n}\n@media only screen and (min-width: 640px) {\n .sp-formActions--web {\n display: block;\n }\n}\n.sp-form {\n display: flex;\n width: 100%;\n margin-bottom: 8px;\n}\n.sp-form .prefix,\n.sp-form .suffix {\n flex: 0 1 auto;\n margin: 8px 4px 8px 0;\n align-self: center;\n word-break: break-all;\n}\n.sp-form .suffix {\n margin-left: 4px;\n margin-right: 6px;\n}\n.sp-form .field {\n flex: 1 1 auto;\n min-width: 100px;\n}\n.sp-form .field .input {\n flex-grow: 1;\n}\n.sp-form .Select-input input {\n border: none !important;\n padding: 8px 0 12px;\n}\n.sp-form .is-open .Select-value-label {\n opacity: 0.6;\n}\n.sp-form input[type='text'] {\n border: 1px solid var(--color-concrete);\n border-radius: 2px;\n width: 100%;\n height: 32px;\n padding: 0 8px;\n background-color: transparent;\n font-size: 14px;\n}\n.sp-form input[type='checkbox'] {\n background-color: var(--color-danger);\n}\n");class mo extends ot.Component{constructor(){super(...arguments),this.state={showContextModal:!1}}render(){const{spelError:e}=this.props;if(!e||!e.message)return null;const t=()=>this.setState((e=>({showContextModal:!e.showContextModal})));return ot.createElement("div",null,ot.createElement(qt,{show:this.state.showContextModal,onHide:t},ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,e.message)),ot.createElement(qt.Body,null,ot.createElement("pre",null,e.context)),ot.createElement(qt.Footer,null,ot.createElement("button",{className:"primary passive",type:"button",onClick:t},"Close"))),ot.createElement(Ir,{type:"error",message:e.message}),ot.createElement("button",{className:"link",type:"button",onClick:t},"Show expression context where the error occurred"))}}class go extends ot.Component{render(){const{value:e,validation:t,inputClassName:n,prefix:a,...i}=this.props,r=`TextInput form-control ${gr(n)} ${hr(t)}`,s=ot.createElement("input",{className:r,type:"text",autoComplete:"off",value:gr(e),...i});return a?ot.createElement("div",{className:"flex-container-h middle"},ot.createElement("div",{className:"sp-padding-xs-right body-regular"},a),s):s}}const ho=e=>Xn.compile(`'${e.replace(/'/g,"''")}'`);class fo{constructor(e,t){this.bracket=e,this.pos=t}static theOpenBracketFor(e){return"}"===e?"{":"]"===e?"[":"("}static theCloseBracketFor(e){return"{"===e?"}":"["===e?"]":")"}compatibleWithCloseBracket(e){return"{"===this.bracket?"}"===e:"["===this.bracket?"]"===e:")"===e}}class vo{parseExpressions(e){const t=[],n="${",a="}";let i=0;for(;i<e.length;){const r=e.indexOf(n,i);if(r>=i){r>i&&t.push(ho(e.substring(i,r)));const s=r+n.length,o=this.skipToCorrectEndSuffix(a,e,s);if(-1===o)throw new Error("No ending suffix '}' for expression starting at character "+r+": "+e.substring(r));if(o===s)throw new Error("No expression defined within delimiter '${}' at character "+r);const l=e.substring(r+n.length,o).trim();if(!l)throw new Error("No expression defined within delimiter '${}' at character "+r);t.push(Xn.compile(l)),i=o+a.length}else t.push(ho(e.substring(i))),i=e.length}return t}isSuffixHere(e,t,n){let a=0;for(let i=0;i<n.length&&t<e.length;i++)if(e.charAt(t++)!==n.charAt(a++))return!1;return a===n.length}skipToCorrectEndSuffix(e,t,n){let a=n;const i=t.length;if(-1===t.indexOf(e,n))return-1;const r=[];for(;a<i&&(!this.isSuffixHere(t,a,e)||r.length);){const e=t.charAt(a);switch(e){case"{":case"[":case"(":r.push(new fo(e,a));break;case"}":case"]":case")":{if(!r.length)throw new Error(`Found closing '${e}' at position ${a} without an opening '${fo.theOpenBracketFor(e)}'`);const t=r.pop();if(!t.compatibleWithCloseBracket(e))throw new Error("Found closing '"+e+"' at position "+a+" but most recent opening is '"+t.bracket+"' at position "+t.pos);break}case"'":case'"':{const n=t.indexOf(e,a+1);if(-1===n)throw new Error("Found non terminating string literal starting at position "+a);a=n;break}}a++}if(r.length){const e=r.pop();throw new Error("Missing closing '"+fo.theCloseBracketFor(e.bracket)+"' for '"+e.bracket+"' at position "+e.pos)}return this.isSuffixHere(t,a,e)?a:-1}}function Ao(e){const t=(new vo).parseExpressions(e);return t.forEach((e=>{const t=e._compiledExpression.getValue;e._compiledExpression.getValue=function(){const n=arguments[0];try{return t.apply(e._compiledExpression,arguments)}catch(e){throw e.state=n,e}}})),t}const Eo=(e,t)=>{if(!t)return{value:t,spelError:null,spelPreview:""};try{const n=Ao(t);return{value:t,spelError:null,spelPreview:n.map((t=>t.eval(e))).join("")}}catch(e){const a={message:null,context:null,contextTruncated:null};if(e.name&&e.message)"NullPointerException"===e.name&&e.state&&e.state.activeContext&&(a.context=null===(n=e.state.activeContext.peek())?"null":void 0===n?"undefined":JSON.stringify(n,null,2),a.contextTruncated=R(a.context,{length:200})),a.message=`${e.name}: ${e.message}`;else try{a.message=JSON.stringify(e)}catch(t){a.message=e.toString()}return{value:t,spelError:a,spelPreview:null}}var n};class bo extends ot.Component{componentDidUpdate(e){const{context:t,value:n}=this.props;if(n!==e.value||!E(t,e.context)){const e=Eo(t,n);this.props.onExpressionChange(e)}}render(){return ot.createElement(go,{autoComplete:"off",...this.props})}}bo.defaultProps={context:{},placeholder:""};const yo=({spelPreview:e,markdown:t})=>ot.createElement("div",{className:"flex-container-h baseline margin-between-lg"},ot.createElement("span",{className:"no-grow"},"Preview:")," ",t?ot.createElement(Sr,{message:e}):ot.createElement("span",null,e));class Co{static evaluateExpression(e,t,n){return Si("/pipelines").path(t,n,"evaluateExpression").query({expression:e}).get().then((e=>{const t=e.detail||{},n=t[Object.keys(t)[0]];if(n&&n.length)throw new Error(`${n[0].exceptionType}: ${n[0].description}`);return e.result}))}static parseExpressionString(e){Ao(e)}static includesSpel(e){return C(e)&&e.includes("${")}}const wo=()=>ot.createElement(ot.Fragment,null,"Β ");class xo extends ot.Component{render(){const{value:e,validation:t,inputClassName:n,text:a,wrapperClassName:i,...r}=this.props,s=`${gr(n)} ${hr(t)}`;return ot.createElement("div",{className:Cn("checkbox",i)},ot.createElement("label",null,ot.createElement("input",{className:s,type:"checkbox",checked:!!e,...r}),a||ot.createElement(wo,null)))}}oi(".ChecklistInput ul {\n display: flex;\n flex-flow: column wrap;\n list-style: none;\n padding: 0;\n}\n.ChecklistInput.ChecklistInput_inline ul {\n flex-flow: row wrap;\n}\n.ChecklistInput.ChecklistInput_inline a.btn {\n margin: 8px 0 0 10px;\n}\n.ChecklistInput.ChecklistInput_inline li {\n white-space: nowrap;\n margin-right: 16px;\n}\n.ChecklistInput.ChecklistInput_inline li.last-of-type {\n margin-right: 0;\n}\n");const{useEffect:ko}=ot;function Bo(e){const{inline:t,showSelectAll:n,value:a,validation:i,inputClassName:r,options:s,stringOptions:o,onChange:l}=e;ko((function(){e.onBlur&&e.onBlur(fr({name:e.name,value:a}))}),[]);const c=vr(o)?o.map((e=>({label:e,value:e}))):s||[],p=a||[],d=t=>{l(fr({value:t,name:e.name}))},u=e=>p.includes(e),m=c.every((e=>u(e.value))),g=`${"ChecklistInput "+(t?"ChecklistInput_inline":"")} }${gr(r)} ${hr(i)}`;return ot.createElement("div",{className:g},ot.createElement("ul",{className:"checklist"},c.map((t=>ot.createElement("li",{key:t.label},ot.createElement(xo,{text:t.label,value:t.value,onChange:()=>(t=>{const n=u(t)?p.filter((e=>e!==t)):p.concat(t);l(fr({value:n,name:e.name}))})(t.value),checked:u(t.value)})))),n&&c.length>1&&ot.createElement("li",{key:"select_all_button"},ot.createElement("a",{type:"button",onClick:m?()=>d([]):()=>d(c.map((e=>e.value)))},m?"Deselect All":"Select All"))))}function So(e){const{validation:t,inputClassName:n,classNames:a,onChange:i,onBlur:r,name:s,...o}=e,l=`${gr(n)} ${hr(t)}`;ot.useEffect((()=>r(fr({name:s,value:e.value}))),[]);const c=U({},a,{container:"",overlayWrapper:"",overlay:""});return c.container=`DayPickerInput ${gr(c.container)} ${l}`,ot.createElement(Zn,{...o,classNames:c,onDayChange:t=>{const n=t&&t.toISOString().slice(0,10);e.onChange(fr({name:s,value:n}))}})}oi("/* Kludge while we figure out how to add the form-control ng-invalid classes directly to the nested day-picker input */\n.DayPickerInput.ng-invalid > input {\n border-color: var(--color-danger);\n}\n");oi(".ace-editor div,\n.ace-editor span {\n font-family: monospace !important;\n}\n.ace-editor > div.ace_gutter {\n z-index: 0;\n}\n");class Mo extends ot.Component{constructor(){super(...arguments),this.editorRef=ot.createRef(),this.validate=e=>{const{onValidation:t}=this.props;if(!t)return;e&&e.length||t(null);t(e.map((e=>`Line ${e.row+1}, column ${e.column+1}: ${e.text}`)).join("; "))}}componentDidMount(){if(this.props.autofocus){const{editor:e}=this.editorRef.current;e.focus(),e.navigateFileStart()}}render(){return ot.createElement(_n,{...this.props,ref:this.editorRef,onValidate:this.validate,editorProps:{$blockScrolling:1/0}})}}function No(){const e=ct(!1);return lt((()=>(e.current=!0,()=>{e.current=!1})),[]),e}function Do(e,t,n=[]){const a=No().current,i=ot.useRef(t);i.current=t;const r=ot.useCallback(((e,t)=>i.current(e,t)),[]);ot.useEffect((()=>(e&&e.addValidator&&e.addValidator(r),()=>e&&e.removeValidator&&e.removeValidator(r))),[]),ot.useEffect((()=>{a&&e&&e.revalidate&&e.revalidate()}),n)}Mo.defaultProps={mode:"json",theme:"textmate",style:{width:"100%",border:"1px solid var(--color-concrete)"},fontSize:11,showGutter:!0,showPrintMargin:!0,highlightActiveLine:!0,className:"ace-editor flex-fill",autofocus:!0};oi("input.NumberInput {\n max-width: 200px;\n}\n");const Io=e=>"number"==typeof e;function Fo(e){const{value:t,validation:n,inputClassName:a,...i}=e;Do(n,((t,n)=>{const a=Io(e.min)?kr.minValue(e.min):void 0,i=Io(e.max)?kr.maxValue(e.max):void 0,r=br([a,i]);return r?r(t,n):null}));const r=`NumberInput form-control ${gr(a)} ${hr(n)}`;return ot.createElement("input",{className:r,type:"number",value:gr(t),...i})}const To=e=>{const{inline:t,validation:n,value:a,defaultValue:i,inputClassName:r,options:s,stringOptions:o,...l}=e,c=pt((()=>vr(o)?o.map((e=>({value:e,label:e}))):s),[s]);lt((()=>{u(i)||c.map((e=>e.value)).includes(a)||e.onChange(fr({name:e.name,value:i}))}),[a,i,c]);const p=`RadioButtonInput radio ${gr(r)} ${hr(n)} ${t?"flex-container-h margin-between-md":"flex-container-v margin-between-sm"}`;return ot.createElement("div",{className:p},c.map((e=>ot.createElement(Qo,{key:e.label,value:a,option:e,...l}))))},Qo=({option:e,value:t,...n})=>ot.createElement("label",{className:"clickable"},ot.createElement("input",{type:"radio",...n,value:e.value,checked:e.value===t}),ot.createElement(Sr,{message:e.label,style:e.help&&{display:"inline-block"}}),e.help&&ot.createElement(ot.Fragment,null,e.help));class Po extends ot.Component{render(){const{value:e,validation:t,inputClassName:n,...a}=this.props,i=`TextAreaInput form-control ${gr(n)} ${hr(t)}`;return ot.createElement("textarea",{className:i,autoComplete:"off",value:gr(e),...a})}}const Ro=()=>{const e=ot.useContext(as);return void 0===e&&console.warn("Application context provider is missing"),e},Uo=()=>{const e=ot.useContext(as);if(void 0===e)throw new Error("Application context provider is missing");return e},{useEffect:zo,useRef:Go}=ot,jo=e=>{const t=Go();return zo((()=>{t.current=e})),t.current},{useEffect:Lo,useRef:Oo}=ot,Yo=()=>document.querySelector(".spinnaker-container"),$o=e=>{const t=jo(e);Lo((()=>{const n=Yo();if(n){if(t){const a=t.filter((t=>!e.includes(t)));n.classList.remove(...a)}n.classList.add(...e)}}),[e.sort().join()]);const n=Oo(e);n.current=e,Lo((()=>()=>{const e=Yo();e&&e.classList.remove(...n.current)}),[])},Ho={error:void 0,requestId:0,result:void 0,status:"NONE"};function Vo(e,t){const n=No(),a=!n.current,i=ct(),[r,s]=dt(0),[o,l]=dt(Ho),{result:c,error:p,status:d,requestId:u}=o,m=()=>s((e=>e+1));return lt((()=>{!a&&m()}),t),lt((()=>{const t=e(),a=()=>n.current&&t===i.current;if(!t)return;l({status:"PENDING",error:p,result:c,requestId:r}),i.current=t;t.then((e=>{a()&&l({status:"RESOLVED",result:e,error:void 0,requestId:r})}),(e=>{a()&&l({status:"REJECTED",result:void 0,error:e,requestId:r})}))}),[r]),{result:c,status:d,error:p,refresh:m,requestId:u}}function Jo(e,t,n){const a=pt((()=>t),[]),i=Vo(n.some((e=>u(e)))?()=>null:e,n),r=ct(!1);return"RESOLVED"===i.status&&(r.current=!0),r.current?i:{...i,result:a}}const{useRef:Wo,useCallback:Ko}=ot,qo=e=>{const t=Wo(e);return t.current=e,Ko(((...e)=>t.current&&t.current.apply(null,e)),[])},Xo=(e,t)=>{lt((()=>{if(!e)return;const n=e.subscribe(t);return()=>n.unsubscribe()}),[e])},Zo=(e,t)=>{const[n,a]=dt(t);return Xo(e,a),n},_o=e=>({...Zo(e.status$,e.status$.value),refresh:qo((()=>{e.refresh()}))});function el(e,t){const[n,a]=dt(e),i=e!==n;return lt((()=>{const n=setTimeout((()=>a(e)),t);return()=>clearTimeout(n)}),[e,t]),[n,i]}const{useRef:tl}=ot;function nl(e){const t=tl(e),n=tl(1),a=e===t.current||E(e,t.current);return t.current=e,a||n.current++,n.current}const{useEffect:al}=ot,il=(e,t,n,a)=>{const i=qo(n);al((()=>{if(n)return e.addEventListener(t,i,a),()=>{e.removeEventListener(t,i,a)}}),[e,t,!!n,Object.values(a||{}).sort().join()])};function rl(e){il(document.body,"keyup",(t=>"Escape"===t.key&&e()))}const sl=()=>{const[,e]=dt(!0);return ut((()=>{e((e=>!e))}),[])};function ol(e,t){const n=qo(e);lt((()=>{const a=!!e&&t&&setInterval(n,t);return()=>a&&clearInterval(a)}),[!!e,t])}const{useState:ll}=st,cl=()=>{const[e,t]=ll(window.innerWidth<=1024);return il(window,"resize",(()=>{const n=window.innerWidth<=1024;n!==e&&t(n)})),e};function pl(e,t,n,a){const i=Jo(e,t,a),r=qo(i.refresh);return lt((()=>{const{subscribe:e,unsubscribe:t}=eo.createScheduler(n);return e(r),t}),a),i}function dl(e){const{previewStage:t,...n}=e,[a,i]=el(e.value,300),r=!No().current;Do(e.validation,(function(){const{status:e,error:n,result:a}=s;if("NONE"===e)return null;if("PENDING"===e||i)return Ur(a?"Updating preview...\n\n\n```\n"+JSON.stringify(a,null,2)+"\n```":"Updating preview...");if("RESOLVED"===e){const e=`Preview - based on previous execution: ${t.executionLabel}\n\n\n\`\`\`\n`+JSON.stringify(a,null,2)+"\n```";return jr(e)}return"REJECTED"===e?Or(n):null}));const s=Jo((()=>Co.evaluateExpression(a,t.executionId,t.stageId)),null,[a,t.executionId,t.stageId]);return ot.useEffect((()=>{!r&&e.validation&&e.validation.revalidate&&e.validation.revalidate()}),[s.status,i]),ot.createElement(ul,{...n})}function ul(e){const t=!!/\n/.exec(e.value);return ot.createElement(Po,{inputClassName:"SpelInput",rows:t?3:1,placeholder:e.placeholder||"Variable value, e.g. ${trigger.buildInfo.number}",...e})}oi(".SpelInput {\n font-family: monospace;\n}\n");const ml=st.createContext(!1),{Provider:gl}=ml;var hl,fl;function vl(e){return st.createElement(Ps,{value:e.inputMode===hl.FREEFORM?"Return to default input":"Enter SpEL in freeform input"},st.createElement("button",{className:Cn("btn btn-sm btn-default",{active:e.inputMode===hl.FREEFORM}),onClick:e.onClick},st.createElement("span",{className:"fa icon-spel"})))}(fl=hl||(hl={})).DEFAULT="DEFAULT",fl.FREEFORM="FREEFORM";const{useCallback:Al,useContext:El,useState:bl}=ot,yl=new Map;function Cl(e,t,n){let a=0;const i=z(t);for(;e&&a<i.length;)e="string"==typeof e?void 0:e[i[a++]];return void 0===e?n:e}function wl(e){const{formik:t}=e,{name:n,onChange:a,fastField:i}=e,{input:r,layout:s,label:o,help:l,required:c,actions:p,validate:d,validationMessage:u,touched:m}=e,g=El(Ys),h=El(ml),f=Cl(t.touched,n),v=Cl(t.errors,e.name),A=$i(i,!1),E=$i(m,f),b=$i(u,v),{hidden:y,category:C,messageNode:w}=Vr(b,E),[x,k]=bl([]),B=Al((e=>k((t=>t.concat(e)))),[]),S=Al((e=>k((t=>t.filter((t=>t!==e))))),[]),M=()=>function(e){yl.has(e)||(yl.set(e,!0),setTimeout((()=>(yl.delete(e),e.validateForm()))))}(t),N=Ls();ot.useEffect((()=>{"FIRST_RENDER"===N.current&&0===x.length||M()}),[x]);const D={touched:E,revalidate:M,addValidator:B,removeValidator:S,hidden:y,category:C,messageNode:w},I=$i(e.spelAware,h,!1),F=ot.useMemo((()=>{const t=Cl(e.formik.values,n,"");return I&&Co.includesSpel(t)?hl.FREEFORM:hl.DEFAULT}),[]),[T,Q]=ot.useState(F),P=()=>{t.setFieldValue(n,null),Q(T===hl.DEFAULT?hl.FREEFORM:hl.DEFAULT)},R=({field:e})=>{const t=T===hl.DEFAULT?r:ul,n=$i(s,(e=>ot.createElement(g,{...e}))),i=uo(t,{...e,validation:D}),d=ot.createElement(ot.Fragment,null,p,I&&ot.createElement(vl,{inputMode:T,onClick:P})),u={label:o,help:l,required:c,actions:d,input:i,validation:D};return ot.createElement(js,{onChange:a,value:e.value},uo(n,u))},U=xl(o,c,[].concat(d).concat(x));return A?ot.createElement(Yn,{name:n,validate:U,render:R}):ot.createElement($n,{name:n,validate:U,render:R})}function xl(e,t,n){const a=[!!t&&kr.isRequired()].concat(n),i=br(a);if(!i)return null;const r=C(e)?e:void 0;return e=>i(e,r)}function kl(e){return ot.createElement(On,null,(t=>ot.createElement(wl,{...e,formik:t})))}const{useState:Bl,useCallback:Sl,useContext:Ml,useMemo:Nl}=ot;function Dl(e){const{input:t,layout:n,label:a,help:i,required:r,actions:s}=e,{value:o}=e,[l,c]=Bl([]),[p,d]=Bl(0),u=Sl((e=>c((t=>t.concat(e)))),[]),m=Sl((e=>c((t=>t.filter((t=>t!==e))))),[]),g=Nl((()=>e.validate),[]),h=Nl((()=>xl(a,r,[].concat(g||qi).concat(l))),[a,r,g,l.length]),f=Ml(Ys),v=$i(t,qi),A=$i(n,(e=>ot.createElement(f,{...e}))),[E,b]=Bl(!1),y=$i(e.touched,E),C=Nl((()=>h(o)),[h,o,p]),w={touched:y,addValidator:u,removeValidator:m,revalidate:()=>d((e=>e+1)),...Vr($i(e.validationMessage,C||void 0),y)},x=uo(v,{...{value:e.value,name:e.name||"",onChange:e.onChange||qi,onBlur:t=>{b(!0),e.onBlur&&e.onBlur(t)}},validation:w}),k={label:a,help:i,required:r,actions:s,validation:w,input:x};return ot.createElement(ot.Fragment,null,uo(A,k))}const Il={value:null,spelError:null,spelPreview:null};function Fl(e){const{context:t,name:n,label:a,help:i,actions:r,validationMessage:s}=e,[o,l]=ot.useState(Il),c=$i(e.markdown,!1),p=Vr(s,!0).messageNode||o.spelError&&t&&ot.createElement(mo,{spelError:o.spelError})||o.spelPreview&&ot.createElement(yo,{spelPreview:o.spelPreview,markdown:c});return ot.createElement(kl,{name:n,input:e=>ot.createElement(bo,{onExpressionChange:e=>l(e),context:t,...e}),label:a,help:i,actions:r,validationMessage:p})}class Tl extends ot.Component{constructor(){super(...arguments),this.state={spelPreview:null,spelError:null}}renderRegexFields(e,t){const{RegexHelp:n,regexName:a,replaceName:i}=e,r=({input:e})=>ot.createElement("div",{style:{flex:"1 1 40%"}}," ",e," ");return ot.createElement(Ds,{heading:({chevron:e})=>ot.createElement("span",null," ",e," Regex ",n," "),outerDivClassName:"",toggleClassName:"",defaultExpanded:t},ot.createElement("div",{className:"flex-container-h baseline"},ot.createElement("code",null,"s/"),ot.createElement(kl,{name:a,validate:e=>{try{return RegExp(e),""}catch(e){return e.message}},layout:e=>ot.createElement(r,{...e}),input:e=>ot.createElement(go,{...e}),touched:!0}),ot.createElement("code",null,"/"),ot.createElement(kl,{name:i,layout:e=>ot.createElement(r,{...e}),input:e=>ot.createElement(go,{...e})}),ot.createElement("code",null,"/g")))}renderPreview(e,t,n,a){const{markdown:i}=e;if(!n)return ot.createElement(yo,{spelPreview:t,markdown:i});try{const e=t.replace(new RegExp(n,"g"),a);return!!e&&ot.createElement(yo,{spelPreview:e,markdown:i})}catch(e){return ot.createElement(yo,{spelPreview:t,markdown:i})}}renderFormField(e,t){const{context:n,placeholder:a,help:i,label:r,actions:s}=this.props;return ot.createElement(kl,{name:this.props.name,input:e=>ot.createElement("div",{className:"flex-container-v flex-grow"},ot.createElement(bo,{onExpressionChange:e=>this.setState(e),context:n,placeholder:a,...e}),this.renderRegexFields(this.props,!!t)),help:i,label:r,actions:s,validationMessage:e,touched:!0})}render(){const{spelPreview:e,spelError:t}=this.state,{regexName:n,replaceName:a}=this.props;return ot.createElement(zs,{render:i=>{const r=Hn(i.values,n),s=Hn(i.values,a),o=Hn(i.errors,n)||Hn(i.errors,a);if(o)return this.renderFormField(zr(o),r);if(t)return this.renderFormField(ot.createElement(mo,{spelError:t}),r);if(e){const t=this.renderPreview(this.props,e,r,s);return this.renderFormField(t,r)}return this.renderFormField(jr(null),r)}})}}function Ql(e,t,n){const a=jo(t),[i,r]=dt({}),[s,o]=dt({});lt((()=>{var l,c;if(a&&t!==a){const p=null!=(l=n[a])?l:[],d=null!=(c=n[t])?c:[],u=p.reduce(((t,n)=>(t[n]=m(e.values,n),t)),{});r({...i,[a]:u});const g=p.reduce(((t,n)=>(t[n]=m(e.touched,n),t)),{});o({...s,[a]:g}),p.forEach((t=>{e.setFieldValue(t,void 0),e.setFieldTouched(t,null)}));const h=i[t]||{},f=s[t]||{};d.forEach((n=>{h.hasOwnProperty(n)&&e.setFieldValue(n,i[t][n]),f.hasOwnProperty(n)&&e.setFieldTouched(n,s[t][n])}))}}),[t])}function Pl(e,t,n){const a=t(e.value),i=st.useCallback((t=>{e.onChange(fr({name:t.target.name,value:n(t.target.value,t)}))}),[e.onChange,n]);return{...e,value:a,onChange:i}}Tl.defaultProps={markdown:!1};class Rl extends ot.Component{render(){const e=this.props.stage.labelComponent;return ot.createElement("div",{className:"label-component"},ot.createElement(e,{stage:this.props.stage}))}}function Ul(e){return ot.createElement(ot.Fragment,null,ot.createElement("dt",null,e.label," ",e.helpFieldId&&ot.createElement(_s,{id:e.helpFieldId})),ot.createElement("dd",null,e.value))}function zl(e){const{children:t,...n}=e;return ot.createElement("dl",{...n},t)}const Gl=({url:e,text:t})=>ot.createElement(ot.Fragment,null,ot.createElement("a",{href:e,target:"_blank"},t),ot.createElement(zi,{text:t,toolTip:"'Copy to clipboard'"}));function jl(e,t){return ot.forwardRef(((n,a)=>ot.createElement(Ll,{category:t},ot.createElement(e,{...n,ref:a}))))}class Ll extends ot.Component{constructor(e){super(e),this.state={error:null,retrying:!1}}static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,t){Ui.log({level:"ERROR",category:`SpinErrorBoundary - ${this.props.category}`,action:e.message,error:e,data:{label:e.message,componentStack:null==t?void 0:t.componentStack}})}retry(){this.setState({retrying:!0}),setTimeout((()=>this.setState({retrying:!1,error:null})),250)}render(){var e;if(!(null==(e=this.state)?void 0:e.error))return this.props.children;const{message:t,stack:n}=this.state.error,{retrying:a}=this.state;return ot.createElement("div",{className:"flex-container-v sp-margin-l"},ot.createElement("h3",null,"Oh dear, something has gone wrong."),ot.createElement("div",{className:"sp-margin-l-bottom"},ot.createElement("h4",null,"Spinnaker has encountered an unexpected UI error."),ot.createElement("button",{disabled:a,onClick:()=>this.retry()},a?"Retrying...":"Try again")),t&&ot.createElement(Ir,{message:t,type:"error"}),n&&ot.createElement(Ds,{defaultExpanded:!1,heading:"Stacktrace"},ot.createElement("pre",{style:{overflow:"scroll"}},n)))}}const Ol="ui.router.react.error.boundary";n(Ol,["ui.router"]).config(["$uiRouterProvider",e=>{e.stateRegistry.decorator("views",((e,t)=>{const n=t(e);return Object.values(n).filter((e=>"react"===e.$type)).forEach((t=>{const n=t,a=n.component;n.component=t=>ot.createElement(Ll,{category:e.name},ot.createElement(a,{...t}))})),n}))}]);const Yl="spinnaker.core.presentation.linkWithClipboard.component";n(Yl,[]).component("linkWithClipboard",yn(jl(Gl,"linkWithClipboard"),["url","text"]));const $l=ot.createContext(null),Hl=({children:e})=>{const t=ot.createRef();return il(document,"keydown",(e=>{var n,a;const{keyCode:i,shiftKey:r,target:s}=e;if(9===i){let i=null;const o=Array.from(null!=(a=null==(n=t.current)?void 0:n.querySelectorAll('\n input:not([tabindex^="-"]):not([disabled]),\n select:not([tabindex^="-"]):not([disabled]),\n textarea:not([tabindex^="-"]):not([disabled]),\n button:not([tabindex^="-"]):not([disabled]),\n a[href]:not([tabindex^="-"]):not([disabled]),\n [tabindex]:not([tabindex^="-"]):not([disabled])\n '))?a:[]).filter((e=>null!==e.offsetParent));if(!o.length)return;const l=o[0],c=o[o.length-1];l===s&&r&&(i=c),c!==s||r||(i=l),o.includes(s)||(i=r?c:l),i&&(i.focus(),e.preventDefault())}})),ot.createElement("div",{ref:t},e)};oi("@-webkit-keyframes backdropEnter {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes backdropEnter {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@-webkit-keyframes backdropLeave {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n@keyframes backdropLeave {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n@-webkit-keyframes dialogEnter {\n from {\n transform: scale3d(0.8, 0.8, 0.8);\n opacity: 0;\n }\n to {\n transform: scale3d(1, 1, 1);\n opacity: 1;\n }\n}\n@keyframes dialogEnter {\n from {\n transform: scale3d(0.8, 0.8, 0.8);\n opacity: 0;\n }\n to {\n transform: scale3d(1, 1, 1);\n opacity: 1;\n }\n}\n@-webkit-keyframes dialogLeave {\n from {\n transform: scale3d(1, 1, 1);\n opacity: 1;\n }\n to {\n transform: scale3d(0.8, 0.8, 0.8);\n opacity: 0;\n }\n}\n@keyframes dialogLeave {\n from {\n transform: scale3d(1, 1, 1);\n opacity: 1;\n }\n to {\n transform: scale3d(0.8, 0.8, 0.8);\n opacity: 0;\n }\n}\n/********************************************************\n Shared set of properties for both the tinted backdrop\n and the full screen container that holds a dialog\n********************************************************/\n/**********************************\n Tinted backdrop (behind dialog)\n***********************************/\n.sp-modal-backdrop {\n display: flex;\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n z-index: var(--layer-critical);\n overflow: hidden;\n overscroll-behavior: none;\n background-color: rgba(0, 0, 0, 0.7);\n will-change: opacity;\n}\n.sp-modal-backdrop.enter {\n -webkit-animation-name: backdropEnter;\n animation-name: backdropEnter;\n -webkit-animation-duration: 300ms;\n animation-duration: 300ms;\n -webkit-animation-timing-function: cubic-bezier(0.4, 0, 0, 1);\n animation-timing-function: cubic-bezier(0.4, 0, 0, 1);\n}\n.sp-modal-backdrop.exit {\n -webkit-animation-name: backdropLeave;\n animation-name: backdropLeave;\n -webkit-animation-duration: 300ms;\n animation-duration: 300ms;\n -webkit-animation-timing-function: cubic-bezier(0.76, 0.18, 0.4, 0.92);\n animation-timing-function: cubic-bezier(0.76, 0.18, 0.4, 0.92);\n}\n.sp-modal-backdrop.enter-active,\n.sp-modal-backdrop.enter-done {\n opacity: 1;\n}\n.sp-modal-backdrop.exit-active,\n.sp-modal-backdrop.exit-done {\n opacity: 0;\n}\n.sp-modal-backdrop-blur-effect {\n transition: filter 300ms cubic-bezier(0.4, 0, 0, 1);\n filter: saturate(1.3) blur(5px);\n}\n/************************************************\n Modal dialog and associated layout container\n************************************************/\n.Modal {\n display: flex;\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n z-index: var(--layer-critical);\n overflow: hidden;\n overscroll-behavior: none;\n justify-content: center;\n align-items: center;\n /* for large screens, place an eventual cap on the height of a modal */\n}\n.Modal .sp-dialog-sizer {\n display: grid;\n grid-template-columns: 1fr;\n grid-template-rows: 1fr;\n max-height: calc(100vh - 64px);\n min-height: 320px;\n width: calc(100vw - 128px);\n margin: 0 64px;\n}\n@media screen and (max-width: 1024px) {\n .Modal .sp-dialog-sizer {\n max-height: calc(100vh - 32px);\n width: calc(100vw - 48px);\n margin: 0 24px;\n }\n}\n@media screen and (min-height: 1164px) {\n .Modal .sp-dialog-sizer {\n max-height: 1100px;\n }\n}\n.Modal .sp-dialog-content {\n display: flex;\n position: relative;\n grid-column: 1 / -1;\n grid-row: 1 / -1;\n flex-direction: column;\n overflow: hidden;\n border-radius: 8px;\n box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22);\n will-change: transform, opacity;\n}\n.Modal.enter .sp-dialog-content {\n -webkit-animation-name: dialogEnter;\n animation-name: dialogEnter;\n -webkit-animation-duration: 300ms;\n animation-duration: 300ms;\n -webkit-animation-timing-function: cubic-bezier(0.4, 0, 0, 1);\n animation-timing-function: cubic-bezier(0.4, 0, 0, 1);\n}\n.Modal.exit .sp-dialog-content {\n -webkit-animation-name: dialogLeave;\n animation-name: dialogLeave;\n -webkit-animation-duration: 300ms;\n animation-duration: 300ms;\n -webkit-animation-timing-function: cubic-bezier(0.76, 0.18, 0.4, 0.92);\n animation-timing-function: cubic-bezier(0.76, 0.18, 0.4, 0.92);\n}\n.Modal.enter-active .sp-dialog-content,\n.Modal.enter-done .sp-dialog-content {\n transform: scale3d(1, 1, 1);\n opacity: 1;\n}\n.Modal.exit-active .sp-dialog-content,\n.Modal.exit-done .sp-dialog-content {\n transform: scale3d(0.8, 0.8, 0.8);\n opacity: 0;\n}\n");const Vl=({isOpen:e,maxWidth:t,onRequestClose:n,onAfterClose:a,children:i})=>{var r;$o(e?["sp-modal-backdrop-blur-effect"]:[]);il(document,"keydown",e?({keyCode:e})=>{27===e&&n()}:null);const s=qo(n),o=pt((()=>({onRequestClose:s})),[]);return ot.createElement($l.Provider,{value:o},ln.createPortal(ot.createElement(Hl,null,ot.createElement(ea,{in:e,timeout:300,mountOnEnter:!0,unmountOnExit:!0},ot.createElement("div",{className:"sp-modal-backdrop"})),ot.createElement(ea,{in:e,timeout:300,mountOnEnter:!0,unmountOnExit:!0,onExited:a},ot.createElement("div",{className:"Modal"},ot.createElement("div",{className:"sp-dialog-sizer",style:{maxWidth:null!=(r=y(t)?`${t}px`:t)?r:"1400px"}},ot.createElement("div",{className:"sp-dialog-content"},i))))),document.body))};oi(".ModalHeader {\n flex: none;\n background-color: var(--color-blumine);\n color: var(--color-white);\n justify-content: center;\n display: flex;\n align-items: center;\n}\n.ModalHeader .sp-modal-title {\n margin: 10px 16px;\n font-size: 22px;\n font-weight: 500;\n flex: 1 1 100%;\n word-break: break-all;\n}\n@media screen and (max-width: 1024px) {\n .ModalHeader .sp-modal-title {\n margin: 4px 12px;\n font-size: 18px;\n }\n}\n.ModalHeader .sp-modal-close {\n border: none;\n background-color: transparent;\n flex: 0 0 56px;\n height: 56px;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n align-self: flex-start;\n transition: all 150ms ease-out;\n}\n.ModalHeader .sp-modal-close:hover,\n.ModalHeader .sp-modal-close:focus {\n background-color: rgba(160, 180, 220, 0.15);\n outline: none;\n}\n@media screen and (max-width: 1024px) {\n .ModalHeader .sp-modal-close {\n flex: 0 0 48px;\n height: 48px;\n }\n}\n");const{useContext:Jl}=ot,Wl=({className:e,children:t})=>{const{onRequestClose:n}=Jl($l);return ot.createElement("div",{className:"ModalHeader"},ot.createElement("div",{className:Cn("sp-modal-title",e)},t),ot.createElement("button",{className:"sp-modal-close",onClick:()=>n&&n()},ot.createElement("i",{className:"ico icon-close"})))};oi(".ModalBody {\n display: flex;\n flex: 1 1 auto;\n overflow: auto;\n overscroll-behavior: contain;\n --webkit-overflow-scrolling: touch;\n background-color: var(--color-smoke);\n padding: 0 64px;\n}\n@media screen and (max-width: 1024px) {\n .ModalBody {\n padding: 0 8px;\n }\n}\n");const Kl=({children:e})=>ot.createElement("div",{className:"ModalBody"},e);oi(".ModalFooter {\n flex: 0 0 auto;\n min-height: 64px;\n background-color: var(--color-white);\n color: var(--color-white);\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n box-shadow: 0 4px 4px 4px rgba(0, 0, 0, 0.12), 0 6px 12px 8px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n padding: 16px;\n}\n.ModalFooter .sp-modal-footer-left {\n flex: 1 1 100%;\n margin-right: 16px;\n}\n.ModalFooter .sp-modal-footer-right {\n flex: 1 0 auto;\n display: flex;\n justify-content: flex-end;\n}\n@media screen and (max-width: 1024px) {\n .ModalFooter .ModalFooter {\n flex-wrap: wrap;\n }\n .ModalFooter .sp-modal-footer-left {\n margin: 8px 0;\n }\n}\n");const ql=({primaryActions:e,secondaryActions:t})=>ot.createElement("div",{className:"ModalFooter"},t&&ot.createElement("div",{className:"sp-modal-footer-left"},t),e&&ot.createElement("div",{className:"sp-modal-footer-right"},e)),Xl=(e,t,n)=>new Promise((a=>{let i=document.createElement("div"),r=!1;function s(){i&&(ln.unmountComponentAtNode(i),i=null)}const o=e=>t=>{i&&(a(e(t)),r=!1,d())},l=o((e=>({status:"CLOSED",closeResult:e}))),c=o((e=>({status:"DISMISSED",dismissResult:e}))),p=()=>c(null);function d(){ln.render(ot.createElement(Vl,{isOpen:r,onRequestClose:p,onAfterClose:s,...n},ot.createElement(ta,null,ot.createElement(e,{...t,dismissModal:c,closeModal:l}))),i)}d(),setTimeout((()=>{i&&(r=!0,d())}))}));class Zl extends ot.Component{constructor(e){super(e),this.refCallback=e=>{e&&(this.element=$(e))},this.state={id:pr.generateUuid(),currentPageKey:null,pages:[]}}componentDidMount(){const{children:e,deepLinkParam:t,hideNavigation:n,scrollableContainer:a}=this.props;this.container=this.element.closest(a),P(this.container.bind)&&!n&&this.container.bind(this.getEventKey(),G((()=>this.handleScroll()),20)),this.navigator=this.element.find(".page-navigation"),t&&this.props.reactInjector.$stateParams[t]&&this.setCurrentSection(this.props.reactInjector.$stateParams[t]);const i=ot.Children.map(e,(e=>e.props.pageKey&&e.props.label?{key:e.props.pageKey,label:e.props.label,visible:!1!==e.props.visible,badge:e.props.badge}:null));this.setState({pages:i,currentPageKey:i.length>0?i[0].key:null})}componentWillUnmount(){P(this.container.unbind)&&!this.props.hideNavigation&&this.container.unbind(this.getEventKey())}setCurrentSection(e){this.setState({currentPageKey:e}),this.syncLocation(e),er.scrollTo(`[data-page-id=${e}]`,this.props.scrollableContainer,this.container.offset().top),this.container.find(".highlighted").removeClass("highlighted"),this.container.find(`[data-page-id=${e}]`).addClass("highlighted")}getEventKey(){return`scroll.pageNavigation.${this.state.id}`}handleScroll(){const e=this.element.get(0).getBoundingClientRect(),t=this.container.get(0).getBoundingClientRect().top,n=this.state.pages.find((e=>{const n=this.container.find(`[data-page-content=${e.key}]`);return!!n.length&&n.get(0).getBoundingClientRect().bottom>t}));n&&(this.setState({currentPageKey:n.key}),this.syncLocation(n.key),this.navigator.find("li").removeClass("current"),this.navigator.find(`[data-page-navigation-link=${n.key}]`).addClass("current")),e.top<t?this.navigator.css({position:"fixed",width:this.navigator.get(0).getBoundingClientRect().width,top:t}):this.navigator.css({position:"relative",top:0,width:"100%"})}syncLocation(e){const{deepLinkParam:t}=this.props;t&&this.props.reactInjector.$state.go(".",{[t]:e},{notify:!1,location:"replace"})}updatePagesConfig(e){const t=[...this.state.pages],n=t.find((t=>t.key===e.key));n&&(n.badge=e.badge,n.label=e.label,n.visible=e.visible,this.setState({pages:t}))}render(){const{children:e,hideNavigation:t}=this.props,{currentPageKey:n,pages:a}=this.state,i=ot.Children.map(e,(e=>ot.cloneElement(e,{updatePagesConfig:e=>this.updatePagesConfig(e)})));return ot.createElement("div",{className:"page-navigator"},ot.createElement("div",{className:"row flex-1",ref:this.refCallback},!t&&ot.createElement("div",{className:"col-md-3 hidden-sm hidden-xs"},ot.createElement("ul",{className:"page-navigation"},a.map(((e,t)=>e.visible&&ot.createElement("li",{key:t,"data-page-navigation-link":e.key,className:n===e.key?"current":""},ot.createElement("a",{onClick:()=>this.setCurrentSection(e.key)},e.label,e.badge&&ot.createElement("span",null," ","("+e.badge+")"))))))),ot.createElement("div",{className:"col-md-"+(t?"12":"9")+" col-sm-12"},ot.createElement("div",{className:"sections"},i))))}}class _l extends ot.Component{constructor(e){super(e)}componentDidUpdate(e){const{badge:t,pageKey:n,label:a,updatePagesConfig:i,visible:r}=this.props;e.visible===this.props.visible&&e.badge===this.props.badge&&e.label===this.props.label||i&&i({key:n,label:a,visible:!1!==r,badge:t})}render(){const{children:e,pageKey:t,label:n,noWrapper:a,visible:i}=this.props;return!1!==i?ot.createElement("div",{className:"page-section"},ot.createElement("div",{className:"page-subheading flex-1","data-page-id":t},ot.createElement("h4",{className:"sticky-header"},n),ot.createElement("div",{className:a?"no-wrapper":"section-body","data-page-content":t},e))):ot.createElement(ot.Fragment,null)}}const ec=ot.memo((({outputFileObject:e})=>{const t=/(https?:\/\/[^$\s'"]+)/,n=ia(e);let a=0;const i=n.split(t);return ot.createElement("pre",{style:{overflow:"scroll",maxHeight:"400px"}},i.map((e=>{return`'${e}'`.match(t)?(n=e,ot.createElement("a",{key:""+a++,href:n,target:"_blank"},n)):e;var n})))}));class tc extends ot.Component{constructor(){super(...arguments),this.setSortKey=e=>{const{sortKey:t,onChange:n}=this.props;e.preventDefault();n((this.isSortKey()&&this.isReverse()?"":"-")+t)}}isSortKey(){const{currentSort:e,sortKey:t}=this.props;return e===t||e==="-"+t}isReverse(){return this.props.currentSort&&this.props.currentSort.startsWith("-")}render(){const e=this.isSortKey(),t=Cn({"inactive-sort-key":!e,"sort-toggle":!0,clickable:!0});return ot.createElement("span",{className:t,onClick:this.setSortKey},this.props.label,ot.createElement("a",null,(!this.isReverse()||!e)&&ot.createElement("span",{className:"glyphicon glyphicon-Down-triangle"}),this.isReverse()&&e&&ot.createElement("span",{className:"glyphicon glyphicon-Up-triangle"})))}}tc.defaultProps={onChange:qi};class nc extends ot.Component{render(){const{className:e,onClick:t,children:n}=this.props;return ot.createElement("span",{className:e,onClick:t}," ",n," ")}}const ac=st.createContext(null),{useState:ic,useMemo:rc}=st,sc=e=>{const t=cl(),[n,a]=ic(!1),{layout:i,...r}=e,s=e.columns.map((e=>"string"==typeof e?{name:e}:e)),o=rc((()=>({layout:i,isMobile:t,allExpanded:n,setAllExpanded:()=>a(!1),expandable:e.expandable,columns:s})),[i,t,e.expandable,n,nl(e.columns)]),{TableLayout:l}=i;return st.createElement(ac.Provider,{value:o},st.createElement(l,{...r,isMobile:t,columns:s,expandAll:()=>a(!0)}))},{useState:oc,useContext:lc,useEffect:cc}=st,pc=({defaultExpanded:e,renderExpandedContent:t,children:n})=>{const{layout:a,expandable:i,allExpanded:r,setAllExpanded:s,isMobile:o,columns:l}=lc(ac),[c,p]=oc(e||!1);cc((()=>{r&&t&&p(!0)}),[r]),i||null==e||console.error(new Error("You used the defaultExpanded prop on a row inside a <Table/> that's not expandable.\n Either remove the defaultExpanded prop or make the <Table/> expandable."));const d=st.Children.map(n,((e,t)=>st.cloneElement(e,{index:t})));d.length>l.length&&(()=>{throw new Error("A <TableCell/> was added that didn't match any of the columns defined on its parent <Table/>.\n Check if there are an equal number of <TableCell/> elements to the number of columns provided to the <Table/>.\n ")})();const{TableRowLayout:u}=a;return st.createElement(u,{tableExpandable:i,rowExpandable:i&&!!t,expanded:c,setExpanded:e=>{p(e),r&&!e&&s(!1)},renderExpandedContent:t,isMobile:o,columns:l,children:d})},{useContext:dc}=st,uc=e=>{const{layout:t,expandable:n,isMobile:a,columns:i}=dc(ac),{TableCellLayout:r}=t;return st.createElement(r,{...e,expandable:n,isMobile:a,columns:i})};oi(".MinimalNativeTableLayout {\n text-align: left;\n font-size: 13px;\n overflow: hidden;\n}\n.MinimalNativeTableLayout .header-row {\n height: 24px;\n}\n.MinimalNativeTableLayout .header-cell {\n color: var(--color-charcoal);\n font-weight: 400;\n padding: 0 16px;\n border-bottom: 1px solid var(--color-porcelain);\n}\n.MinimalNativeTableLayout .header-cell:first-child {\n font-weight: 900;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n color: var(--color-black);\n}\n.MinimalNativeTableLayout .cell {\n color: var(--color-charcoal);\n padding: 6px 16px;\n vertical-align: top;\n min-width: 80px;\n}\n.MinimalNativeTableLayout .cell:first-child {\n font-weight: 600;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n");const mc={TableLayout:({columns:e,children:t})=>st.createElement("table",{className:"MinimalNativeTableLayout",cellSpacing:"0",cellPadding:"0"},st.createElement("thead",null,st.createElement("tr",{className:"header-row"},e.map((({name:e})=>st.createElement("th",{key:e,className:"header-cell"},e))))),st.createElement("tbody",null,t)),TableRowLayout:({children:e})=>st.createElement("tr",null,e),TableCellLayout:({children:e,indent:t})=>st.createElement("td",{className:"cell",style:{paddingLeft:t?16+20*t+"px":void 0}},e)};oi(".StandardGridTableLayout {\n display: grid;\n}\n.StandardGridTableLayout .standard-grid-table-header {\n display: grid;\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n font-weight: 600;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n color: var(--color-regal);\n font-size: 13px;\n z-index: 100;\n align-items: flex-end;\n min-height: 48px;\n grid-column: 1 / -1;\n background-color: var(--color-smoke);\n border-bottom: 2px solid var(--color-blumine);\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell {\n align-items: flex-end;\n padding-bottom: 6px;\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.sortable {\n border-radius: 16px 16px 0 0;\n cursor: pointer;\n height: 32px;\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.sortable:hover {\n background-color: rgba(160, 180, 220, 0.15);\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.sortable > .sort-indicator {\n border-radius: 16px;\n background-color: var(--color-blumine);\n width: 16px;\n height: 16px;\n margin-left: 6px;\n margin-bottom: 1px;\n position: relative;\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.sortable > .sort-indicator:after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n width: 0;\n height: 0;\n margin-left: -4px;\n border-left: 4px solid transparent;\n border-right: 4px solid transparent;\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.sortable > .sort-indicator.ascending:after {\n margin-top: -2px;\n border-bottom: 4px solid var(--color-smoke);\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.sortable > .sort-indicator.descending:after {\n margin-top: -1px;\n border-top: 4px solid var(--color-smoke);\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.header-expand-toggle {\n display: flex;\n justify-content: center;\n align-items: flex-end;\n cursor: pointer;\n padding-left: 0;\n border-radius: 16px 16px 0 0;\n height: 32px;\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.header-expand-toggle:hover {\n background-color: rgba(160, 180, 220, 0.15);\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.header-expand-toggle > i {\n font-size: 24px;\n margin-bottom: -4px;\n}\n.StandardGridTableLayout .standard-grid-table-row-container {\n display: grid;\n}\n.StandardGridTableLayout .standard-grid-table-row {\n display: grid;\n min-height: 40px;\n overflow: hidden;\n align-items: center;\n font-size: 13px;\n padding: 8px 0;\n grid-column: 1 / -1;\n grid-row: 1;\n}\n.StandardGridTableLayout .standard-grid-table-row.expandable {\n cursor: pointer;\n}\n.StandardGridTableLayout .standard-grid-table-row.expandable:hover {\n /*\n Since this becomes a sticky header when rows are expanded\n and the color we want is semi-transparent, let's use a gradient\n that grabs the right color but puts a white backdrop behind it\n so the things scrolling below it don't come through.\n */\n background-image: linear-gradient(180deg, rgba(160, 180, 220, 0.15), rgba(160, 180, 220, 0.15));\n}\n.StandardGridTableLayout .standard-grid-table-row.expanded {\n background-color: var(--color-white);\n position: -webkit-sticky;\n position: sticky;\n top: 48px;\n}\n.StandardGridTableLayout .standard-grid-table-row .row-expand-toggle {\n justify-content: center;\n padding-left: 0;\n color: var(--color-nobel);\n}\n.StandardGridTableLayout .standard-grid-table-row .row-expand-toggle > i {\n font-size: 24px;\n}\n.StandardGridTableLayout .expanded-row-content {\n /* stretch across entire table width */\n grid-column: 1 / -1;\n grid-row: 2;\n background-color: var(--color-white);\n padding: 16px;\n overflow-x: scroll;\n}\n.StandardGridTableLayout .standard-grid-table-cell,\n.StandardGridTableLayout .cell-content {\n display: flex;\n align-items: center;\n flex: 1;\n}\n.StandardGridTableLayout .standard-grid-table-cell {\n padding-left: 16px;\n}\n@media screen and (max-width: 1024px) {\n .StandardGridTableLayout .standard-grid-table-row-container:first-child {\n margin-top: 16px;\n }\n .StandardGridTableLayout .standard-grid-table-row {\n display: flex;\n flex-wrap: wrap;\n padding: 0 8px 16px;\n margin: 0 0 16px;\n border-bottom: 1px solid var(--color-porcelain);\n }\n .StandardGridTableLayout .standard-grid-table-row.expanded {\n position: static;\n margin-bottom: 0;\n padding-left: 6px;\n /*for border */\n border-left: 2px solid var(--color-regal);\n border-bottom: none;\n }\n .StandardGridTableLayout .standard-grid-table-row.expanded:hover {\n background-color: var(--color-white);\n }\n .StandardGridTableLayout .expanded-row-content {\n border-left: 2px solid var(--color-regal);\n }\n .StandardGridTableLayout .standard-grid-table-cell {\n flex: 0 0 100%;\n flex-direction: column;\n align-items: flex-start;\n }\n .StandardGridTableLayout .mobile-cell-header {\n font-weight: 900;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n color: var(--color-regal);\n margin-top: 9px;\n }\n .StandardGridTableLayout .cell-content {\n margin-top: 4px;\n margin-left: 4px;\n }\n}\n");const gc=(e,t,n)=>{if(n)return;const a=e.map((e=>{if("number"==typeof e)return`${e}fr`;if(Array.isArray(e)&&2===e.length){const[t,n]=e;return`minmax(${t.size+t.unit}, ${n.size+n.unit})`}return!Array.isArray(e)&&e.size&&e.unit?`${e.size}${e.unit}`:(e=>{throw new Error(`Invalid table sizing configuration.\n Expected either a sizing object with 'size' and 'unit' fields or an array of two sizing objects.\n Actual value was ${JSON.stringify(e)}`)})(e)}));return t&&a.push("48px"),a.join(" ")},hc=({columns:e,expandable:t,expandAll:n,isMobile:a,children:i,sizes:r})=>{const s=gc(r,t,a);return st.createElement("div",{className:"StandardGridTableLayout"},!a&&st.createElement("div",{className:"standard-grid-table-header",style:{gridTemplateColumns:s}},e.map((({name:e,sortDirection:t,onSort:n})=>st.createElement("div",{key:e,className:Cn("standard-grid-table-cell",{sortable:!!n}),onClick:n||null},e,t?st.createElement("span",{className:Cn("sort-indicator",t)}):null))),t&&st.createElement("div",{className:"standard-grid-table-cell header-expand-toggle",onClick:n},st.createElement("i",{className:"ico icon-expand-all"}))),i)},fc=({tableExpandable:e,rowExpandable:t,expanded:n,setExpanded:a,isMobile:i,sizes:r,children:s,renderExpandedContent:o})=>{const l=gc(r,e,i);return st.createElement("div",{className:Cn("standard-grid-table-row-container",{"sp-margin-l-bottom":t&&n})},st.createElement("div",{className:Cn("standard-grid-table-row",{expandable:t,expanded:n}),style:{gridTemplateColumns:l},onClick:t?()=>a(!n):null},s,e&&!i&&st.createElement("div",{className:"standard-grid-table-cell row-expand-toggle"},t&&st.createElement("i",{className:Cn("ico",{"icon-expand":!n,"icon-collapse":n})}))),t&&n&&st.createElement("div",{className:"expanded-row-content"},o()))},vc=({children:e,indent:t,index:n,columns:a,isMobile:i})=>{const r=a[n].name,s=t&&i?16+20*t+"px":void 0;return st.createElement("div",{className:"standard-grid-table-cell",style:{paddingLeft:s}},i&&st.createElement("div",{className:"mobile-cell-header"},r),st.createElement("div",{className:"cell-content"},e))},Ac=e=>({TableLayout:t=>st.createElement(hc,{...t,sizes:e}),TableRowLayout:t=>st.createElement(fc,{...t,sizes:e}),TableCellLayout:e=>st.createElement(vc,{...e})});class Ec extends pn{constructor(e){super(e),this.renderOuter=this._renderOuter}_renderOuter(){const e=super.render.apply(this,arguments);if(!e)return null;const t=this.wrapper?this.wrapper.offsetWidth:null;return ot.createElement(mn,{classes:{element:"layer-high"},attachment:"top left",targetAttachment:"top left",constraints:[{to:"window",attachment:"together",pin:["top"]}]},ot.createElement("div",null),ot.cloneElement(e,{style:{position:"static",width:t}}))}}const bc=({className:e,children:t})=>ot.createElement("span",{className:e,style:{wordBreak:"break-all",overflowWrap:"break-word",hyphens:"none"}},t),yc=({className:e,children:t})=>ot.createElement("span",{className:e,style:{whiteSpace:"nowrap"}},t);var Cc,wc;function xc(e){return ot.createElement("div",null,ot.createElement("div",{className:"col-md-4 sm-label-left"},ot.createElement("b",null,e.propLabel),e.propHelpFieldId&&ot.createElement(_s,{id:e.propHelpFieldId})),ot.createElement("div",{className:"col-md-8 sm-label-left"},ot.createElement("span",{className:"btn-group btn-group-"+e.toggleSize},ot.createElement("button",{name:"prop-off",type:"button",className:"btn btn-default "+(e.isPropertyActive?"disabled":"active btn-primary"),onClick:()=>e.onClick(!1)},ot.createElement(Ps,{value:e.tooltipPropOffBtn},ot.createElement("span",null,e.displayTextPropOffBtn))),ot.createElement("button",{name:"prop-on",type:"button",className:"btn btn-default "+(e.isPropertyActive?"active btn-primary":"disabled"),onClick:()=>e.onClick(!0)},ot.createElement(Ps,{value:e.tooltipPropOnBtn},ot.createElement("span",null,e.displayTextPropOnBtn))))))}(wc=Cc||(Cc={})).XSMALL="xs",wc.SMALL="sm",wc.MEDIUM="m",wc.LARGE="lg",xc.defaultProps={toggleSize:Cc.XSMALL,displayTextPropOffBtn:"Off",tooltipPropOffBtn:"Toggle to turn OFF",displayTextPropOnBtn:"On",tooltipPropOnBtn:"Toggle to turn ON",isPropertyActive:!1};const kc=({tooltip:e,placement:t,delayShow:n,wrapperClassName:a,...i})=>ot.createElement(Ps,{value:e,placement:t,delayShow:n},ot.createElement("div",{className:a},ot.createElement(Bn,{...i}))),Bc={bindings:{options:"=",model:"=",onChange:"<?"},templateUrl:"core/src/pipeline/config/targetSelect.html"};n("spinnaker.pipeline.targetSelect.component",[]).component("targetSelect",Bc),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/pipeline/config/targetSelect.html",'<ui-select ng-model="$ctrl.model.target" on-select="$ctrl.onChange($ctrl.model.target)" class="form-control input-sm">\n <ui-select-match placeholder="None">{{$select.selected.label}}</ui-select-match>\n <ui-select-choices repeat="r.val as r in $ctrl.options ">\n <strong ng-bind-html="r.label | highlight: $select.search"></strong>\n <div ng-bind-html="r.description"></div>\n </ui-select-choices>\n</ui-select>\n')}]);class Sc extends ot.Component{constructor(){super(...arguments),this.clicked=e=>{const t=e.target.checked?[this.props.platformHealthType]:null;this.props.onChange(t)}}render(){return ot.createElement("div",{className:"checkbox"},ot.createElement("label",null,ot.createElement("input",{type:"checkbox",checked:E(this.props.interestingHealthProviderNames,[this.props.platformHealthType]),onChange:this.clicked}),"Consider only ",this.props.platformHealthType," health")," ",ot.createElement(_s,{id:"application.platformHealthOnly",expand:this.props.showHelpDetails}))}}function Mc(e){const{value:t,onChange:n,platformHealthType:a,showHelpDetails:i,...r}=e;return ot.createElement(Sc,{...r,interestingHealthProviderNames:t,platformHealthType:a,showHelpDetails:i,onChange:e=>{n(fr({name:r.name,value:e}))}})}const Nc=({dismiss:e})=>ot.createElement("div",{className:"modal-close close-button pull-right"},ot.createElement("button",{className:"link",type:"button",onClick:e},ot.createElement("span",{className:"glyphicon glyphicon-remove"})));class Dc extends ot.Component{render(){const{className:e,isDisabled:t,isFormSubmit:n,isNew:a,label:i,onClick:r,submitting:s}=this.props,o=n?"submit":"button";return ot.createElement("button",{className:e,disabled:t,onClick:r,type:o},ot.createElement("div",{className:"flex-container-h horizontal middle"},!s&&ot.createElement("i",{className:"far fa-check-circle"})||ot.createElement(bs,{mode:"circular"}),ot.createElement("span",{className:"sp-margin-xs-left"},i||(a?"Create":"Update"))))}}Dc.defaultProps={className:"btn btn-primary",onClick:qi,isDisabled:!1,isFormSubmit:!1,isNew:!1};class Ic{static setHeading(e){this.heading=e}static getPage(e){return this.pageRegistry.find((t=>t.key===e))}static markDirty(e){this.getPage(e).state.dirty=!0}static markClean(e){this.getPage(e).state.dirty=!1}static markComplete(e){this.getPage(e).state.done=!0}static markIncomplete(e){this.getPage(e).state.done=!1}static setCurrentPage(e,t){this.pageRegistry.forEach((t=>t.state.current=t===e)),this.currentPage=e,e.state.markCleanOnView&&this.markClean(e.key),e.state.markCompleteOnView&&this.markComplete(e.key),t||er.scrollTo(`[waypoint="${e.key}"]`,"[waypoint-container]",143)}static registerPage(e,t,n){n=n||{done:!1,blocked:!0,rendered:!0,current:!1,dirty:!1,markCleanOnView:!0,markCompleteOnView:!1,required:!1},this.pageRegistry.push({key:e,label:t,state:n}),this.renderPages()}static renderPages(){const e=this.pageRegistry.filter((e=>e.state.rendered));this.renderedPages=e,1===e.length&&this.setCurrentPage(e[0])}static isComplete(){return this.renderedPages.map((e=>e.state)).filter((e=>e.rendered&&e.required)).every((e=>e.done&&!e.dirty))}static allPagesVisited(){return this.renderedPages.map((e=>e.state)).filter((e=>e.rendered&&e.required)).every((e=>e.done))}static setRendered(e,t){this.pageRegistry.filter((t=>t.key===e)).forEach((e=>e.state.rendered=t)),this.renderPages()}static includePage(e){this.setRendered(e,!0)}static excludePage(e){this.setRendered(e,!1)}static resetWizard(){this.renderedPages.length=0,this.pageRegistry.length=0,this.currentPage=null,this.heading=null}}Ic.renderedPages=[],Ic.pageRegistry=[];class Fc extends ot.Component{constructor(){super(...arguments),this.state={errors:{},order:0,isLoading:!1,status:"default"},this.ref=ot.createRef(),this.innerRef=ot.createRef(),this.onLoadingChanged=e=>{const t=this.computeStatus(this.state.errors,e);return this.setState({isLoading:e,status:t},this.onWizardPageStateChanged)},this.validate=e=>{const t=this.innerRef.current,n=t&&P(t.validate)&&t.validate(e)||{};if(!E(n,this.state.errors)){const e=this.computeStatus(n,this.state.isLoading);this.setState({errors:n,status:e},this.onWizardPageStateChanged)}return n}}static getStatusClass(e){const t={error:"dirty",loading:"waiting",default:"done"};return t[e]||t.default}computeStatus(e,t){return Object.keys(e).length?"error":t?"loading":"default"}componentDidMount(){this.props.wizard.onWizardPageAdded(this)}componentWillUnmount(){this.props.wizard.onWizardPageRemoved(this)}componentDidUpdate(e){this.props.order!==e.order&&this.setState({order:this.props.order},this.onWizardPageStateChanged)}onWizardPageStateChanged(){this.props.wizard.onWizardPageStateChanged(this)}render(){const{note:e,label:t,render:n}=this.props,{status:a}=this.state,{innerRef:i,onLoadingChanged:r}=this,s=n({innerRef:i,onLoadingChanged:r}),o=Fc.getStatusClass(a);return ot.createElement("div",{className:"modal-page",ref:this.ref},t&&ot.createElement("div",{className:"wizard-subheading sticky-header"},ot.createElement("h4",{className:o},t)),ot.createElement("div",{className:"wizard-page-body"},s,e&&ot.createElement("div",{className:"row"},e)))}}class Tc extends ot.Component{render(){const{current:e,page:t,onClick:n}=this.props,{errors:a,status:i}=t.state,{label:r}=t.props,s=(e=>{const t=(e,n,a)=>(x(e)?e.forEach(((e,i)=>t(e,`${n}[${i}]`,a))):C(e)?a[n]=e:j(e)&&Object.keys(e).forEach((i=>t(e[i],`${n}.${i}`,a))),a);return t(e,"errors",{})})(a),o=!!Object.keys(s).length,l=`${Fc.getStatusClass(i)} ${e?"current":""}`,c=ot.createElement("li",{className:l},ot.createElement("a",{className:"clickable",onClick:()=>n(t)},r));if(!o)return c;const p=ot.createElement("span",null,Object.keys(s).map((e=>ot.createElement("span",{key:e},s[e]," ",ot.createElement("br",null)))));return ot.createElement(Ps,{template:p},c)}}class Qc extends ot.Component{render(){const{errorMessage:e}=this.props;if(!e.includes("has traffic guards enabled"))return null;const{$state:t,$stateParams:n}=hi,{project:a,application:i}=n,r=`home.${a?"project":"applications"}.application.config`,s={project:a,application:i,section:"traffic-guards"},o=t.href(r,s);return ot.createElement("p",null,ot.createElement("a",{href:o},"Configure Traffic Guards for this application"))}}class Pc extends ot.Component{getBaseState(){const{$stateParams:e}=hi;return`home.${e.project?"project":"applications"}.application`}getParams(e){const{project:t,application:n}=hi.$stateParams;return{project:t,application:n,...e}}render(){const{errorMessage:e,task:t}=this.props,{$state:n}=hi;if(!e)return null;const a=t.id?n.href(this.getBaseState()+".tasks.taskDetails",this.getParams({taskId:t.id})):null;return ot.createElement("div",{className:"col-md-12 overlay-modal-error"},ot.createElement("div",{className:"alert"},ot.createElement("h4",null,ot.createElement("i",{className:"fa fa-exclamation-triangle"})," Error:"),ot.createElement("p",null,ot.createElement(Sr,{message:e})),ot.createElement(Qc,{errorMessage:e})),a&&ot.createElement("p",null,ot.createElement("a",{href:a},"View this failed task in the tasks pane.")))}}class Rc extends ot.Component{render(){const{item:e}=this.props,t=Cn(["glyphicon","status-glyph",{"glyphicon-time":e.hasNotStarted,"glyphicon-play":e.isRunning,"fa fa-check":e.isCompleted,"fa fa-exclamation-triangle":e.isFailed||"TERMINATED"===e.status,"glyphicon-stop":e.isCanceled,"glyphicon-pause":e.isSuspended||e.isPaused}]);return ot.createElement("span",{className:t})}}function Uc(e){const t=["stageStart","stageEnd","determineTargetServerGroup"];let n=[];return e&&(n=e.filter((e=>!t.includes(e.name)||"TERMINAL"===e.status))),n}const zc="spinnaker.pipelines.stages.common.displayableTasks.filter";n(zc,[]).filter("displayableTasks",(function(){return Uc}));const Gc=({monitor:e})=>{const t=sl();return Xo(e.statusUpdatedStream,(()=>t())),e.task?ot.createElement(ot.Fragment,null,ot.createElement("ul",{className:"task task-progress"},Uc(e.task.steps).map(((e,t)=>ot.createElement("li",{key:t},ot.createElement(Rc,{item:e})," ",yr(e.name)," ",e.startTime&&ar(e.runningTimeInMs))))),e.task.isRunning&&ot.createElement("ul",{className:"task task-progress task-progress-running"},ot.createElement("li",null,ot.createElement(bs,{size:"small"}))),e.task.isCompleted&&ot.createElement("ul",{className:"task task-progress task-progress-refresh"},ot.createElement("li",null,ot.createElement("span",{className:"far fa-check-circle"})," ",ot.createElement("strong",null,"Operation succeeded!"))),e.task.id&&!e.error&&e.application&&ot.createElement("p",null,"You can"," ",ot.createElement("a",{href:hi.$state.href("home.applications.application.tasks.taskDetails",{application:e.application.name,taskId:e.task.id})},"monitor this task from the Tasks view"),".")):ot.createElement("ul",{className:"task"},"submitting task...")},jc=({monitor:e})=>{const t=sl();return lt((()=>{var n;const a=null==(n=null==e?void 0:e.statusUpdatedStream)?void 0:n.subscribe((()=>t()));return()=>null==a?void 0:a.unsubscribe()}),[e]),e&&(e.submitting||e.error)?ot.createElement(ea,{appear:!0,classNames:"overlay-modal",timeout:0,in:!0},ot.createElement("div",{className:"overlay overlay-modal vertical"},ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,e.title)),ot.createElement(qt.Body,null,ot.createElement("div",{className:"clearfix"},e.task&&ot.createElement("div",{className:"col-md-8 col-md-offset-2 overlay-modal-status"},ot.createElement(Gc,{monitor:e})),ot.createElement(Pc,{errorMessage:e.errorMessage,task:e.task}))),!e.error&&ot.createElement(qt.Footer,null,ot.createElement("button",{className:"btn btn-primary",onClick:e.closeModal},"Close")),e.error&&ot.createElement(qt.Footer,null,ot.createElement("button",{className:"btn btn-primary",onClick:()=>e.tryToFix()},"Go back and try to fix this"),ot.createElement("button",{className:"btn btn-default",onClick:e.closeModal},"Cancel")))):null};class Lc extends ot.Component{constructor(){super(...arguments),this.stepsElement=ot.createRef(),this.formikRef=ot.createRef(),this.state={pages:[],initialized:!1,currentPage:null},this.onWizardPageAdded=e=>{this.setState((t=>{const n=t.pages.concat(e);return{pages:n,currentPage:t.currentPage||n[0]}}),this.revalidate)},this.onWizardPageRemoved=e=>{this.setState((t=>{const n=M(t.pages,e);return{pages:n,currentPage:t.currentPage||n[0]}}),this.revalidate)},this.setCurrentPage=e=>{e&&this.stepsElement.current&&e.ref.current&&(this.stepsElement.current.scrollTop=e.ref.current.offsetTop),this.setState({currentPage:e})},this.handleStepsScroll=e=>{const t=this.state.pages.map((e=>e.ref.current.offsetTop)),n=e.currentTarget.scrollTop;let a=t.reverse().findIndex((e=>n>=e));void 0===a&&(a=t.length-1);const i=t.length-(a+1),r=this.state.pages[i];r!==this.state.currentPage&&this.setState({currentPage:r})},this.validate=e=>{const t=this.props.validate||(()=>({}));return this.state.pages.map((t=>t.validate(e))).concat(t(e)).reduce(((e,t)=>d(e,t)),{})},this.revalidate=()=>this.formik&&this.formik.validateForm()}static incrementer(){let e=0;return()=>++e}get formik(){return this.formikRef.current&&this.formikRef.current.getFormikBag()}componentDidMount(){this.setState({initialized:!0})}onWizardPageStateChanged(e){this.forceUpdate()}render(){const{formClassName:e,heading:t,initialValues:n,loading:a,submitButtonLabel:i,taskMonitor:r,closeModal:s,dismissModal:o}=this.props,{currentPage:l,initialized:c,pages:p}=this.state,d=ot.createElement("div",{className:"row"},ot.createElement(bs,{size:"large"})),u=p.sort(((e,t)=>e.state.order-t.state.order)).map((e=>ot.createElement(Tc,{key:e.props.label,current:e===l,onClick:this.setCurrentPage,page:e}))),m=()=>{const e=this.formik,t=Lc.incrementer();return e?this.props.render({formik:e,nextIdx:t,wizard:this}):null},g=r&&r.submitting,h=p.some((e=>"loading"===e.state.status));return ot.createElement(ot.Fragment,null,r&&ot.createElement(jc,{monitor:r}),ot.createElement(Gs,{ref:this.formikRef,initialValues:n,onSubmit:s,validate:this.validate,render:n=>ot.createElement(Vn,{className:`form-horizontal ${e}`},ot.createElement(Nc,{dismiss:o}),ot.createElement(qt.Header,null,t&&ot.createElement(qt.Title,null,t)),ot.createElement(qt.Body,null,a||!c?d:ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-3 hidden-sm hidden-xs"},ot.createElement("ul",{className:"steps-indicator wizard-navigation"},u)),ot.createElement("div",{className:"col-md-9 col-sm-12"},ot.createElement("div",{className:"steps",ref:this.stepsElement,onScroll:this.handleStepsScroll},m())))),ot.createElement(qt.Footer,null,ot.createElement("button",{className:"btn btn-default",disabled:g,onClick:o,type:"button"},"Cancel"),ot.createElement(Dc,{isDisabled:!n.isValid||g||h||a,submitting:g,isFormSubmit:!0,label:i})))}))}}class Oc{constructor(e){this.$scope=e}$onInit(){this.render=!1!==this.render,this.markCleanOnView=!1!==this.markCleanOnView,this.markCompleteOnView=!1!==this.markCompleteOnView,this.state={blocked:!1,current:!1,rendered:this.render,done:this.done||!this.mandatory,dirty:!1,required:this.mandatory,markCleanOnView:this.markCleanOnView,markCompleteOnView:this.markCompleteOnView},Ic.registerPage(this.key,this.label,this.state),this.$scope.$on("$destroy",(()=>Ic.setRendered(this.key,!1)))}}Oc.$inject=["$scope"];const Yc={bindings:{mandatory:"<",done:"<",markCleanOnView:"<",markCompleteOnView:"<",key:"@",label:"@",render:"<"},transclude:!0,templateUrl:"core/src/modal/wizard/v2wizardPage.component.html",controller:Oc};n("spinnaker.core.modal.wizard.wizardPage.component",[]).component("v2WizardPage",Yc),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/modal/wizard/v2wizardPage.component.html",'<div class="modal-page" ng-if="$ctrl.state.rendered" waypoint="{{ $ctrl.key }}">\n <div class="wizard-subheading sticky-header">\n <h4\n ng-class="{\n default: !$ctrl.state.done,\n current: $ctrl.state.current,\n done: $ctrl.state.done,\n dirty: $ctrl.state.dirty\n }"\n >\n {{ $ctrl.label }}\n </h4>\n </div>\n <div class="wizard-page-body" ng-transclude></div>\n</div>\n')}]);oi("v2-modal-wizard .modal-header,\n.wizard-modal .modal-header {\n /* Set to keep sticky section headings beneath modal header*/\n position: relative;\n z-index: 5;\n}\nv2-modal-wizard ul.wizard-navigation,\n.wizard-modal ul.wizard-navigation {\n margin: 0;\n padding: 0;\n list-style-type: none;\n height: auto;\n position: relative;\n background-color: var(--color-white);\n z-index: 5;\n}\nv2-modal-wizard ul.wizard-navigation:before,\n.wizard-modal ul.wizard-navigation:before,\nv2-modal-wizard ul.wizard-navigation:after,\n.wizard-modal ul.wizard-navigation:after {\n display: table;\n content: \" \";\n}\nv2-modal-wizard ul.wizard-navigation:after,\n.wizard-modal ul.wizard-navigation:after {\n clear: both;\n}\nv2-modal-wizard ul.wizard-navigation li,\n.wizard-modal ul.wizard-navigation li {\n display: block;\n width: 100%;\n text-align: left;\n padding: 0;\n position: relative;\n}\nv2-modal-wizard ul.wizard-navigation li a,\n.wizard-modal ul.wizard-navigation li a {\n color: var(--color-dovegray);\n display: block;\n line-height: 15px;\n text-decoration: none;\n text-transform: uppercase;\n transition: 0.25s;\n width: 100%;\n font-weight: normal;\n padding: 10px 5px 10px 32px;\n}\nv2-modal-wizard ul.wizard-navigation li a:before,\n.wizard-modal ul.wizard-navigation li a:before {\n position: absolute;\n left: 10px;\n top: 10px;\n width: 14px;\n height: 14px;\n border-radius: 100%;\n background-color: transparent;\n content: '';\n transition: 0.25s;\n font-size: 110%;\n font-family: 'Glyphicons Halflings';\n}\nv2-modal-wizard ul.wizard-navigation li.done a:before,\n.wizard-modal ul.wizard-navigation li.done a:before {\n background-color: var(--color-success);\n}\nv2-modal-wizard ul.wizard-navigation li.default,\n.wizard-modal ul.wizard-navigation li.default {\n pointer-events: auto;\n}\nv2-modal-wizard ul.wizard-navigation li.default a:before,\n.wizard-modal ul.wizard-navigation li.default a:before {\n background-color: var(--color-dovegray);\n}\nv2-modal-wizard ul.wizard-navigation li.current,\n.wizard-modal ul.wizard-navigation li.current,\nv2-modal-wizard ul.wizard-navigation li:hover,\n.wizard-modal ul.wizard-navigation li:hover,\nv2-modal-wizard ul.wizard-navigation li:active,\n.wizard-modal ul.wizard-navigation li:active {\n transition: 0.25s;\n background-color: var(--color-cirrus);\n}\nv2-modal-wizard ul.wizard-navigation li.current a,\n.wizard-modal ul.wizard-navigation li.current a,\nv2-modal-wizard ul.wizard-navigation li:hover a,\n.wizard-modal ul.wizard-navigation li:hover a,\nv2-modal-wizard ul.wizard-navigation li:active a,\n.wizard-modal ul.wizard-navigation li:active a {\n color: var(--color-mineshaft);\n font-weight: 600;\n}\nv2-modal-wizard ul.wizard-navigation li.current a:before,\n.wizard-modal ul.wizard-navigation li.current a:before,\nv2-modal-wizard ul.wizard-navigation li:hover a:before,\n.wizard-modal ul.wizard-navigation li:hover a:before,\nv2-modal-wizard ul.wizard-navigation li:active a:before,\n.wizard-modal ul.wizard-navigation li:active a:before {\n background-color: var(--color-accent);\n content: '';\n}\nv2-modal-wizard ul.wizard-navigation li.dirty a:before,\n.wizard-modal ul.wizard-navigation li.dirty a:before {\n color: var(--color-danger);\n background-color: transparent;\n content: '\\e088';\n}\nv2-modal-wizard ul.wizard-navigation li.waiting a:before,\n.wizard-modal ul.wizard-navigation li.waiting a:before {\n background-color: var(--color-seashell);\n}\nv2-modal-wizard .steps,\n.wizard-modal .steps {\n overflow-y: auto;\n overflow-x: hidden;\n clear: both;\n max-height: calc(100vh - 215px);\n}\nv2-modal-wizard .steps .wizard-subheading,\n.wizard-modal .steps .wizard-subheading {\n padding: 0;\n margin-bottom: 10px;\n}\nv2-modal-wizard .steps .wizard-subheading h4,\n.wizard-modal .steps .wizard-subheading h4 {\n padding: 10px;\n margin-bottom: 0;\n color: var(--color-primary);\n background-color: var(--color-accent-g2);\n}\n@media (max-width: 992px) {\n v2-modal-wizard .steps .wizard-subheading h4,\n .wizard-modal .steps .wizard-subheading h4 {\n padding-left: 0;\n }\n v2-modal-wizard .steps .wizard-subheading h4:before,\n .wizard-modal .steps .wizard-subheading h4:before {\n display: inline-block;\n margin: 0 10px;\n width: 14px;\n height: 14px;\n border-radius: 100%;\n background-color: var(--color-dovegray);\n content: '';\n transition: 0.25s;\n font-size: 15px;\n }\n v2-modal-wizard .steps .wizard-subheading h4.done:before,\n .wizard-modal .steps .wizard-subheading h4.done:before {\n background-color: var(--color-success);\n }\n v2-modal-wizard .steps .wizard-subheading h4.dirty:before,\n .wizard-modal .steps .wizard-subheading h4.dirty:before {\n color: var(--color-danger);\n background-color: transparent;\n content: '\\e088';\n font-family: 'Glyphicons Halflings';\n }\n v2-modal-wizard .steps .wizard-subheading h4.waiting:before,\n .wizard-modal .steps .wizard-subheading h4.waiting:before {\n background-color: var(--color-seashell);\n }\n}\nv2-modal-wizard .steps .wizard-page-body,\n.wizard-modal .steps .wizard-page-body {\n padding: 10px 0 20px;\n}\n");class $c{constructor(e){this.$scope=e,this.wizard=Ic}$onInit(){this.$scope.$on("waypoints-changed",((e,t)=>{t.lastWindow.map((e=>e.elem)).filter((e=>Ic.getPage(e))).reverse().forEach((e=>{Ic.setCurrentPage(Ic.getPage(e),!0)}))})),Ic.setHeading(this.heading)}$onDestroy(){Ic.resetWizard()}}$c.$inject=["$scope"];const Hc={bindings:{heading:"@",taskMonitor:"<",dismiss:"&"},transclude:!0,templateUrl:"core/src/modal/wizard/v2modalWizard.component.html",controller:$c},Vc="spinnaker.core.modal.wizard.wizard.component";n(Vc,["spinnaker.core.modal.wizard.wizardPage.component"]).component("v2ModalWizard",Hc),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/modal/wizard/v2modalWizard.component.html",'<div modal-page>\n <task-monitor ng-if="$ctrl.taskMonitor" monitor="$ctrl.taskMonitor"></task-monitor>\n <modal-close dismiss="$ctrl.dismiss()"></modal-close>\n <div class="modal-header" ng-if="$ctrl.wizard.heading">\n <h4 class="modal-title">{{ $ctrl.wizard.heading }}</h4>\n </div>\n <div ng-class="{ \'modal-body\': !$ctrl.notReallyModal }">\n <div class="row">\n <div class="col-md-3 hidden-sm hidden-xs">\n <ul class="steps-indicator wizard-navigation">\n <li\n ng-repeat="page in $ctrl.wizard.renderedPages"\n ng-class="{\n default: !page.state.done,\n current: page.state.current,\n done: page.state.done,\n dirty: page.state.dirty\n }"\n >\n <a href ng-click="$ctrl.wizard.setCurrentPage(page)">{{ page.label }}</a>\n </li>\n </ul>\n </div>\n <div class="col-md-9 col-sm-12">\n <div\n class="steps"\n ng-transclude\n sticky-headers\n waypoint-container\n waypoint-offset="120"\n waypoint-container-key="#modal-wizard"\n ></div>\n </div>\n </div>\n </div>\n</div>\n')}]);class Jc extends ot.Component{constructor(e){super(e),this.tooltipTemplate=ot.createElement("span",null,ot.createElement("p",null,"Task not completing?"),ot.createElement("p",null,"By default, Spinnaker does not consider cloud provider health (i.e. whether your instances have launched and are running) as a reliable indicator of instance health."),ot.createElement("p",null,"If your instances do not provide a health indicator known to Spinnaker (e.g. a discovery service or load balancers), you should configure your application to consider only cloud provider health when executing tasks. This option is available under Application Attributes in the ",ot.createElement("b",null,"Config tab"),"."));let t=!1;const n=e.task.getValueFor("lastCapacityCheck");if(n){const a=n.up+n.down+n.outOfService+n.unknown+n.succeeded+n.failed;t=e.task.execution.stages.some((t=>("cloneServerGroup"===t.type||"createServerGroup"===t.type)&&t.tasks.some((t=>t.startTime===e.step.startTime))))&&"waitForUpInstances"===e.step.name&&e.step.runningTimeInMs>bn.fromObject({minutes:5}).as("milliseconds")&&n.unknown>0&&n.unknown===a&&!m(e.application,"attributes.platformHealthOnly")}this.state={showMessage:t}}render(){return this.state.showMessage?ot.createElement(Ps,{template:this.tooltipTemplate},ot.createElement("i",{className:"fa fa-exclamation-circle",style:{fontSize:"smaller"}})):null}}class Wc{static addRunningTime(e){const t=Object.getOwnPropertyDescriptor(e,"runningTime");t&&!t.enumerable||Object.defineProperties(e,{runningTimeInMs:{get:this.calculateRunningTime(e)}})}static shouldReplace(e,t){return(u(e)||""===e)&&!(u(t)||""===t)}static defineProperties(e){const t=Object.getOwnPropertyDescriptor(e,"runningTime");t&&!t.enumerable||(e.getValueFor=t=>{var n;if(e.context)return e.context[t];if(!e.variables)return null;const a=e.variables.find((e=>e.key===t));if(a)return a.value;const i=null==(n=e.execution)?void 0:n.stages;if(i&&Array.isArray(i)&&i.length>0){const n=i.map((e=>e.context&&m(e.context,t))).reduce(((e,t)=>Wc.shouldReplace(e,t)?t:e),null);if(!u(n)&&""!==n)return e.variables.push({key:t,value:n}),n}return a?a.value:null},e.getDisplayUser=()=>{var t,n,a;const i=null!=(a=null==(n=null==(t=e.execution)?void 0:t.authentication)?void 0:n.user)?a:"unknown user",r=e.getValueFor("user");return null===r||r===i?i:`${r} (${i})`},e.originalStatus=e.status,Object.defineProperties(e,{failureMessage:{get:()=>this.mergeExceptions(e)},isCompleted:{get:()=>["SUCCEEDED","SKIPPED"].includes(e.status)},isRunning:{get:()=>"RUNNING"===e.status},isFailed:{get:()=>["TERMINAL","FAILED_CONTINUE","STOPPED"].includes(e.status)},isStopped:{get:()=>"STOPPED"===e.status},isActive:{get:()=>["RUNNING","SUSPENDED","NOT_STARTED","PAUSED"].includes(e.status)},hasNotStarted:{get:()=>["NOT_STARTED","BUFFERED"].includes(e.status)},isBuffered:{get:()=>"BUFFERED"===e.status},isCanceled:{get:()=>"CANCELED"===e.status},isSuspended:{get:()=>"SUSPENDED"===e.status},isPaused:{get:()=>"PAUSED"===e.status},status:{get:()=>this.normalizeStatus(e),set:t=>{e.originalStatus=t,this.normalizeStatus(e)}},runningTime:{get:()=>{const t=Date.now(),n=new Date(t-this.calculateRunningTime(e)());return vn(n,t,{includeSeconds:!0})},configurable:!0},runningTimeInMs:{get:this.calculateRunningTime(e),configurable:!0}}))}static mergeExceptions(e){const t=[this.getCustomException(e),this.getGeneralException(e),this.getOrchestrationException(e)].filter((e=>!!e));return 0===t.length?null:t.join("\n\n")}static getOrchestrationException(e){const t=e.getValueFor("kato.tasks");if(t&&t.length){const e=t.find((e=>e.status&&e.status.failed));if(!e)return null;const n=e.history,a=e.exception;if(a)return a.message;if(n&&n.length)return n[n.length-1].status}return null}static getLockFailureException(e){const t=e.getValueFor("exception");if(t){const e=t.details;if(e&&e.currentLockValue){let t,n;return"orchestration"===e.currentLockValue.type?(t="task",n=hi.$state.href("home.applications.application.tasks.taskDetails",{application:e.currentLockValue.application,taskId:e.currentLockValue.id})):(t="pipeline",n=hi.$state.href("home.applications.application.pipelines.executionDetails.execution",{application:e.currentLockValue.application,executionId:e.currentLockValue.id})),`Failed to acquire lock. An <a href="${n}">existing ${t}</a> is currently operating on the cluster.`}}return null}static getCustomException(e){const t=e.getValueFor("exception");return t&&t.exceptionType&&"LockFailureException"===t.exceptionType?this.getLockFailureException(e):null}static getGeneralException(e){var t,n,a,i;const r=e.getValueFor("exception");if(r){const e=(null!=(n=null==(t=r.details)?void 0:t.errors)?n:[]).filter((e=>!!e));return e.length?e.join("\n\n"):null!=(i=null==(a=r.details)?void 0:a.error)?i:null}return null}static calculateRunningTime(e){return()=>{if(!e.startTime)return null;const t=Math.max(Date.now(),e.startTime);return(e.endTime||t)-e.startTime}}static normalizeStatus(e){switch(e.originalStatus){case"SKIPPED":return"SKIPPED";case"COMPLETED":case"SUCCEEDED":return"SUCCEEDED";case"STARTED":case"EXECUTING":case"RUNNING":return"RUNNING";case"FAILED":case"TERMINAL":return"TERMINAL";case"STOPPED":return"STOPPED";case"SUSPENDED":case"DISABLED":return"SUSPENDED";case"NOT_STARTED":return"NOT_STARTED";case"CANCELED":return"CANCELED";case"UNKNOWN":return"UNKNOWN";case"TERMINATED":return"TERMINATED";case"PAUSED":return"PAUSED";case"FAILED_CONTINUE":return"FAILED_CONTINUE";case"BUFFERED":return"BUFFERED";default:return e.originalStatus&&Xe.warn("Unrecognized status:",e.originalStatus),e.originalStatus}}}class Kc{static getTasks(e,t=[]){return Si("/applications").path(e,"tasks").query({statuses:t.join(",")}).get().then((e=>(e.forEach((e=>this.setTaskProperties(e))),e.filter((e=>!e.getValueFor("dryRun"))))))}static getRunningTasks(e){return this.getTasks(e,this.activeStatuses)}static getTask(e){return Si("/tasks").path(e).get().then((e=>(this.setTaskProperties(e),e.execution&&(Wc.defineProperties(e.execution),e.execution.stages&&e.execution.stages.forEach((e=>Wc.defineProperties(e)))),e))).catch((t=>{Xe.warn("There was an issue retrieving taskId: ",e,t)}))}static waitUntilTaskMatches(e,t,n,a=1e3,i){const r=Ze.defer();return e?t(e)?r.resolve(e):n&&n(e)?r.reject(e):e.poller=_e((()=>{this.getTask(e.id).then((s=>{this.updateTask(e,s),null==i||i.next(),this.waitUntilTaskMatches(e,t,n,a,i).then(r.resolve,r.reject)}))}),a):r.reject(null),r.promise}static waitUntilTaskCompletes(e,t=1e3,n){return this.waitUntilTaskMatches(e,(e=>e.isCompleted),(e=>e.isFailed),t,n)}static updateTask(e,t){t&&(e.status=t.status,e.variables=t.variables,e.steps=t.steps,e.endTime=t.endTime,e.execution=t.execution,e.history=t.history)}static setTaskProperties(e){Wc.defineProperties(e),e.steps&&e.steps.length&&e.steps.forEach((e=>Wc.defineProperties(e)))}}Kc.activeStatuses=["RUNNING","SUSPENDED","NOT_STARTED"];class qc{constructor(e){this.config=e,this.statusUpdatedStream=new At,this.closeModal=e=>{try{e&&e.stopPropagation(),this.modalInstance.dismiss()}catch(e){}},this.tryToFix=()=>{this.error=null,this.onTaskRetry&&this.onTaskRetry(),this.statusUpdatedStream.next()},this.submit=e=>{this.startSubmit(),(e||this.submitMethod)().then((e=>this.handleTaskSuccess(e))).catch((e=>this.setError(e)))},this.title=e.title,this.application=e.application,this.modalInstance=e.modalInstance,this.onTaskComplete=e.onTaskComplete,this.onTaskRetry=e.onTaskRetry,this.monitorInterval=e.monitorInterval||1e3,this.submitMethod=e.submitMethod,this.modalInstance&&this.modalInstance.result.then((()=>this.onModalClose()),(()=>this.onModalClose()))}static modalInstanceEmulation(e,t){const n=Ze.defer();return n.promise.catch((()=>{})),{deferred:n,result:n.promise,close:t=>(n.resolve(t),e(t)),dismiss:a=>(n.reject(a),(t||e)(a))}}onModalClose(){this.task&&this.task.poller&&_e.cancel(this.task.poller)}startSubmit(){this.submitting=!0,this.task=null,this.error=!1,this.errorMessage=null,document.activeElement&&document.activeElement.blur(),this.statusUpdatedStream.next()}setError(e){e?(this.task=e,this.errorMessage=e.failureMessage||"There was an unknown server error."):this.errorMessage="There was an unknown server error.",this.submitting=!1,this.error=!0,this.statusUpdatedStream.next()}handleTaskComplete(){var e;null==(e=this.onTaskComplete)||e.call(this),this.statusUpdatedStream.next()}handleTaskSuccess(e){this.task=e,this.application&&this.application.getDataSource("runningTasks")&&this.application.getDataSource("runningTasks").refresh(),Kc.waitUntilTaskCompletes(e,this.monitorInterval,this.statusUpdatedStream).then((()=>this.handleTaskComplete())).catch((()=>this.setError(e))),this.statusUpdatedStream.next()}callPreconfiguredSubmit(e){this.startSubmit(),this.submitMethod(e).then((e=>this.handleTaskSuccess(e))).catch((e=>this.setError(e)))}}class Xc extends ot.Component{render(){return ot.createElement("div",{className:"row",style:{marginTop:"10px",marginBottom:"10px"}},ot.createElement("div",{className:"col-md-3 sm-label-right"},"Reason"),ot.createElement("div",{className:"col-md-7"},ot.createElement("textarea",{className:"form-control",value:this.props.reason,onChange:e=>this.props.onChange(e.target.value),"ng-model":"vm.command.reason",rows:3,placeholder:"(Optional) anything that might be helpful to explain the reason for this change; HTML is okay"})))}}const Zc=[];const _c=new class{constructor(){this.api=Si,this.plugins={sharedLibraries:{}}}addInjectable(e){Zc.push(e)}};window&&(window.spinnaker=_c),window.spinnaker=_c;n("spinnaker.core.utils.consoleDebug",[]).run(["$injector",e=>{_c.$injector=e,Zc.forEach((t=>_c[t]=e.get(t)))}]);class ep{static postTaskCommand(e){return Si("/tasks").post(e)}static cancelTask(e){return Si("/tasks").path(e,"cancel").put().then((()=>Kc.getTask(e).then((e=>Kc.waitUntilTaskMatches(e,(e=>"CANCELED"===e.status))))))}}_c.TaskWriter=ep;class tp{static executeTask(e){const t=e.application||e.project||{name:"ad-hoc"};return e.application&&e.application.name&&(e.application=e.application.name),e.project&&e.project.name&&(e.project=e.project.name),"aws"===e.job[0].providerType&&delete e.job[0].providerType,e.job.forEach((e=>e.user=ri.getAuthenticatedUser().name)),ep.postTaskCommand(e).then((e=>{const n=e.ref.split("/").pop();return t.runningTasks&&t.runningTasks.refresh&&t.runningTasks.refresh(),Kc.getTask(n)}),(e=>{var t;const n=(null==(t=e.data)?void 0:t.message)||"Sorry, no more information.",a={status:e.status,message:e.statusText,log:n,failureMessage:n};return Ze.reject(a)}))}}class np extends ot.Component{constructor(e){super(e),this.close=()=>{this.props.dismissModal()},this.submitTask=e=>{const{application:t,description:n}=this.props,a=qc.modalInstanceEmulation((e=>this.props.closeModal(e)),(e=>this.props.dismissModal(e))),i=new qc({application:t,modalInstance:a,title:n,onTaskComplete:()=>t.serverGroups.refresh()}),r=this.props.mapValuesToTask(e);r.description=this.props.description;i.submit((()=>{const e=tp.executeTask(r),t=()=>this.setState({isSubmitting:!1});return e.then(t,t),e})),this.setState({taskMonitor:i,isSubmitting:!0})},this.state={taskMonitor:null,isSubmitting:!1}}render(){const{isSubmitting:e}=this.state;return ot.createElement("div",null,ot.createElement(jc,{monitor:this.state.taskMonitor}),ot.createElement(Gs,{initialValues:this.props.initialValues,onSubmit:this.submitTask,render:t=>ot.createElement(Vn,{className:"form-horizontal"},ot.createElement(Nc,{dismiss:this.close}),ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,this.props.title)),ot.createElement(qt.Body,{className:"entity-tag-editor-modal"},ot.createElement($s,{value:po},this.props.render(t))),ot.createElement(qt.Footer,null,ot.createElement("button",{className:"btn btn-default",disabled:e,onClick:this.close,type:"button"},"Cancel"),ot.createElement(Dc,{isDisabled:!t.isValid||e,submitting:e,isFormSubmit:!0,label:"Submit"})))}))}}const{useEffect:ap,useState:ip}=ot;function rp(e){const{label:t,account:n}=e,[a,i]=ip("");if(e.account&&e.expectedValue)throw new Error("Supply either the 'account' or the 'expectedValue' prop, but not both");const r=e.expectedValue||n,s=a===r,[o,l]=ip(!0);ap((()=>{n&&Di.challengeDestructiveActions(n).then(l)}),[n]);const c=n&&!o;ap((()=>e.onValidChange(c||s)),[s,c]);const p=ot.createElement(ot.Fragment,null,"Type the name of the account (",ot.createElement("span",{className:"verification-text"},r),") to continue"),d="form-control input-sm highlight-pristine "+(s?"":"ng-invalid");return c?null:ot.createElement("div",{className:"row verification user-verification"},ot.createElement("div",{className:"col-sm-12"},ot.createElement("div",{className:"form-inline"},ot.createElement("div",{className:"form-group"},ot.createElement("div",{className:"form-control-static"},t?ot.createElement(Sr,{tag:"span",message:t}):p)," ",ot.createElement(_s,{id:"user.verification"}),ot.createElement("input",{type:"text",className:d,value:a,onChange:e=>i(e.target.value)})))))}oi(".multi-task-monitor .overlay-modal-status {\n font-size: 90%;\n}\n.multi-task-monitor ul.task-progress {\n padding-left: 0;\n}\n");const sp=({monitors:e=[],title:t,closeModal:n})=>{const[a,i]=ot.useState(e.some((e=>e.error)));return e.some((e=>e.submitting||e.error))?ot.createElement("div",{className:"overlay overlay-modal multi-task-monitor"},ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,t)),ot.createElement(qt.Body,null,ot.createElement("div",{className:"clearfix"},e.map(((e,t)=>{var n,a;return ot.createElement("div",{className:"col-md-6 overlay-modal-status",key:`${null!=(a=null==(n=e.task)?void 0:n.id)?a:t}`},ot.createElement("h4",null,e.title),ot.createElement(Gc,{monitor:e}),ot.createElement(Pc,{task:e.task,errorMessage:e.errorMessage}))})))),ot.createElement(qt.Footer,null,!a&&ot.createElement("button",{className:"btn btn-primary",onClick:n},"Close"),a&&ot.createElement(ot.Fragment,null,ot.createElement("button",{className:"btn btn-primary",onClick:()=>{e.forEach((e=>e.error=null)),i(!1)}},"Go back and try to fix this"),ot.createElement("button",{className:"btn btn-default",onClick:n},"Cancel")))):null},op=e=>{const{account:t,verificationLabel:n,textToVerify:a,taskMonitor:i,taskMonitors:r,closeModal:s,dismissModal:o}=e,{useState:l,useEffect:c}=ot,[p,d]=l(!1),[u,m]=l(!1),[g,h]=l(!t&&!n&&!a),[f,v]=l({isError:!1}),[A,E]=l(),[b,y]=l();rl((()=>o())),c((()=>{if(i&&!i.modalInstance&&(i.modalInstance=qc.modalInstanceEmulation(s,o)),null==i?void 0:i.onTaskRetry){const{onTaskRetry:e}=i;i.onTaskRetry=()=>{m(!0),d(!1),e()}}}),[i]);const C=t||n&&a,w=p||!g,x=e=>{v({isError:!0,message:e}),d(!1)},k=(i||r)&&e.askForReason||e.submitJustWithReason,B=u&&e.retryBody||e.bodyContent||f.isError||e.platformHealthOnlyShowOverride||e.askForReason||e.submitJustWithReason;return ot.createElement("div",null,ot.createElement(jc,{monitor:i}),ot.createElement(sp,{monitors:r,title:e.multiTaskTitle,closeModal:()=>o({source:"taskmonitor"})}),ot.createElement(Nc,{dismiss:()=>o({source:"header"})}),ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,e.header)),B&&ot.createElement(qt.Body,null,e.bodyContent,e.platformHealthOnlyShowOverride&&ot.createElement(Sc,{interestingHealthProviderNames:b,showHelpDetails:!0,platformHealthType:e.platformHealthType,onChange:y}),f.isError&&ot.createElement("div",{className:"alert alert-danger"},ot.createElement("h4",null,"An error occurred:"),ot.createElement("p",null,f.message||"No details provided.")),u&&e.retryBody&&ot.createElement(Sr,{message:e.retryBody}),k&&ot.createElement(Xc,{reason:A,onChange:E})),ot.createElement(qt.Footer,null,!p&&C&&ot.createElement(rp,{onValidChange:h,account:t,expectedValue:a,label:n}),ot.createElement("button",{className:"btn btn-default",type:"button",onClick:()=>o({source:"footer"})},e.cancelButtonText),ot.createElement("button",{className:"btn btn-primary",type:"button",onClick:()=>{const{submitMethod:t,submitJustWithReason:n}=e;w||(d(!0),r?r.forEach((e=>e.callPreconfiguredSubmit({reason:A}))):i?i.submit((()=>t({interestingHealthProviderNames:b,reason:A}))):n?t({reason:A}).then(s,x):t?t().then(s,x):s())},disabled:w},p&&ot.createElement(bs,{mode:"circular"}),e.buttonText)))};class lp{static confirm(e){const t={...this.defaults,...e};e.body&&(t.bodyContent=Mr(e.body));const{taskMonitorConfig:n,taskMonitorConfigs:a}=e;n&&(t.taskMonitor=new qc(n)),a&&(t.taskMonitors=a.map((e=>new qc(e))));const{promise:i,resolve:r,reject:s}=Ze.defer();return si.show(op,t).then(r,s),i.catch((()=>{})),i}}lp.defaults={buttonText:"Confirm",cancelButtonText:"Cancel"};class cp{constructor(){this.builders={}}register(e,t){this.builders[e]=t}getBuilder(e){return this.builders[e]}}class pp extends ot.Component{constructor(e){super(e),this.cancel=()=>{this.props.dismissModal()},this.selectProvider=()=>{this.props.closeModal(this.state.selectedProvider)},this.state={}}static show(e){return si.show(pp,e,{})}setProvider(e){this.setState({selectedProvider:e})}render(){const{selectedProvider:e}=this.state,{providerOptions:t}=this.props;return ot.createElement(ot.Fragment,null,ot.createElement(Nc,{dismiss:this.cancel}),ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,"Select Your Provider")),ot.createElement(qt.Body,null,ot.createElement("div",{className:"card-choices"},t.map((t=>ot.createElement("div",{className:`card vertical center middle ${e===t&&"active"}`,key:t,onClick:()=>this.setProvider(t)},Ni.hasValue(t,"logo.path")&&ot.createElement("img",{src:Ni.getValue(t,"logo.path"),alt:t,width:"100%",height:"auto"}),!Ni.hasValue(t,"logo.path")&&ot.createElement("h3",{className:"card-label"},t)))))),ot.createElement(qt.Footer,null,ot.createElement("button",{className:"btn btn-default",onClick:this.cancel},"Cancel"),ot.createElement("button",{className:"btn btn-primary",onClick:this.selectProvider,disabled:!e},"Next")))}}class dp{static selectProvider(e,t,n){return Di.applicationAccounts(e).then((a=>{let i=[];t&&(i=a.filter((e=>Ni.hasValue(e.cloudProvider,t)))),n&&(i=i.filter((t=>n(e,t,Ni.getProvider(t.cloudProvider)))));const r=f(i.filter((e=>!Ni.isDisabled(e.cloudProvider))).map((e=>(Ni.getProvider(e.cloudProvider)[t]||{}).useProvider||e.cloudProvider)));let s;return r.length>1?pp.show({providerOptions:r}):(s=1===r.length?Ze.when(r[0]):Ze.when(di.defaultProvider||"aws"),s)}))}static isDisabled(e){return Di.applicationAccounts(e).then((e=>{let t=!1;return 0===e.filter((e=>!Ni.isDisabled(e.cloudProvider))).length&&(t=!0),t}))}}class up extends ot.Component{constructor(e){super(e),this.state={label:this.getProviderLabel(e.provider)}}getProviderLabel(e){return Ni.getValue(e,"name")||e}componentWillReceiveProps(e){this.setState({label:this.getProviderLabel(e.provider)})}render(){return ot.createElement("span",null,this.state.label)}}oi(".cloud-provider-logo {\n display: inline-block;\n margin-right: 3px;\n}\n.cloud-provider-logo .icon {\n display: inline-block;\n vertical-align: sub;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-position: 50% 50%;\n mask-position: 50% 50%;\n -webkit-mask-size: cover;\n mask-size: cover;\n background-color: var(--color-success);\n}\n.cloud-provider-logo svg {\n fill: var(--color-success);\n}\n.disabled .cloud-provider-logo .icon {\n background-color: var(--color-dovegray);\n}\n.disabled .cloud-provider-logo svg {\n fill: var(--color-success);\n}\n.header-text .cloud-provider-logo {\n margin-right: 10px;\n}\n");const mp=({height:e,provider:t,showTooltip:n,width:a})=>{const[i,r]=ot.useState(void 0),s=Ni.getValue(t,"cloudProviderLogo");ot.useEffect((()=>{n&&r(Ni.getValue(t,"name")||t)}),[n]);const o=s?ot.createElement(s,{height:e,width:a}):ot.createElement("span",{className:`icon icon-${t}`,style:{height:e,width:a}});return i?ot.createElement(Ps,{value:i},o):ot.createElement("span",{className:"cloud-provider-logo"},o)};class gp{constructor(e,t){this.$injector=e,this.$q=t}hasDelegate(e,t){const n=Ni.getValue(e,t);return P(n)||C(n)&&this.$injector.has(n)}getDelegate(e,t){const n=Ni.getValue(e,t);if(C(n)&&this.$injector.has(n))return this.$injector.get(n,"providerDelegate");if(P(n))return new n(this.$q);throw new Error('No "'+t+'" service found for provider "'+e+'"')}}gp.$inject=["$injector","$q"];const hp="spinnaker.core.cloudProvider.service.delegate";n(hp,[]).service("providerServiceDelegate",gp);const fp={list:()=>Si("/jobs/preconfigured").useCache().get()},vp={BITBUCKET_FILE:/bitbucket\/file/,CUSTOM_OBJECT:/custom\/object/,DOCKER_IMAGE:/docker\/image/,EMBEDDED_BASE64:/embedded\/base64/,GCS_OBJECT:/gcs\/object/,GITHUB_FILE:/github\/file/,GIT_REPO:/git\/repo/,GITLAB_FILE:/gitlab\/file/,GCE_MACHINE_IMAGE:/gce\/image/,JENKINS_FILE:/jenkins\/file/,KUBERNETES:/kubernetes\/(.*)/,S3_OBJECT:/s3\/object/,HELM_CHART:/helm\/chart/,IVY_FILE:/ivy\/file/,MAVEN_FILE:/maven\/file/,HTTP_FILE:/http\/file/,FRONT50_PIPELINE_TEMPLATE:/front50\/pipelineTemplate/,ORACLE_OBJECT:/oracle\/object/},Ap=(...e)=>Object.keys(vp).map((e=>vp[e])).filter((t=>!e.includes(t)));class Ep extends ot.Component{constructor(e,t){if(super(e),this.onVersionChange=e=>{const t=p(this.props.artifact);t.version=e,this.props.onChange(t)},e.artifact.type!==t&&"custom-artifact"!==e.artifact.artifactAccount){const n=p(e.artifact);n.type=t,n.customKind=!1,e.onChange(n)}}}const bp=e=>e.current===e.name?ot.createElement("div",{className:"step-section-details"},e.children):null;class yp extends ot.Component{render(){const e=m(this.props.stage,"context.execution.logs");return e?ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-12"},ot.createElement("div",{className:"well alert alert-info"},ot.createElement("a",{target:"_blank",href:e},"View Execution Logs")))):null}}class Cp{static observe(e){return this.message$.pipe(Tt((t=>t.key===e)),St((e=>e.payload)))}static publish(e,t){this.message$.next({key:e,payload:t})}}Cp.message$=new At;var wp,xp=Object.defineProperty,kp=Object.getOwnPropertyDescriptor;(wp||(wp={})).NO_REASON_PROVIDED="No reason provided.";let Bp=class extends ot.Component{constructor(e){super(e),this.state=this.getState(e)}getState(e){const{stage:t}=e;if(t&&(t.isFailed||t.isStopped)){const n=(t.tasks||[]).find((e=>"TERMINAL"===e.status||"STOPPED"===e.status));let a,i,r=t.name;if(!n||!e.message&&0===e.messages.length){const e=m(t.context,"exception.source");if(e)r=e.stageName,a=e.executionId,i=e.stageId;else if(t.after){const e=t.after.find((e=>"TERMINAL"===e.status||"STOPPED"===e.status));e&&(r=yr(e.name),i=e.id)}}return{isFailed:!0,failedTask:n,failedExecutionId:a,failedStageName:r,failedStageId:i}}return{failedTask:void 0,isFailed:!1}}componentWillReceiveProps(e){this.setState(this.getState(e))}render(){var e,t;const{message:n,messages:a,stage:i}=this.props,{isFailed:r,failedTask:s,failedExecutionId:o,failedStageName:l,failedStageId:c}=this.state;let p=n&&!a.length?[n]:a;if(p.length>0){const d=r?a.length?"Exceptions":"Exception":"Warning";if((r&&!(null==(e=i.context)?void 0:e.failOnFailedExpressions)||(null==(t=i.context)?void 0:t.skipExpressionEvaluation))&&(p=p.filter((e=>!e.startsWith("Failed to evaluate"))),0===p.length))return null;const u=p.map(((e,t)=>ot.createElement(Sr,{key:t,message:e||wp.NO_REASON_PROVIDED,className:"break-word"})));if(u)return ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-12"},ot.createElement("div",{className:"alert "+("Warning"===d?"alert-warning":"alert-danger")},ot.createElement("div",null,ot.createElement("h5",null,d," ",s&&ot.createElement("span",null,"( ",yr(s.name)," )")),u,ot.createElement(Qc,{errorMessage:n||a.join(",")})))));if(void 0!==c){const e=hi.$state.current,t={stageId:c};return void 0!==o&&(t.executionId=o),ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-12"},ot.createElement("div",{className:"alert alert-danger"},ot.createElement("div",null,"Stage"," ",ot.createElement(Dn,{to:e.name,params:t},ot.createElement("a",null,l))," ","failed."))))}Cp.publish("stage-failure-message:no-reason",{params:{...hi.$state.params}})}return null}};function Sp(e){const{action:t,stage:n}=e;return ot.createElement(bp,{name:e.name,current:e.current},ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-9"},ot.createElement("dl",{className:"dl-narrow dl-horizontal"},ot.createElement("dt",null,"Account"),ot.createElement("dd",null,ot.createElement(ns,{account:n.context.credentials})),ot.createElement("dt",null,"Region"),ot.createElement("dd",null,n.context.region),ot.createElement("dt",null,"Server Group"),ot.createElement("dd",null,n.context.serverGroupName)))),ot.createElement(Bp,{stage:n,message:n.failureMessage}),n.isCompleted&&n.context.serverGroupName&&ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-12"},ot.createElement("div",{className:"well alert alert-info"},ot.createElement("strong",null,t,": "),n.context.serverGroupName))),ot.createElement(yp,{stage:n}))}Bp.defaultProps={messages:[]},Bp=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?kp(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&xp(t,n,r),r})([na],Bp);const Mp=[{key:"sunday",label:"Sun",ordinal:1},{key:"monday",label:"Mon",ordinal:2},{key:"tuesday",label:"Tue",ordinal:3},{key:"wednesday",label:"Wed",ordinal:4},{key:"thursday",label:"Thu",ordinal:5},{key:"friday",label:"Fri",ordinal:6},{key:"saturday",label:"Sat",ordinal:7}],Np="The pipeline will proceed immediately, continuing to the next step in the stage.";class Dp extends ot.Component{constructor(e){var t;super(e),this.finishWaiting=e=>{const{executionService:t}=hi;e.target.blur();const{application:n,execution:a,stage:i}=this.props,r=e=>"RUNNING"!==e.stages.find((e=>e.id===i.id)).status,s={skipRemainingWait:!0};lp.confirm({header:"Really skip execution window?",buttonText:"Skip",body:i.context.skipWindowText||`<p>${Np}</p>`,submitMethod:()=>t.patchExecution(a.id,i.id,s).then((()=>t.waitUntilExecutionMatches(a.id,r))).then((e=>t.updateExecution(n,e)))})};const n=null==(t=e.stage.context.restrictedExecutionWindow)?void 0:t.days;let a="Everyday";n&&n.length>0&&(a=this.replaceDays(n).join(", ")),this.state={dayText:a}}replaceDays(e){const t=new Set(e);return Mp.filter((e=>t.has(e.ordinal))).map((e=>e.label))}render(){const{stage:e}=this.props;return ot.createElement("div",null,ot.createElement("h5",null,"Execution Windows Configuration"),ot.createElement("strong",null,"Stage execution can only run:"),ot.createElement("dl",{className:"dl-narrow dl-horizontal"},m(e,"context.restrictedExecutionWindow.whitelist",[]).map(((e,t)=>ot.createElement("div",{key:t},ot.createElement("dt",null,"From"),ot.createElement("dd",null,or({hours:e.startHour,minutes:e.startMin}),ot.createElement("strong",{style:{display:"inline-block",margin:"0 5px"}}," to "),or({hours:e.endHour,minutes:e.endMin}),ot.createElement("strong",null," ",ot.createElement(tr,null)," "))))),ot.createElement("dt",null,"On"),ot.createElement("dd",null,this.state.dayText)),e.context.skipRemainingWait&&ot.createElement("div",null,ot.createElement("span",null,"(skipped "),e.context.lastModifiedBy&&ot.createElement("span",null," by ",e.context.lastModifiedBy),")"),e.isSuspended&&ot.createElement("div",{className:"action-buttons"},ot.createElement("button",{className:"btn btn-xs btn-primary",onClick:this.finishWaiting},ot.createElement("span",{style:{marginRight:"5px"},className:"small glyphicon glyphicon-fast-forward"}),"Skip remaining window")))}}const Ip=({stage:e,execution:t,application:n})=>{const{conditions:a}=e.outputs;return ot.createElement("div",null,ot.createElement("div",null,a&&a.length>0&&ot.createElement("ul",{className:"nostyle",style:{marginBottom:"10px"}},a.map((({name:e,description:t},n)=>ot.createElement("li",{key:e+n},ot.createElement("b",null,e),": ",t)))),"SKIPPED"===e.context.status&&ot.createElement("span",null,"(skipped after ",ar(e.runningTimeInMs),")")),e.isSuspended&&ot.createElement("div",{className:"action-buttons"},ot.createElement("button",{className:"btn btn-xs btn-primary",onClick:a=>((e,t,n,a)=>{const{executionService:i}=hi;e.target.blur();const r=({stages:e})=>"RUNNING"!==e.find((e=>e.id===t.id)).status,s={status:"SKIPPED"};lp.confirm({header:"Really skip wait?",buttonText:"Skip",body:t.context.skipWaitText||"The pipeline will proceed immediately, marking this stage completed.",submitMethod:()=>i.patchExecution(n.id,t.id,s).then((()=>i.waitUntilExecutionMatches(n.id,r))).then((e=>i.updateExecution(a,e)))})})(a,e,t,n)},ot.createElement("span",{style:{marginRight:"5px"},className:"small glyphicon glyphicon-fast-forward"}),"Skip remaining wait")))};class Fp extends ot.Component{constructor(e){super(e),this.mounted=!1,this.hydrate=()=>{const{application:e,execution:t}=this.props;this.requiresHydration()&&t&&hi.executionService.hydrate(e,t).then((()=>{this.mounted&&!this.state.hydrated&&this.setState({hydrated:!0})}))},this.requiresHydration=()=>{const{stage:e}=this.props,{suspendedStageTypes:t}=e;return e.labelComponent!==Fp||["restrictExecutionDuringTimeWindow","waitForCondition"].some((e=>t.has(e)))},this.DefaultLabel=()=>{const{stage:e,application:t,execution:n}=this.props,a=e.labelComponent,i=ot.createElement(Zt,{id:e.id},ot.createElement(a,{application:t,execution:n,stage:e}));return ot.createElement(Xt,{placement:"top",overlay:i},this.props.children)},this.getExecutionWindowTemplate=()=>{const{stage:e,application:t,execution:n}=this.props,a=e.stages.find((e=>"restrictExecutionDuringTimeWindow"===e.type));return ot.createElement("div",null,ot.createElement("div",null,ot.createElement("b",null,e.name)," (waiting for execution window)"),ot.createElement(Dp,{application:t,execution:n,stage:a}))},this.getWaitForConditionTemplate=()=>{const{stage:e,application:t,execution:n}=this.props,a=e.stages.find((e=>"waitForCondition"===e.type));return ot.createElement("div",null,ot.createElement("p",null,ot.createElement("b",null,e.name)," (waiting until conditions are met)"),"Conditions:",ot.createElement(Ip,{application:t,execution:n,stage:a}))},this.state={hydrated:e.execution&&e.execution.hydrated}}componentDidMount(){this.mounted=!0}componentWillUnmount(){this.mounted=!1}getRenderableStageName(){const{stage:e}=this.props;let t=e.name?e.name:e.type;const n=hi.$uiRouter.globals.params;if("group"===e.type&&e.groupStages&&e.index===Number(n.stage)){const a=Number(n.subStage);if(!Number.isNaN(a)){const n=e.groupStages[a];n&&(t+=`: ${n.name}`)}}return t}render(){const{stage:e,executionMarker:t}=this.props,{suspendedStageTypes:n}=e,{getExecutionWindowTemplate:a,getWaitForConditionTemplate:i,DefaultLabel:r}=this;if(t){let e=null;return this.requiresHydration()&&!this.state.hydrated?e=ot.createElement(bs,{size:"small"}):n.has("restrictExecutionDuringTimeWindow")?e=a():n.has("waitForCondition")&&(e=i()),e?ot.createElement("span",{onMouseEnter:this.hydrate},ot.createElement(qs,{template:e},this.props.children)):ot.createElement(r,null)}return ot.createElement("span",null,this.getRenderableStageName())}}const Tp=["RUNNING","SUSPENDED"];class Qp{constructor(e,t){this.item=e,this.updateCallback=t,this.checkStatus()}checkStatus(e=this.item){e&&e!==this.item&&(this.item=e),Tp.includes(this.item.status)||(this.reset(),this.updateCallback(this.item.runningTimeInMs)),Tp.includes(this.item.status)&&!this.updateInterval&&(this.updateInterval=setInterval((()=>this.updateCallback(Date.now()-this.item.startTime)),1e3),this.updateCallback(Date.now()-this.item.startTime))}reset(){this.updateInterval&&(clearInterval(this.updateInterval),this.updateInterval=void 0)}}class Pp extends ot.Component{componentWillUnmount(){this.runningTime&&this.runningTime.reset()}componentDidMount(){const{item:e}=this.props,t=(e.tasks||[]).find((e=>"RUNNING"===e.status));t&&(this.runningTime=new Qp(t,(e=>this.setState({runningTimeInMs:e}))))}render(){const{item:e}=this.props;return ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-9"},ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-9"},ot.createElement("strong",null,"Task")),ot.createElement("div",{className:"col-md-3 text-right"},ot.createElement("strong",null,"Duration"))),Uc(e.tasks||[]).map(((e,t)=>ot.createElement("div",{key:t,className:"row"},ot.createElement("div",{className:"col-md-9"},ot.createElement("span",{className:"small"},ot.createElement(Rc,{item:e}))," ",yr(e.name)),ot.createElement("div",{className:"col-md-3 text-right"},ar(e.runningTimeInMs)))))))}}function Rp(e){return ot.createElement(bp,{name:e.name,current:e.current},ot.createElement(Pp,{item:e.stage}))}(Rp||(Rp={})).title="taskStatus";const Up=({stage:e})=>e.isSuspended||e.suspendedStageTypes.size>0?ot.createElement("span",{className:"far fa-clock sp-margin-xs-right"}):null,zp=e=>ot.createElement("div",{className:null!=e.groupClassName?e.groupClassName:"form-group"},ot.createElement("label",{className:`col-md-${e.labelColumns||3} sm-label-right`},ot.createElement("span",{className:"label-text"},e.label," "),e.helpKey&&ot.createElement(_s,{id:e.helpKey})),ot.createElement("div",{className:`col-md-${e.fieldColumns||8}`},e.children)),Gp=(e,t)=>{const n=e.stages.filter((e=>e.type===t&&"RUNNING"===e.status));if(n.forEach((e=>{e.status="SUSPENDED",e.tasks.forEach((function(e){e.status="SUSPENDED"}))})),n.length>0&&"RUNNING"===e.status){e.stages.some((e=>"RUNNING"===e.status))||(e.status="SUSPENDED")}};class jp{static convertJsonKeysToBracketedList(e,t=[]){const n=[],a=[],i=[];for(n.push(e);0!==n.length;){const e=n.pop(),r=Object.keys(e),s=i.pop()||"";this.processKeys(r,e,i,s,n,a,t)}return a}static escapeForRegEx(e){return e?e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"):null}static processKeys(e,t,n,a,i,r,s){e.forEach((e=>{const o=isFinite(parseInt(e,10))?`${a}[${parseInt(e,10)}]`:`${a}['${e}']`,l=t[e];j(l)||Array.isArray(l)||s.some((e=>{const t=`['${e}`;return o.substr(0,t.length)===t}))||r.push({leaf:o,value:l}),j(t[e])&&(n.push(o),i.push(t[e]))}))}}class Lp{constructor(e,t){this.$q=e,this.executionService=t,this.executionCache={},this.brackets=[{open:"(",close:")"},{open:"[",close:"]"}],this.quotes=[{open:"'",close:"'"},{open:'"',close:'"'}],this.helperFunctions=["alphanumerical","readJson","fromUrl","propertiesFromUrl","jsonFromUrl","judgment","stage","toBoolean","toFloat","toInt","toJson","toBase64","fromBase64","cfServiceKey"],this.helperParams=["execution","parameters","trigger","scmInfo","scmInfo.sha1","scmInfo.branch","deployedServerGroups"],this.codedHelperParams=this.helperParams.map((e=>({name:e,type:"param"}))),this.textcompleteConfig=[{id:"SpEL wrapper",match:/\$(\w*)$/,search:function(e,t){t(["${...}"])},index:1,replace:function(){return["${ "," }"]}},{id:"match quotes",match:/(["'])(\w*)$/,index:1,search:(e,t)=>{t(this.quotes.filter((t=>0===t.open.indexOf(e))))},template:function(){return"'...'"},replace:function(){return["'","'"]}},{id:"match brackets",match:/([[('])(\w*)$/,index:1,search:(e,t)=>{t(this.brackets.filter((t=>0===t.open.indexOf(e))))},template:e=>`${e.open}...${e.close}`,replace:e=>[`${e.open} `,` ${e.close}`]}]}paramInList(e){return t=>e.name===t.name}addToTextcompleteConfig(e,t){const n=t.slice(0);for(const a of e)0===t.filter((e=>e.id===a.id)).length&&n.push(a);return n}listSearchFn(e){return(t,n)=>{n(e.filter((e=>{if(e.leaf.includes(t))return e})))}}leafTemplateFn(e){return`${e.leaf} <span class="glyphicon glyphicon-triangle-right spel-value-separator"/> <span class="marker value"\n title="${e.value}">${e.value.length>90?`${e.value.slice(0,90)}...`:e.value}</span>`}addExecutionForAutocomplete(e,t){if(e){const n=jp.convertJsonKeysToBracketedList(e,["task"]),a=[{id:`execution: ${e.id}`,match:/execution(\w*|\s*)$/,index:1,search:this.listSearchFn(n),template:this.leafTemplateFn,replace:e=>`execution${e.leaf}`}];return this.addToTextcompleteConfig(a,t)}return t}addDeployedServerGroupsForAutoComplete(e,t){if(e&&e.context&&e.context.deploymentDetails){const n=jp.convertJsonKeysToBracketedList(e.context.deploymentDetails),a=[{id:`deploymentServerGroups: ${e.id}`,match:/deployedServerGroups(\w*|\s*)$/,index:1,search:this.listSearchFn(n),template:this.leafTemplateFn,replace:e=>`deployedServerGroups${e.leaf}`}];return this.addToTextcompleteConfig(a,t)}return t}addStageDataForAutocomplete(e,t){if(e&&e.stages){const n=e.stages.map((e=>{const t=jp.convertJsonKeysToBracketedList(e,["task"]);return{id:`stage config for ${e.name}`,match:new RegExp(`#stage\\(\\s*'${jp.escapeForRegEx(e.name)}'\\s*\\)(.*)$`),index:1,search:this.listSearchFn(t),template:this.leafTemplateFn,replace:t=>`#stage('${e.name}')${t.leaf}`}}));return this.addToTextcompleteConfig(n,t)}return t}addManualJudgementConfigForAutocomplete(e,t){if(e&&e.stages){const n=e.stages.filter((e=>"manualJudgment"===e.type)).map((e=>{const t=jp.convertJsonKeysToBracketedList(e);return{id:`judgement config for ${e.name}`,match:new RegExp(`#judgment\\(\\s*'\\s*${jp.escapeForRegEx(e.name)}'\\s*\\)(.*)$`),index:1,search:this.listSearchFn(t),template:this.leafTemplateFn,replace:t=>`#judgement('${e.name}')${t.leaf}`}}));return this.addToTextcompleteConfig(n,t)}return t}addTriggerConfigForAutocomplete(e,t){if(e&&e.trigger){const n=[e.trigger].map((e=>{const t=jp.convertJsonKeysToBracketedList(e);return{id:`trigger config: ${e.type}`,match:/trigger(\w*|\s*)$/,index:1,search:this.listSearchFn(t),template:this.leafTemplateFn,replace:e=>`trigger${e.leaf}`}}));return this.addToTextcompleteConfig(n,t)}return t}addParameterConfigForAutocomplete(e,t){if(e&&e.parameterConfig){const n=[e.parameterConfig].map((e=>{const t=jp.convertJsonKeysToBracketedList(e);return{id:`parameter config: ${Object.keys(e).join(",")}`,match:/parameters(\w*|\s*)$/,index:1,search:this.listSearchFn(t),template:this.leafTemplateFn,replace:e=>`parameters${e.leaf}`}}));return this.addToTextcompleteConfig(n,t)}return t}hasBuildTriggerOrStage(e,...t){return t.some((t=>e.triggers&&e.triggers.some((e=>e.type===t))||e.stages.some((e=>e.type===t))))}addStageNamesToCodeHelperList(e,t){if(e&&e.stages){let n=this.codedHelperParams.slice(0);const a=e.parameterConfig&&e.parameterConfig.length;n=a?n:n.filter((e=>"parameters"!==e.name)),n=this.hasBuildTriggerOrStage(e,"jenkins","concourse")?n:n.filter((e=>!e.name.includes("scmInfo"))),e.stages.forEach((e=>{const t={name:e.name,type:e.type};0===n.filter(this.paramInList(t)).length&&n.push({name:e.name,type:"stage"})}));const i=[{id:"params",match:/(\s*|\w*)\?(\s*|\w*|')$/,index:2,search:(e,t)=>{t(n.filter((t=>t.name.includes(e)||t.type.includes(e))))},template:e=>`<span class="marker ${e.type}"/> ${e.name}`,replace:e=>`${e.name}`}];return this.addToTextcompleteConfig(i,t)}return t}addHelperFunctionsBasedOnStages(e,t){if(e&&e.stages){let n=this.helperFunctions.slice(0);e.stages.some((e=>"manualJudgment"===e.type))||(n=this.helperFunctions.filter((e=>"judgment"!==e)));e.stages.some((e=>"createServiceKey"===e.type))||(n=this.helperFunctions.filter((e=>"cfServiceKey"!==e)));const a=[{id:"helper functions",match:/#([\w.]*)$/,index:1,search:(e,t)=>{t(n.filter((t=>t.startsWith(e))))},template:e=>`<span class="marker function"/> #${e}`,replace:e=>"toJson"===e?[`#${e}(`,")"]:[`#${e}( '`,"' )"]}];return this.addToTextcompleteConfig(a,t)}return t}getLastExecutionByPipelineConfig(e){return this.executionCache[e.id]?this.$q.when(this.executionCache[e.id]):this.executionService.getLastExecutionForApplicationByConfigId(e.application,e.id).then((t=>t?(this.executionCache[e.id]=t,t):null))}buildTextCompleteConfig(e){return this.addStageNamesToCodeHelperList(e,this.addStageDataForAutocomplete(e,this.addManualJudgementConfigForAutocomplete(e,this.addTriggerConfigForAutocomplete(e,this.addParameterConfigForAutocomplete(e,this.addHelperFunctionsBasedOnStages(e,this.addExecutionForAutocomplete(e,this.addDeployedServerGroupsForAutoComplete(e,this.textcompleteConfig.slice(0)))))))))}addPipelineInfo(e){return e&&e.id?this.getLastExecutionByPipelineConfig(e).then((t=>t||e)).then((e=>this.buildTextCompleteConfig(e))):this.$q.when(this.textcompleteConfig)}}const Op=class{static addDeploymentTargets(e){const t=[];e.stages.forEach((e=>{const n=$m.pipeline.getStageConfig(e);n&&n.accountExtractor&&t.push(...n.accountExtractor(e))})),e.deploymentTargets=f(t).filter((e=>!!e)).sort()}static siblingStageSorter(e,t){return e.startTime||t.startTime?e.startTime?t.startTime?e.startTime-t.startTime:-1:1:0}static flattenStages(e,t){const n=t;return n.groupStages?(n.groupStages.forEach((t=>this.flattenStages(e,t))),e):(t.before&&t.before.length&&(t.before.sort(((e,t)=>this.siblingStageSorter(e,t))),t.before.forEach((t=>this.flattenStages(e,t)))),t.masterStage?e.push(t.masterStage):e.push(t),t.after&&t.after.length&&(t.after.sort(((e,t)=>this.siblingStageSorter(e,t))),t.after.forEach((t=>this.flattenStages(e,t)))),e)}static flattenAndFilter(e){return this.flattenStages([],e).filter((e=>e.isFailed||!this.hiddenStageTypes.includes(e.type)&&!0!==e.initializationStage))}static getCurrentStages(e){const t=e.stageSummaries.filter((e=>e.isRunning));if(!t.length){const n=e.stageSummaries.find((e=>e.hasNotStarted));n&&t.push(n)}return t}static setMasterStageStartTime(e,t){const n=e.filter((e=>e.startTime)).map((e=>e.startTime));n.length&&(t.startTime=Math.min(...n))}static getCurrentStage(e){const t=e[e.length-1],n=L(e,(e=>e.hasNotStarted)),a=L(e,(e=>e.isFailed)),i=L(e,(e=>e.isRunning)),r=L(e,(e=>e.isCanceled)),s=L(e,(e=>e.isStopped));return i||a||s||r||n||t}static cleanupLockStages(e){const t=(e,t)=>{let n=!1;return t.filter((t=>{if(t.type===e){if(n)return!1;n=!0}return!0}))};return t("releaseLock",t("acquireLock",e).reverse()).reverse()}static transformStage(e){const t=this.cleanupLockStages(this.flattenAndFilter(e));if(t.length){if(e.masterStage){this.setMasterStageStartTime(t,e);const n=this.getCurrentStage(t);e.status=n.status,n.endTime||delete e.endTime;const a=O(t,"endTime");n.endTime&&a.endTime&&(e.endTime=Math.max(n.endTime,a.endTime,e.endTime))}e.stages=t}}static cleanRequisiteStageRefIds(e,t){const{stages:n}=e;n.forEach((e=>{e.context&&e.context.requisiteIds&&(e.context.requisiteIds=f(e.context.requisiteIds)),e.requisiteStageRefIds=f(e.requisiteStageRefIds||[]),e.requisiteStageRefIds=e.requisiteStageRefIds.filter((e=>!!t[e]))}))}static getStagesMappedByRefId(e){const t={};return e.stages.forEach((e=>t[e.refId]=e)),t}static applyPhasesAndLink(e,t){const n=e.stages;let a=!0;n.forEach((e=>{let n=!0,i=0;void 0!==e.phase||e.requisiteStageRefIds.length?(e.requisiteStageRefIds.forEach((e=>{const a=t[e];a&&void 0!==a.phase?i=Math.max(i,a.phase):n=!1})),n?e.phase=i+1:a=!1):e.phase=i})),e.stages=Y(n,"phase","refId"),a||this.applyPhasesAndLink(e,t)}static addStageWidths(e){e.stageWidth=100/e.stageSummaries.length+"%"}static styleStage(e,t){t=t||e;const n=$m.pipeline.getStageConfig(t);n&&(e.labelComponent=n.executionLabelComponent||Fp,e.markerIcon=n.markerIcon||Up,e.useCustomTooltip=!!n.useCustomTooltip,e.extraLabelLines=n.extraLabelLines)}static findNearestBuildInfo(e){return H(e,"trigger.buildInfo.number")?e.trigger.buildInfo:H(e,"trigger.parentExecution")?this.findNearestBuildInfo(e.trigger.parentExecution):null}static addBuildInfo(e){e.buildInfo=this.findNearestBuildInfo(e),H(e,"trigger.buildInfo.lastBuild.number")&&(e.buildInfo=e.trigger.buildInfo.lastBuild);const t=e.stages.find((e=>"deploy"===e.type)),n=m(t,"context.deploymentDetails")||m(e,"context.deploymentDetails");if(n&&n.length&&n[0].jenkins){const t=n[0].jenkins;e.buildInfo={number:t.number,url:n[0].buildInfoUrl||`${t.host}job/${t.name}/${t.number}`}}}static transformStageSummary(e,t){e.index=t,e.stages=this.flattenAndFilter(e),e.stages.forEach((e=>delete e.stages)),e.masterStageIndex=e.stages.includes(e.masterStage)?e.stages.indexOf(e.masterStage):0,this.filterStages(e),this.setFirstActiveStage(e),this.setSuspendedStageTypes(e),this.transformStage(e),this.styleStage(e),Wc.defineProperties(e),"group"===e.type&&e.groupStages.forEach(((e,t)=>this.transformStageSummary(e,t)))}static filterStages(e){const t=$m.pipeline.getStageConfig(e.masterStage);t&&t.stageFilter&&(e.stages=e.stages.filter((e=>t.stageFilter(e))))}static setSuspendedStageTypes(e){e.suspendedStageTypes=new Set(e.stages.filter((({isSuspended:e})=>e)).map((({type:e})=>e)))}static setFirstActiveStage(e){e.firstActiveStage=0;const t=e.stages||[];t.find((e=>e.isRunning))&&(e.firstActiveStage=t.findIndex((e=>e.isRunning))),t.find((e=>e.isFailed))&&(e.firstActiveStage=t.findIndex((e=>e.isFailed))),t.find((e=>e.isFailed&&!!e.failureMessage))&&(e.firstActiveStage=t.findIndex((e=>e.isFailed&&!!e.failureMessage)))}static transformExecution(e,t){t.trigger&&(t.isStrategy=!1===t.trigger.isPipeline&&"pipeline"===t.trigger.type);const n=this.getStagesMappedByRefId(t);this.cleanRequisiteStageRefIds(t,n),this.applyPhasesAndLink(t,n),$m.pipeline.getExecutionTransformers().forEach((n=>{n.transform(e,t)})),t.context=t.context||{},t.stages.forEach(((e,t)=>{e.before=e.before||[],e.after=e.after||[],e.index=t,Wc.defineProperties(e),e.tasks&&e.tasks.length&&e.tasks.forEach((e=>Wc.addRunningTime(e)))})),t.stages.forEach((e=>{const n=V(t.stages,{id:e.parentStageId});n&&("STAGE_BEFORE"===e.syntheticStageOwner&&n.before.push(e),"STAGE_AFTER"===e.syntheticStageOwner&&n.after.push(e));const a=e.context||{};e.cloudProvider=a.cloudProvider||a.cloudProviderType,a.alias&&(e.alias=a.alias)})),Wc.defineProperties(t),this.processStageSummaries(t),t.graphStatusHash=Op.calculateGraphStatusHash(t)}static calculateGraphStatusHash(e){return(e.stageSummaries||[]).map((e=>{const t=$m.pipeline.getStageConfig(e);return t&&t.extraLabelLines?[t.extraLabelLines(e),e.status].join("-"):e.status})).join(":")}static calculateRunningTime(e){return()=>{if(e.groupStages.forEach((t=>{t.startTime&&t.startTime<e.startTime&&(e.startTime=t.startTime),t.endTime&&t.endTime>e.endTime&&(e.endTime=t.endTime)})),!e.startTime)return null;const t=Math.max(Date.now(),e.startTime);return(e.endTime||t)-e.startTime}}static processStageSummaries(e){let t=[];e.stages.forEach((e=>{if(!e.syntheticStageOwner&&!this.hiddenStageTypes.includes(e.type)){"RUNNING"===e.status&&e.after.some((e=>"STOPPED"===e.status))&&(e.status="STOPPED");const n=e.context||{},a={after:e.after,before:e.before,cloudProvider:e.cloudProvider,comments:n.comments||null,endTime:e.endTime,group:n.group,id:e.id,index:void 0,graphRowOverride:n.graphRowOverride||0,masterStage:e,name:e.name,refId:e.refId,requisiteStageRefIds:e.requisiteStageRefIds&&"*"===e.requisiteStageRefIds[0]?[]:e.requisiteStageRefIds||[],stages:[],startTime:e.startTime,status:e.status,type:e.type};t.push(a)}}));const n={};t=t.reduce(((e,t)=>{if(!t.group)return e.push(t),e;let a=e.find((e=>"group"===e.type&&e.name===t.group));return a||(a={activeStageType:void 0,after:void 0,before:t.before,cloudProvider:t.cloudProvider,comments:"",endTime:t.endTime,groupStages:[],id:t.group,index:void 0,masterStage:void 0,name:t.group,refId:t.group,requisiteStageRefIds:t.requisiteStageRefIds&&"*"===t.requisiteStageRefIds[0]?[]:t.requisiteStageRefIds||[],stages:[],startTime:t.startTime,status:void 0,type:"group"},e.push(a)),Wc.defineProperties(t),Object.defineProperties(a,{runningTime:{get:()=>ar(this.calculateRunningTime(a)()),configurable:!0},runningTimeInMs:{get:this.calculateRunningTime(a),configurable:!0}}),n[t.refId]=a.refId,a.groupStages.push(t),e}),[]),t.forEach(((e,a)=>{if("group"!==e.type||e.groupStages||(e.groupStages=[]),"group"===e.type)if(1===e.groupStages.length){const i=e.groupStages[0];e=i,t[a]=i,delete n[i.refId]}else if(e.groupStages.length>1){const t=[];e.groupStages.forEach((e=>{e.comments&&t.push(e.comments)})),e.after=e.groupStages[e.groupStages.length-1].after;const n=this.getCurrentStage(e.groupStages);e.activeStageType=n.type,e.status=n.status,this.styleStage(e,n),e.comments=t.join(", ")}e.requisiteStageRefIds=f(e.requisiteStageRefIds.map((e=>n[e]||e)))})),t.forEach(((e,t)=>this.transformStageSummary(e,t))),e.stageSummaries=t,e.currentStages=this.getCurrentStages(e),this.addStageWidths(e),this.addBuildInfo(e),this.addDeploymentTargets(e)}};let Yp=Op;Yp.hiddenStageTypes=["initialization","pipelineInitialization","waitForRequisiteCompletion","determineTargetServerGroup"];class $p{constructor(e){this.cacheProxy=e}setItem(e,t){try{if(e.includes(di.gateUrl)){const e=JSON.parse(t);if(e.value&&Array.isArray(e.value)&&e.value.length>2&&e.value[2]["content-type"]){const t=e.value[2]["content-type"];if(t&&!t.includes("application/json"))return}}window.localStorage.setItem(e,t),this.cacheProxy[e]=t}catch(n){console.warn("Local Storage Error! Clearing caches and trying again.\nException:",n),this.cacheProxy=Object.create(null),window.localStorage.clear(),window.localStorage.setItem(e,t)}}getItem(e){let t;return t=void 0!==this.cacheProxy[e]?this.cacheProxy[e]:window.localStorage.getItem(e),t}removeItem(e){delete this.cacheProxy[e],window.localStorage.removeItem(e)}}const Hp=class{static getStoragePrefix(e,t){return`angular-cache.caches.${e}:${t}.`}static buildCacheKey(e,t){let n;return n=e&&t?`${e}:${t}`:e||t,n}static bombCorruptedCache(e,t,n){const a=Hp.buildCacheKey(e,t),i=`${Hp.getStoragePrefix(a,n)}${a}`;window.localStorage[`${i}.keys`]&&"[]"!==window.localStorage[`${i}.keys`]||Object.keys(window.localStorage).filter((e=>e.includes(i))).forEach((e=>window.localStorage.removeItem(e)))}static clearPreviousVersions(e,t,n,a){if(n){Hp.bombCorruptedCache(e,t,n);for(let i=0;i<n;i++){const n=Hp.buildCacheKey(e,t);a.exists(n)&&a.get(n).destroy(),a.createCache(n,{storageMode:"localStorage",storagePrefix:Hp.getStoragePrefix(n,i)}),a.get(n).removeAll(),a.get(n).destroy()}}}static getStats(e){const t=e.keys();let n=Date.now(),a=0;return t.forEach((t=>{const i=e.info(t)||{};n=Math.min(n,i.created),a=Math.max(a,i.created)})),{ageMax:a||null,ageMin:n||null,keys:t.length}}static createCache(e,t,n){var a;const i=Hp.buildCacheKey(e,t),r=n.cacheFactory||this.cacheFactory,s=n.version||1;Hp.clearPreviousVersions(e,t,s,r);const o=null!=(a=n.storageMode)?a:"localStorage";r.createCache(i,{deleteOnExpire:"aggressive",maxAge:n.maxAge||bn.fromObject({days:2}).as("milliseconds"),recycleFreq:bn.fromObject({seconds:5}).as("milliseconds"),storageMode:o,storageImpl:"localStorage"===o?new $p(this.cacheProxy):null,storagePrefix:Hp.getStoragePrefix(i,s)});const l=r.get(i);return this.caches[i]=l,l.getStats=Hp.getStats.bind(null,this.caches[i]),l.config=n,l}static clearCache(e,t){this.caches[t]&&this.caches[t].destroy&&(this.caches[t].destroy(),this.createCache(e,t,this.caches[t].config))}static getCache(e=null,t=null){return this.caches[Hp.buildCacheKey(e,t)]}};let Vp=Hp;Vp.cacheFactory=new Mn,Vp.caches=Object.create(null),Vp.cacheProxy=Object.create(null);class Jp{constructor(){this.caches=Object.create(null)}createCache(e,t){return Vp.createCache(this.getNamespace(),e,t),this.caches[e]=Vp.getCache(this.getNamespace(),e),this.caches[e]}get(e){return this.caches[e]}clearCaches(){Object.keys(this.caches).forEach((e=>this.clearCache(e)))}destroyCaches(){this.caches=Object.create(null)}}const Wp=class extends Jp{getNamespace(){return Wp.NAMESPACE}clearCache(e){const t=this.caches[e];t&&t.destroy&&(t.destroy(),this.createCache(e,t.config))}};let Kp=Wp;Kp.NAMESPACE="viewStateCache";const qp=new Kp,Xp=class{static removeImmutableFields(e){Xp.immutableFields.forEach((t=>delete e[t]))}static clone(e){const t=J(e,(e=>{e&&e.$$hashKey&&delete e.$$hashKey}));return Xp.removeImmutableFields(t),t}};let Zp=Xp;var _p,ed;Zp.immutableFields=new Set(["name","application","index","id","$$hashKey"]),(ed=_p||(_p={})).Triggers="triggers",ed.Notifications="notifications",ed.ParameterConfig="parameterConfig",ed.ExpectedArtifacts="expectedArtifacts";const td=class{static createPipelineTemplate(e,t){return{id:pr.generateUuid(),metadata:{description:`A pipeline template derived from pipeline "${e.name}" in application "${e.application}"`,name:pa.random(),owner:t,scopes:["global"]},pipeline:Zp.clone(e),protect:!1,schema:td.schema,variables:[]}}static isV2PipelineConfig(e){return e.schema===td.schema}static idForTemplate(e){const{id:t,digest:n=""}=e;return`${t}:${n}`}static getTemplateVersion({digest:e,tag:t,id:n}){return e?`${n}@sha256:${e}`:t?`${n}:${t}`:n}static convertTemplateVersionToId(e){const t=e.split("@");return t.length>1?t[0]:t[0].split(":")[0]}static getPipelineTemplateConfigV2(e){return{schema:td.schema,template:{artifactAccount:"front50ArtifactCredentials",reference:this.prefixSource(e),type:"front50/pipelineTemplate"},type:"templatedPipeline"}}static prefixSource(e=""){const t="spinnaker://";return e.startsWith(t)?e:`spinnaker://${e}`}static filterInheritedConfig(e){return td.inheritedKeys.forEach((t=>{if(Array.isArray(e[t])){const n=e[t];e[t]=n.filter((e=>!e.inherited))}})),e}};let nd=td;nd.schema="v2",nd.inheritedKeys=new Set([_p.Triggers,_p.Notifications,_p.ParameterConfig,_p.ExpectedArtifacts]);const ad=class{static buildViewStateCacheKey(e,t){return`${e}:${t}`}static getPipelinesForApplication(e){return Si("/applications").path(e,"pipelineConfigs").get().then((e=>(e.forEach((e=>e.stages=e.stages||[])),this.sortPipelines(e))))}static getStrategiesForApplication(e){return Si("/applications").path(e,"strategyConfigs").get().then((e=>(e.forEach((e=>e.stages=e.stages||[])),this.sortPipelines(e))))}static getHistory(e,t,n=20){return Si(t?"strategyConfigs":"pipelineConfigs").path(e,"history").query({limit:n}).get()}static deletePipeline(e,t,n){const a=t.strategy?"strategies":"pipelines";return Si(a).path(e,n.trim()).delete()}static savePipeline(e){let t=p(e);delete t.isNew,t.name=t.name.trim(),Array.isArray(t.stages)&&t.stages.forEach((function(e){delete e.isNew,e.name||delete e.name})),nd.isV2PipelineConfig(t)&&(t=nd.filterInheritedConfig(t));const n=t.strategy?"strategies":"pipelines";return Si(n).query({staleCheck:!0}).post(t)}static reorderPipelines(e,t,n=!1){const a=n?"strategies":"pipelines";return Si("/actions").path(a,"reorder").post({application:e,idsToIndices:t})}static renamePipeline(e,t,n,a){this.configViewStateCache.remove(this.buildViewStateCacheKey(e,n)),t.name=a.trim();const i=t.strategy?"strategies":"pipelines";return Si(i).path(t.id).put(t)}static triggerPipeline(e,t,n={}){return n.user=ri.getAuthenticatedUser().name,Si("/pipelines/v2").path(e,t).post(n).then((e=>e.ref.split("/").pop()))}static getDownstreamStageIds(e,t){if(!e||!t)return[];let n=[];const a=e.get(t);return a&&a.length&&(n=n.concat(a),a.forEach((t=>{n=n.concat(ad.getDownstreamStageIds(e,t))}))),f(n)}static getDependencyCandidateStages(e,t){const n=ad.groupStagesByRequisiteStageRefIds(e),a=ad.getDownstreamStageIds(n,t.refId);return e.stages.filter((e=>t!==e&&e.requisiteStageRefIds&&!a.includes(e.refId)&&t.requisiteStageRefIds&&!t.requisiteStageRefIds.includes(e.refId)))}static groupStagesByRequisiteStageRefIds(e){return e.stages.reduce(((e,t)=>{const n=t.refId;return t.requisiteStageRefIds.forEach((t=>{const a=e.get(t);a&&a.length?a.push(n):e.set(t,[n])})),e}),new Map)}static getAllUpstreamDependencies(e,t){if(!e||!t)return[];let n=[];return t.requisiteStageRefIds&&t.requisiteStageRefIds.length&&e.stages.forEach((a=>{t.requisiteStageRefIds.includes(a.refId)&&(n.push(a),n=n.concat(this.getAllUpstreamDependencies(e,a)))})),f(n)}static sortPipelines(e){const t=Y(e,["index","name"]),n=[];return t&&t.length&&(t.forEach(((e,t)=>{e.index!==t&&(e.index=t,n.push(this.savePipeline(e)))})),n.length)?Ze.all(n).then((()=>t)):Ze.resolve(t)}};let id=ad;id.configViewStateCache=qp.createCache("pipelineConfig",{version:2});class rd{static configureFilterModel(e,t){return t.forEach((e=>e.param=e.param||e.model)),e.config=t,e.groups=[],e.tags=[],e.displayOptions={},e.sortFilter=rd.mapRouterParamsToSortFilter(e,{}),e.addTags=()=>{e.tags=[],t.filter((e=>!e.displayOption)).forEach((t=>this.addTagsForSection(e,t)))},e.clearFilters=()=>{t.forEach((function(t){t.displayOption||(e.sortFilter[t.model]=t.clearValue)}))},e.activate=()=>{},e.applyParamsToUrl=()=>{const t=rd.mapSortFilterToRouterParams(e);hi.$state.go(".",t,{location:"replace"})},e}static mapSortFilterToRouterParams(e){const{sortFilter:t,config:n}=e;return n.reduce(((e,n)=>({...e,[n.param]:t[n.model]})),{})}static mapRouterParamsToSortFilter(e,t){const n={trueKeyObject:{},string:"",boolean:!1,"inverse-boolean":!0};return e.config.reduce(((e,a)=>{const i=n[a.type],r=t[a.param],s=u(r)?i:r;return{...e,[a.model]:p(s)}}),{})}static registerRouterHooks(e,t){const{transitionService:n}=hi.$uiRouter,a=e.config.map((e=>e.param));let i={};n.onSuccess({exiting:t,retained:"**.application"},(e=>{const t=e.params("from");i=W(t,a)})),n.onBefore({entering:t,retained:"**.application"},(e=>{const t=e.params(),n=a.some((e=>!u(t[e]))),r=i,s=a.some((e=>!u(r[e])));return!n&&s?e.targetState().withParams(r):null})),n.onStart({exiting:"**.application"},(()=>{i={}})),n.onBefore({to:t},(t=>{const n=t.params();Object.assign(e.sortFilter,rd.mapRouterParamsToSortFilter(e,n))}))}static isFilterable(e){return K(e)>0&&q(e)}static getCheckValues(e){return X(e,(function(e,t,n){return t&&e.push(n),e}),[]).sort()}static checkAccountFilters(e){return t=>{if(this.isFilterable(e.sortFilter.account)){const n=this.getCheckValues(e.sortFilter.account);return Z(n,t.account)}return!0}}static checkRegionFilters(e){return t=>{if(this.isFilterable(e.sortFilter.region)){const n=this.getCheckValues(e.sortFilter.region);return Z(n,t.region)}return!0}}static checkStackFilters(e){return t=>{if(this.isFilterable(e.sortFilter.stack)){const n=this.getCheckValues(e.sortFilter.stack);return n.includes("(none)")&&(n.push(""),n.push(null),n.push(void 0)),Z(n,t.stack)}return!0}}static checkDetailFilters(e){return t=>{if(this.isFilterable(e.sortFilter.detail)){const n=this.getCheckValues(e.sortFilter.detail);return n.includes("(none)")&&(n.push(""),n.push(null),n.push(void 0)),Z(n,t.detail)}return!0}}static checkStatusFilters(e){return t=>{if(this.isFilterable(e.sortFilter.status)){const n=this.getCheckValues(e.sortFilter.status);return Z(n,"Up")&&0===t.instanceCounts.down||Z(n,"Down")&&t.instanceCounts.down>0||Z(n,"OutOfService")&&t.instanceCounts.outOfService>0||Z(n,"Starting")&&t.instanceCounts.starting>0||Z(n,"Disabled")&&t.isDisabled||Z(n,"Unknown")&&t.instanceCounts.unknown>0}return!0}}static checkProviderFilters(e){return t=>{if(this.isFilterable(e.sortFilter.providerType)){const n=this.getCheckValues(e.sortFilter.providerType);return Z(n,t.type)||Z(n,t.provider)}return!0}}static addTagsForSection(e,t){const n=t.model,a=t.filterLabel||t.model,i=t.filterTranslator||{},r=t.clearValue,s=e.tags,o=e.sortFilter[n];return"trueKeyObject"===t.type?ee(o,((t,r)=>{t&&s.push({key:n,label:a,value:i[r]||r,clear(){delete e.sortFilter[n][r],e.applyParamsToUrl()}})})):null!=o&&""!==o&&!1!==o&&s.push({key:n,label:a,value:i[o]||o,clear(){e.sortFilter[n]=r,e.applyParamsToUrl()}}),s}}const sd=e=>{const{heading:t,isCloudProvider:n,name:a,onChange:i,onChangeEvent:r,sortFilterType:s}=e;return ot.createElement("div",{className:"checkbox"},ot.createElement("label",null,ot.createElement("input",{type:"checkbox",checked:Boolean(s&&s[t]),onChange:r||(e=>{const n=e.target,a="checkbox"===n.type?n.checked:n.value;s[t]=Boolean(a),i()}),name:a}),n?ot.createElement(ot.Fragment,null,ot.createElement(mp,{provider:"heading",height:"'14px'",width:"'14px'"}),ot.createElement(up,{provider:t})):t))};oi(".filters-toggle {\n position: absolute;\n}\n.filters-toggle .filters-hidden {\n margin-top: 11px;\n}\n.filters-toggle .filters-open {\n background-color: var(--color-accent-g2);\n height: 32px;\n font-size: 16px;\n margin-top: 6px;\n}\n@media (min-width: 768px) and (max-width: 992px) {\n .filters-toggle .filters-open {\n width: 104px;\n }\n}\n@media (min-width: 992px) {\n .filters-toggle .filters-open {\n width: 124px;\n }\n}\n@media (min-width: 1200px) {\n .filters-toggle .filters-open {\n width: 154px;\n }\n}\n@media (min-width: 1400px) {\n .filters-toggle .filters-open {\n width: 184px;\n }\n}\n@media (min-width: 1600px) {\n .filters-toggle .filters-open {\n width: 214px;\n }\n}\n@media (min-width: 1800px) {\n .filters-toggle .filters-open {\n width: 224px;\n }\n}\n@media (min-width: 2000px) {\n .filters-toggle .filters-open {\n width: 254px;\n }\n}\n.filters-toggle button {\n height: 22px;\n line-height: 12px;\n}\n.filters-toggle .show-filter-text {\n border-left: 1px solid var(--color-accessory-light);\n}\n");class od extends ot.Component{constructor(){super(...arguments),this.onClick=e=>{hi.insightFilterStateModel.pinFilters(e),qe.$apply(),this.setState({})}}render(){const{filtersExpanded:e}=hi.insightFilterStateModel;return ot.createElement("div",{className:"filters-toggle layer-medium"},!e&&ot.createElement("div",{className:"filters-placeholder filters-hidden"},ot.createElement(Ps,{value:"Show filters"},ot.createElement("button",{className:"btn btn-xs btn-default pin clickable sp-padding-xs",onClick:()=>this.onClick(!0),style:{display:e?"none":"inherit"}},ot.createElement("i",{className:"fa fa-forward"}),ot.createElement("span",{className:"show-filter-text"}," Show filters")))),e&&ot.createElement("div",{className:"filters-placeholder filters-open horizontal middle"},ot.createElement(Ps,{value:"Hide filters"},ot.createElement("button",{className:"btn btn-xs btn-default unpin clickable sp-margin-s-xaxis sp-margin-2xs-yaxis sp-padding-xs",onClick:()=>this.onClick(!1),style:{display:e?"inherit":"none"}},ot.createElement("i",{className:"fa fa-backward"}))),ot.createElement("div",{className:"horizontal center flex-1 sp-margin-xl-right"},"Filters")))}}const ld={securityGroups:{version:4,storageMode:"memory"},healthChecks:{version:2},certificates:{version:2},backendServices:{version:2},addresses:{version:2}},cd=class extends Jp{getNamespace(){return cd.NAMESPACE}clearCache(e){const t=this.caches[e];t&&t.removeAll&&(t.keys()&&t.keys().forEach((e=>t.remove(e))),t.onReset&&t.onReset.forEach((e=>e())))}createCache(e,t){const n=super.createCache(e,t);return n.onReset=t.onReset,n}};let pd=cd;pd.NAMESPACE="infrastructure";const dd=new pd;class ud{static getAllEntityTagsForApplication(e){return Si("/tags").query({maxResults:di.entityTags.maxResults||5e3,application:e}).get().then((e=>this.flattenTagsAndAddMetadata(e)))}static addTagsToServerGroups(e){if(!di.feature.entityTags)return;const t=e.entityTags.data,n=t.filter((({entityRef:e})=>"servergroup"===e.entityType)),a=t.filter((({entityRef:e})=>"cluster"===e.entityType));e.serverGroups.data.forEach((e=>{e.entityTags=n.find((({entityRef:t})=>t.entityId===e.name&&t.account===e.account&&t.region===e.region)),e.clusterEntityTags=a.filter((({entityRef:t})=>!(t.entityId!==e.cluster||"*"!==t.account&&t.account!==e.account||"*"!==t.region&&t.region!==e.region)))}))}static addTagsToServerGroupManagers(e){if(!di.feature.entityTags)return;const t=e.entityTags.data.filter((({entityRef:e})=>"servergroupmanager"===e.entityType));e.serverGroupManagers.data.forEach((e=>{e.entityTags=t.find((({entityRef:t})=>t.entityId===e.name&&t.account===e.account&&t.region===e.region))}))}static addTagsToLoadBalancers(e){if(!di.feature.entityTags)return;const t=e.entityTags.data.filter((({entityRef:e})=>"loadbalancer"===e.entityType));e.loadBalancers.data.forEach((e=>{e.entityTags=t.find((({entityRef:t})=>t.entityId===e.name&&t.account===e.account&&t.region===e.region))}))}static addTagsToFunctions(e){if(!di.feature.entityTags||!di.feature.functions)return;const t=e.entityTags.data.filter((({entityRef:e})=>"function"===e.entityType));e.functions.data.forEach((e=>{e.entityTags=t.find((({entityRef:t})=>t.entityId===e.functionName&&t.account===e.account&&t.region===e.region))}))}static addTagsToSecurityGroups(e){if(!di.feature.entityTags)return;const t=e.entityTags.data.filter((({entityRef:e})=>"securitygroup"===e.entityType));e.securityGroups.data.forEach((e=>{e.entityTags=t.find((({entityRef:t})=>t.entityId===e.name&&t.account===e.account&&t.region===e.region))}))}static addTagsToExecutions(e){if(!di.feature.entityTags)return;const t=e.entityTags.data.filter((({entityRef:e})=>"execution"===e.entityType));e.executions.data.forEach((e=>{e.entityTags=t.find((({entityRef:t})=>t.entityId===e.id))}))}static addTagsToPipelines(e){if(!di.feature.entityTags)return;const t=e.entityTags.data.filter((({entityRef:e})=>"pipeline"===e.entityType));e.pipelineConfigs.data.forEach((e=>{e.entityTags=t.find((({entityRef:t})=>t.entityId===e.id))}))}static getEntityTagsForId(e,t){return t?Si("/tags").query({entityType:e.toLowerCase(),entityId:t}).get().then((e=>this.flattenTagsAndAddMetadata(e))).catch((()=>Ze.when([]))):Ze.when([])}static flattenTagsAndAddMetadata(e){const t=[];return e.forEach((e=>{e.tags.forEach((t=>this.addTagMetadata(e,t))),e.alerts=e.tags.filter((e=>e.name.startsWith("spinnaker_ui_alert:"))),e.notices=e.tags.filter((e=>e.name.startsWith("spinnaker_ui_notice:"))),e.creationMetadata=e.tags.find((e=>"spinnaker:metadata"===e.name)),t.push(e)})),t}static addTagMetadata(e,t){const n=e.tagsMetadata.find((e=>e.name===t.name));n&&(t.created=n.created,t.createdBy=n.createdBy,t.lastModified=n.lastModified,t.lastModifiedBy=n.lastModifiedBy)}}const md=class{static parseServerGroupName(e){const t={application:"",stack:"",freeFormDetails:"",cluster:""};if(!e)return t;const n=e.split("-"),a=md.VERSION_PATTERN.test(n[n.length-1]);return t.application=n[0],a&&n.pop(),n.length>1&&(t.stack=n[1]),n.length>2&&(t.freeFormDetails=n.slice(2,n.length).join("-")),t.cluster=md.getClusterNameFromServerGroupName(e),t}static parseClusterName(e){return md.parseServerGroupName(e)}static getClusterName(e,t,n){let a=e;return t&&(a+=`-${t}`),!t&&n&&(a+="-"),n&&(a+=`-${n}`),a}static getClusterNameFromServerGroupName(e){const t=e.split("-");return md.VERSION_PATTERN.test(t[t.length-1])&&t.pop(),t.join("-")}static getSequence(e){return u(e)?null:`v${b(e.toString(),3,"0")}`}static parseLoadBalancerName(e){const t=e.split("-"),n={application:t[0],stack:"",freeFormDetails:"",cluster:""};return t.length>1&&(n.stack=t[1]),t.length>2&&(n.freeFormDetails=t.slice(2,t.length).join("-")),n.cluster=md.getClusterName(n.application,n.stack,n.freeFormDetails),n}static parseSecurityGroupName(e){return md.parseLoadBalancerName(e)}static getMoniker(e,t,n){return te({app:e,stack:t,detail:n})}static getMonikerForInstance(e,t,n){return n.ready().then((()=>{const a=n.getDataSource("serverGroups").data,i=n.getDataSource("loadBalancers").data,r=i.map((e=>e.serverGroups)).reduce(((e,t)=>e.concat(t)),[]),s=[].concat(a).concat(i).concat(r).find((n=>n.cloudProvider===e&&(n.instances||[]).some((e=>e.id===t))));return s&&s.moniker}))}};let gd=md;gd.VERSION_PATTERN=/(v\d{3})/;class hd{static get DEFAULT_PAGE_SIZE(){return 500}static search(e,t=null){const n={...e,...{pageSize:hd.DEFAULT_PAGE_SIZE}};let a=Bi.one("search").query(n);return t&&(a=a.useCache(t)),a.get().then((e=>e[0]||{results:[]})).catch((e=>(Xe.error(e.data,e),{results:[]})))}}class fd{constructor(e){this.providerServiceDelegate=e}normalizeSecurityGroup(e){return this.providerServiceDelegate.getDelegate(e.provider||e.type,"securityGroup.transformer").normalizeSecurityGroup(e)}}fd.$inject=["providerServiceDelegate"];n("spinnaker.core.securityGroup.transformer.service",[hp]).service("securityGroupTransformer",fd);const vd=class{constructor(e,t,n,a){this.$log=e,this.$q=t,this.securityGroupTransformer=n,this.providerServiceDelegate=a}static indexSecurityGroups(e){const t={};return e.forEach((e=>{const n=e.account;t[n]={};const a=t[n];ee(e.securityGroups,((e,t)=>{const i={};a[t]=i,e.forEach((e=>{e.accountName=n,e.region=t,i[e.id]=e,i[e.name]=e}))}))})),t}static attachUsageFields(e){e.usages||(e.usages={loadBalancers:[],serverGroups:[]})}static sortUsages(e){e.usages&&(e.usages.serverGroups.sort(((e,t)=>t.name.localeCompare(e.name))),e.usages.loadBalancers.sort(((e,t)=>t.name.localeCompare(e.name))))}resolve(e,t,n){return this.providerServiceDelegate.getDelegate(t.provider||t.type||t.cloudProvider,"securityGroup.reader").resolveIndexedSecurityGroup(e,t,n)}addLoadBalancerSecurityGroups(e){let t=!1;const n=[];return e.getDataSource("loadBalancers").data.forEach((a=>{a.securityGroups&&a.securityGroups.forEach((i=>{try{const t=this.resolve(e.securityGroupsIndex,a,i);vd.attachUsageFields(t),t.usages.loadBalancers.some((e=>e.name===a.name))||t.usages.loadBalancers.push({name:a.name}),n.push(t)}catch(e){this.$log.warn("could not attach firewall to load balancer:",a.name,i,e),t=!0}}))})),n.forEach(vd.sortUsages),{notFoundCaught:t,securityGroups:n}}addNameBasedSecurityGroups(e,t){let n=!1;const a=[];return t.forEach((t=>{try{const n=this.resolve(e.securityGroupsIndex,t,t.id);vd.attachUsageFields(n),a.push(n)}catch(e){this.$log.warn("could not initialize application firewall:",t),n=!0}})),{notFoundCaught:n,securityGroups:a}}addServerGroupSecurityGroups(e){let t=!1;const n=new Set;e.getDataSource("serverGroups").data.forEach((a=>{a.securityGroups&&a.securityGroups.forEach((i=>{try{const t=this.resolve(e.securityGroupsIndex,a,i);if(vd.attachUsageFields(t),!t.usages.serverGroups.some((e=>e.name===a.name))){const{account:e,isDisabled:n,name:i,cloudProvider:r,region:s}=a;t.usages.serverGroups.push({account:e,isDisabled:n,name:i,cloudProvider:r,region:s})}n.add(t)}catch(e){this.$log.warn("could not attach firewall to server group:",a.name,i),t=!0}}))}));const a=Array.from(n);return a.forEach(vd.sortUsages),{notFoundCaught:t,securityGroups:a}}clearCacheAndRetryAttachingSecurityGroups(e,t){return dd.clearCache("securityGroups"),this.loadSecurityGroups().then((n=>(e.securityGroupsIndex=n,this.attachSecurityGroups(e,t,!1))))}addNamePartsToSecurityGroup(e){const t=gd.parseSecurityGroupName(e.name);e.stack=t.stack,e.detail=t.freeFormDetails,e.moniker=gd.getMoniker(t.application,t.stack,t.freeFormDetails)}attachSecurityGroups(e,t,n){let a=[],i=!1;if(t){e.getDataSource("securityGroups").data=[];const n=this.addNameBasedSecurityGroups(e,t);i=n.notFoundCaught,n.notFoundCaught||(a=n.securityGroups)}else a=e.getDataSource("securityGroups").data.filter((e=>!e.usages.serverGroups.length&&!e.usages.loadBalancers.length));if(!i){const t=this.addLoadBalancerSecurityGroups(e);if(i=t.notFoundCaught,!i){a=a.concat(t.securityGroups.filter((e=>!a.includes(e))));const n=this.addServerGroupSecurityGroups(e);i=n.notFoundCaught,i||(a=a.concat(n.securityGroups.filter((e=>!a.includes(e)))))}}return a=f(a),i&&n?(this.$log.warn("Clearing firewall cache and trying again..."),this.clearCacheAndRetryAttachingSecurityGroups(e,t)):(a.forEach((e=>this.addNamePartsToSecurityGroup(e))),this.$q.all(a.map((e=>this.securityGroupTransformer.normalizeSecurityGroup(e)))).then((()=>a)))}getAllSecurityGroups(){const e=dd.get("securityGroups"),t=e?e.get("allGroups"):null;return t?this.$q.resolve(this.decompress(p(t))):(this.getAllSecurityGroupsPromise||(this.getAllSecurityGroupsPromise=Si("/securityGroups").get().then((t=>(e&&e.put("allGroups",this.compress(t)),t))).finally((()=>{delete this.getAllSecurityGroupsPromise}))),this.getAllSecurityGroupsPromise)}compress(e){const t={};return Object.keys(e).forEach((n=>{t[n]={},Object.keys(e[n]).forEach((a=>{if(t[n][a]={},Object.keys(e[n][a]).forEach((t=>{e[n][a][t].forEach((e=>delete e.moniker))})),this.providerServiceDelegate.hasDelegate(a,"securityGroup.transformer")){const i=this.providerServiceDelegate.getDelegate(a,"securityGroup.transformer");i.supportsCompression?Object.keys(e[n][a]).forEach((r=>{t[n][a][r]=i.compress(e[n][a][r])})):t[n][a]=e[n][a]}else t[n][a]=e[n][a]}))})),t}decompress(e){return Object.keys(e).forEach((t=>{Object.keys(e[t]).forEach((n=>{if(this.providerServiceDelegate.hasDelegate(n,"securityGroup.transformer")){const a=this.providerServiceDelegate.getDelegate(n,"securityGroup.transformer");a&&a.supportsCompression&&Object.keys(e[t][n]).forEach((i=>{e[t][n][i]=a.decompress(e[t][n][i])}))}}))})),e}getApplicationSecurityGroup(e,t,n,a){let i=null;return H(e.securityGroupsIndex,[t,n,a])&&(i=e.securityGroupsIndex[t][n][a]),i}getApplicationSecurityGroups(e,t){return this.loadSecurityGroups().then((t=>{e.securityGroupsIndex=t})).then((()=>this.$q.all([e.getDataSource("serverGroups").ready(),e.getDataSource("loadBalancers").ready()]).then((()=>this.attachSecurityGroups(e,t,!0)))))}getSecurityGroupDetails(e,t,n,a,i,r){return Si("/securityGroups").path(t,a,r).query({provider:n,vpcId:i}).get().then((n=>(n&&n.inboundRules&&(n.ipRangeRules=n.inboundRules.filter((e=>e.range)),n.securityGroupRules=n.inboundRules.filter((e=>e.securityGroup)),n.securityGroupRules.forEach((t=>{const a=t.securityGroup;if(!a.name){const t=this.getApplicationSecurityGroup(e,a.accountName,n.region,a.id);t?a.name=t.name:(a.name=a.id,a.inferredName=!0)}}))),di.feature.entityTags&&e.isStandalone?ud.getEntityTagsForId("securitygroup",n.name).then((e=>(n.entityTags=e.find((e=>e.entityRef.entityId===n.name&&e.entityRef.account===t&&e.entityRef.region===a)),n))):n)))}loadSecurityGroups(){return this.getAllSecurityGroups().then((e=>{const t=[];return ee(e,((e,n)=>ee(e,((a,i)=>{ee(a,(e=>{e.forEach((e=>{e.provider=i,e.account=n}))})),t.push({account:n,provider:i,securityGroups:e[i]})})))),vd.indexSecurityGroups(t)}))}loadSecurityGroupsByApplicationName(e){return hd.search({q:e,type:"securityGroups",pageSize:1e3}).then((t=>{let n=[];return t&&t.results?n=ne(t.results,{application:e}):this.$log.warn("WARNING: Gate firewall endpoint appears to be down."),n}))}};let Ad=vd;Ad.$inject=["$log","$q","securityGroupTransformer","providerServiceDelegate"];const Ed="spinnaker.core.securityGroup.read.service";n(Ed,["spinnaker.core.securityGroup.transformer.service",hp]).service("securityGroupReader",Ad);class bd{constructor(e,t,n){this.$q=e,this.securityGroupReader=t,this.providerServiceDelegate=n,this.cacheConfig=p(ld),this.initializers={securityGroups:[()=>this.securityGroupReader.getAllSecurityGroups()]}}setConfigDefaults(e,t){t.version=t.version||1,t.maxAge=t.maxAge||bn.fromObject({days:2}).as("milliseconds"),t.initializers=t.initializers||this.initializers[e]||[],t.onReset=t.onReset||[i]}extendConfig(){return Object.keys(this.cacheConfig).forEach((e=>{this.setConfigDefaults(e,this.cacheConfig[e])})),Di.listProviders().then((e=>Ni.listRegisteredProviders().forEach((t=>{if(e.includes(t)&&this.providerServiceDelegate.hasDelegate(t,"cache.configurer")){const e=this.providerServiceDelegate.getDelegate(t,"cache.configurer");Object.keys(e).forEach((t=>{this.setConfigDefaults(t,e[t]),this.cacheConfig[t]||(this.cacheConfig[t]=e[t]),this.cacheConfig[t].initializers=f(this.cacheConfig[t].initializers.concat(e[t].initializers)),this.cacheConfig[t].onReset=f(this.cacheConfig[t].onReset.concat(e[t].onReset)),this.cacheConfig[t].version=Math.max(this.cacheConfig[t].version,e[t].version),this.cacheConfig[t].maxAge=Math.min(this.cacheConfig[t].maxAge,e[t].maxAge)}))}}))))}initializeCache(e){if(dd.createCache(e,this.cacheConfig[e]),this.cacheConfig[e].initializers){const t=this.cacheConfig[e].initializers,n=[];return t.forEach((e=>{n.push(e())})),this.$q.all(n)}return this.$q.resolve(void 0)}initialize(){return this.extendConfig().then((()=>{const e=[];return Object.keys(this.cacheConfig).forEach((t=>{e.push(this.initializeCache(t))})),this.$q.all(e)}))}refreshCache(e){return dd.clearCache(e),this.initializeCache(e)}refreshCaches(){const e=[];return Object.keys(this.cacheConfig).forEach((t=>{e.push(this.refreshCache(t))})),this.$q.all(e)}}bd.$inject=["$q","securityGroupReader","providerServiceDelegate"];const yd="spinnaker.core.cache.initializer";n(yd,[Ed]).service("cacheInitializer",bd);const Cd=({clearFilters:e,tags:t,tagCleared:n})=>{const a=(null==t?void 0:t.length)>5,[i,r]=ot.useState(a&&Ms.isExpanded("filterTags")),s=!a||i?t:t.slice(0,5);return ot.createElement("div",{className:"col-md-12 filter-tags"},s&&s.length>0&&ot.createElement("span",null,ot.createElement("span",null,"Filtered by: "),s.map((e=>ot.createElement("span",{className:"filter-tag",key:[e.label,e.value].join(":")},ot.createElement("strong",null,e.label),": ",e.value,ot.createElement("a",{className:"clickable clear-filters",onClick:()=>(e=>{e.clear(),n(),Ui.log({category:"Filter Tags",action:"Individual tag removed"})})(e)},ot.createElement("span",{className:"glyphicon glyphicon-remove-sign"}))))),a&&ot.createElement("span",{className:"filter-toggle",onClick:()=>{Ms.setExpanded("filterTags",!i),r(!i)}},i?"Hide List":`See all ${t.length} current filters`),s.length>1&&ot.createElement("a",{className:"clickable clear-filters",onClick:()=>{e&&e(),Ui.log({category:"Filter Tags",action:"Clear All clicked"})}},"Clear All")))};function wd(e){return function(t,n){const{headings:a,pool:i}=t;return a[n]=A(i).map(n).uniq().compact().value().sort(),function(e,t){if(!t)return;const n=new Set(e);Object.keys(t).forEach((e=>{n.has(e)||delete t[e]}))}(a[n],e[n]),t.pool=function(e,t,n){const a=n[t];if(!Object.keys(te(a,ae)).length)return e;return e.filter((e=>a[e[t]]))}(i,n,e),t}}function xd({pool:e,dependencyOrder:t,sortFilter:n}){return t.reduce(wd(n),{pool:e,headings:{}}).headings}const kd=[{model:"filter",param:"q",clearValue:"",type:"string",filterLabel:"search"},{model:"account",param:"acct",type:"trueKeyObject"},{model:"region",param:"reg",type:"trueKeyObject"},{model:"stack",param:"stack",type:"trueKeyObject"},{model:"detail",param:"detail",type:"trueKeyObject"},{model:"category",param:"category",type:"trueKeyObject"},{model:"status",type:"trueKeyObject",filterTranslator:{Up:"Healthy",Down:"Unhealthy",OutOfService:"Out of Service"}},{model:"availabilityZone",param:"zone",type:"trueKeyObject",filterLabel:"availability zone"},{model:"instanceType",type:"trueKeyObject",filterLabel:"instance type"},{model:"providerType",type:"trueKeyObject",filterLabel:"provider"},{model:"minInstances",type:"int",filterLabel:"instance count (min)"},{model:"maxInstances",type:"int",filterLabel:"instance count (max)"},{model:"showAllInstances",param:"hideInstances",displayOption:!0,type:"inverse-boolean"},{model:"listInstances",displayOption:!0,type:"boolean"},{model:"instanceSort",displayOption:!0,type:"string",defaultValue:"launchTime"},{model:"multiselect",displayOption:!0,type:"boolean"},{model:"clusters",type:"trueKeyObject"},{model:"labels",type:"trueKeyObject",filterLabel:"label",clearValue:{}}];class Bd{constructor(){this.asFilterModel=rd.configureFilterModel(this,kd),rd.registerRouterHooks(this.asFilterModel,"**.application.insight.clusters.**"),this.asFilterModel.activate()}}function Sd(e){return e?X(e,((e,t)=>(e[`${t.key}:${t.value}`]=!0,e)),{}):{}}function Md(e){return e?X(e,((e,t,n)=>{let[a,i]=n.split(":");return"null"===a&&(a=null),"null"===i&&(i=null),e.concat([{key:a,value:i}])}),[]):[]}var Nd=Object.defineProperty,Dd=Object.getOwnPropertyDescriptor;class Id{constructor(){this.groupsUpdatedStream=new At,this.isFilterable=rd.isFilterable}updateClusterGroups(e){if(!e&&(e=this.lastApplication,!this.lastApplication))return null;const t=[],n=this.filterServerGroupsForDisplay(e.getDataSource("serverGroups").data),a=ie(n,"account");ee(a,((n,a)=>{const i=ie(n,"category"),r=[];ee(i,((t,n)=>{const i=ie(t,"cluster");ee(i,((t,i)=>{const s=ie(t,"region"),o=[];ee(s,((e,t)=>{o.push({heading:t,category:n,serverGroups:e,key:`${t}:${n}`,entityTags:(e[0].clusterEntityTags||[]).find((e=>e.entityRef.region===t)),isManaged:!!e[0].isManaged,managedResourceSummary:e[0].managedResourceSummary})}));const l=(e.clusters||[]).find((e=>e.account===a&&e.name===i&&e.category===n));if(l){const e=o.every((({isManaged:e})=>e));r.push({heading:i,category:n,key:`${i}:${n}`,cluster:l,subgroups:Y(o,"heading"),entityTags:(t[0].clusterEntityTags||[]).find((e=>"*"===e.entityRef.region||void 0===e.entityRef.region)),isManaged:e,managedResourceSummary:e?o[0].managedResourceSummary:void 0})}}))})),t.push({heading:a,key:a,subgroups:Y(r,["heading","category"])})})),this.sortGroupsByHeading(t),Wd.filterModel.asFilterModel.addTags(),this.lastApplication=e,this.addHealthFlags(),this.groupsUpdatedStream.next(Wd.filterModel.asFilterModel.groups)}clearFilters(){Wd.filterModel.asFilterModel.clearFilters(),Wd.filterModel.asFilterModel.applyParamsToUrl()}shouldShowInstance(e){const t=Wd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(t.availabilityZone)){if(!rd.getCheckValues(t.availabilityZone).includes(e.availabilityZone))return!1}if(this.isFilterable(t.status)){const n=rd.getCheckValues(t.status).filter((e=>"Disabled"!==e));return!n.length||(!!t.status.Disabled||n.includes(e.healthState))}return!0}overrideFiltersForUrl(e){if(e.href.includes("/clusters")){Wd.filterModel.asFilterModel.clearFilters();const t=Wd.filterModel.asFilterModel.sortFilter;if(t.filter=e.serverGroup?e.serverGroup:e.cluster?"cluster:"+e.cluster:"",e.account){const n={};n[e.account]=!0,t.account=n}if(e.region){const n={};n[e.region]=!0,t.region=n}if(e.stack){const n={};n[e.stack]=!0,t.stack=n}if(e.detail){const n={};n[e.detail]=!0,t.detail=n}if(e.category){const n={};n[e.category]=!0,t.category=n}hi.$stateParams.application===e.application&&this.updateClusterGroups()}}filterServerGroupsForDisplay(e){const t=e.filter((e=>this.textFilter(e))).filter((e=>this.instanceCountFilter(e))).filter((e=>rd.checkAccountFilters(Wd.filterModel.asFilterModel)(e))).filter((e=>rd.checkRegionFilters(Wd.filterModel.asFilterModel)(e))).filter((e=>rd.checkStackFilters(Wd.filterModel.asFilterModel)(e))).filter((e=>rd.checkDetailFilters(Wd.filterModel.asFilterModel)(e))).filter((e=>rd.checkStatusFilters(Wd.filterModel.asFilterModel)(e))).filter((e=>rd.checkProviderFilters(Wd.filterModel.asFilterModel)(e))).filter((e=>this.instanceTypeFilters(e))).filter((e=>this.instanceFilters(e))).filter((e=>this.labelFilters(e)));return this.updateMultiselectInstanceGroups(t),this.updateMultiselectServerGroups(t),t}updateMultiselectInstanceGroups(e){const t=Wd.filterModel.asFilterModel.sortFilter;t.listInstances&&t.multiselect?(Wd.multiselectModel.instanceGroups.forEach((t=>{const n=e.find((e=>e.name===t.serverGroup&&e.region===t.region&&e.account===t.account&&e.type===t.cloudProvider));if(n){const e=n.instances.filter((e=>this.shouldShowInstance(e)));t.selectAll?t.instanceIds=e.map((e=>e.id)):t.instanceIds=e.filter((e=>t.instanceIds.includes(e.id))).map((e=>e.id))}else t.instanceIds.length=0})),Wd.multiselectModel.instancesStream.next(),Wd.multiselectModel.syncNavigation()):Wd.multiselectModel.instanceGroups.length=0}updateMultiselectServerGroups(e){if(Wd.filterModel.asFilterModel.sortFilter.multiselect){if(Wd.multiselectModel.serverGroups.length){const t=e.map((e=>Wd.multiselectModel.makeServerGroupKey(e))),n=[];Wd.multiselectModel.serverGroups.forEach(((e,a)=>{t.includes(e.key)||n.push(a)})),n.reverse().forEach((e=>Wd.multiselectModel.serverGroups.splice(e,1)))}Wd.multiselectModel.serverGroupsStream.next(),Wd.multiselectModel.syncNavigation()}}instanceTypeFilters(e){const t=Wd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(t.instanceType)){return rd.getCheckValues(t.instanceType).includes(e.instanceType)}return!0}instanceFilters(e){return!this.shouldFilterInstances()||e.instances.some((e=>this.shouldShowInstance(e)))}shouldFilterInstances(){const e=Wd.filterModel.asFilterModel.sortFilter;return this.isFilterable(e.availabilityZone)||this.isFilterable(e.status)&&!e.status.hasOwnProperty("Disabled")}instanceCountFilter(e){let t=!0;const n=Wd.filterModel.asFilterModel.sortFilter;return n.minInstances&&!isNaN(n.minInstances)&&(t=e.instances.length>=n.minInstances),t&&null!==n.maxInstances&&!isNaN(n.maxInstances)&&(t=e.instances.length<=n.maxInstances),t}labelFilters(e){const t=Md(Wd.filterModel.asFilterModel.sortFilter.labels);return!!re(t)||se(t,(({key:t,value:n})=>null===t||null===n||q(e.labels||{},((e,a)=>t&&t===a&&(n&&n===e)))))}textFilter(e){const t=Wd.filterModel.asFilterModel.sortFilter.filter.toLowerCase();if(!t)return!0;if(t.includes("clusters:")){return t.split("clusters:")[1].replace(/\s/g,"").split(",").includes(e.cluster)}if(t.includes("vpc:")){const n=t.split("vpc:")[1];return e.vpcName.toLowerCase()===n.toLowerCase()}if(t.includes("tag:")){let n=!1;const[,a]=t.split("tag:");let i=null,r=null;return a.includes("=")&&([i,r]=a.split("=")),oe(e.tags||{},((e,t)=>{i?i.toLowerCase()===t.toLowerCase()&&e.toLowerCase().includes(r.toLowerCase())&&(n=!0):e.toLowerCase().includes(a.toLowerCase())&&(n=!0)})),n}if(t.includes("detail:")){const n=t.split("detail:")[1];return e.detail===n.toLowerCase()}if(t.includes("cluster:")){const n=t.split("cluster:")[1];return e.cluster===n}if(t.includes("labels:")){const t=Wd.filterModel.asFilterModel.sortFilter.filter.split("labels:")[1].split(",").map((e=>e.trim()));return se(t,(t=>{let n,a;return t.includes("=")&&([n,a]=t.split("=")),!(!n||!a)&&q(e.labels||{},((e,t)=>n===t&&e===a))}))}return this.addSearchField(e),t.split(" ").every((t=>e.searchField.includes(t)))}addSearchField(e){if(e.searchField)return;let t="";e.buildInfo&&e.buildInfo.jenkins&&(t=["#"+e.buildInfo.jenkins.number,e.buildInfo.jenkins.host,e.buildInfo.jenkins.name].join(" ").toLowerCase()),e.searchField||(e.searchField=[e.region.toLowerCase(),e.name.toLowerCase(),e.account.toLowerCase(),t,(e.loadBalancers||[]).join(" "),(e.instances||[]).map((e=>e.id)).join(" ")].join(" "))}sortGroupsByHeading(e){this.diffSubgroups(Wd.filterModel.asFilterModel.groups,e),Wd.filterModel.asFilterModel.groups.sort(((e,t)=>e.heading.localeCompare(t.heading)))}addHealthFlags(){Wd.filterModel.asFilterModel.groups.forEach((e=>{e.subgroups.forEach((e=>{e.hasDiscovery=e.subgroups.some((e=>this.hasDiscovery(e))),e.hasLoadBalancers=e.subgroups.some((e=>this.hasLoadBalancers(e)))}))}))}hasDiscovery(e){return e.serverGroups.some((e=>(e.instances||[]).some((e=>(e.health||[]).some((e=>"Discovery"===e.type))))))}hasLoadBalancers(e){return e.serverGroups.some((e=>(e.instances||[]).some((e=>(e.health||[]).some((e=>"LoadBalancer"===e.type))))))}diffSubgroups(e,t){const n=[];e.forEach(((e,a)=>{const i=(t||[]).find((t=>t.key===e.key));if(i){if(i.hasOwnProperty("subgroups")&&this.diffSubgroups(e.subgroups,i.subgroups),i.hasOwnProperty("cluster")&&(e.cluster=i.cluster,this.diffSubgroups(e.subgroups,i.subgroups)),i.hasOwnProperty("serverGroups")&&this.diffServerGroups(e,i),(e.entityTags||i.entityTags)&&(e.entityTags=i.entityTags),e.hasOwnProperty("isManaged")||i.hasOwnProperty("isManaged")){const t=e,n=i;t.isManaged=n.isManaged,t.managedResourceSummary=n.managedResourceSummary}}else n.push(a)})),n.reverse().forEach((t=>{e.splice(t,1)})),t.forEach((t=>{e.find((e=>e.key===t.key))||e.push(t)}))}diffServerGroups(e,t){if(e.category!==t.category)return;const n=[];e.serverGroups.forEach(((a,i)=>{const r=t.serverGroups.find((e=>e.name===a.name&&e.account===a.account&&e.region===a.region));r?(a.stringVal!==r.stringVal&&(Xe.debug("change detected, updating server group:",a.name,a.account,a.region,a.category),e.serverGroups[i]=r),(a.runningExecutions||r.runningExecutions)&&(a.runningExecutions=r.runningExecutions),(a.runningTasks||r.runningTasks)&&(a.runningTasks=r.runningTasks)):(Xe.debug("server group no longer found, removing:",a.name,a.account,a.region,a.category),n.push(i))})),n.reverse().forEach((t=>{e.serverGroups.splice(t,1)})),t.serverGroups.forEach((t=>{e.serverGroups.find((e=>e.name===t.name&&e.account===t.account&&e.region===t.region))||(Xe.debug("new server group found, adding",t.name,t.account,t.region),e.serverGroups.push(t))}))}}((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Dd(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);a&&r&&Nd(t,n,r)})([da(25)],Id.prototype,"updateClusterGroups",1);class Fd{constructor(){this.instanceGroups=[],this.instancesStream=new At,this.serverGroups=[],this.serverGroupsStream=new At}syncNavigation(){const{$state:e}=hi;if(!Wd.filterModel.asFilterModel.sortFilter.multiselect&&e.params.multiselect&&e.go(".",{multiselect:null},{inherit:!0}),Wd.filterModel.asFilterModel.sortFilter.multiselect&&!e.params.multiselect&&e.go(".",{multiselect:!0},{inherit:!0}),e.includes("**.multipleInstances")&&!Wd.filterModel.asFilterModel.sortFilter.multiselect)return this.deselectAllInstances(),void e.go("^");if(e.includes("**.multipleServerGroups")&&!Wd.filterModel.asFilterModel.sortFilter.multiselect)return this.clearAllServerGroups(),void e.go("^");const t=this.instanceGroups.reduce(((e,t)=>e+t.instanceIds.length),0);e.includes("**.multipleInstances")&&!t&&e.go("^"),!e.includes("**.multipleInstances")&&t&&(this.isClusterChildState()?e.go("^.multipleInstances"):e.go(".multipleInstances")),!e.includes("**.multipleServerGroups")||this.serverGroups.length?!e.includes("**.multipleServerGroups")&&this.serverGroups.length&&(this.isClusterChildState()?e.go("^.multipleServerGroups"):e.go(".multipleServerGroups")):e.go("^")}deselectAllInstances(){this.instanceGroups.forEach((e=>{e.instanceIds.length=0,e.selectAll=!1}))}clearAllInstanceGroups(){this.instanceGroups.length=0,this.instancesStream.next()}clearAllServerGroups(){this.serverGroups.length=0,this.serverGroupsStream.next()}clearAll(){this.clearAllInstanceGroups(),this.clearAllServerGroups()}getOrCreateInstanceGroup(e){const t=e.name,n=e.account,a=e.region,i=e.type;let r=this.instanceGroups.find((e=>e.serverGroup===t&&e.account===n&&e.region===a&&e.cloudProvider===i));if(!r){const s=hi.$state.params,o=(e.instances||[]).filter((e=>e.provider===s.provider&&e.id===s.instanceId)).map((e=>e.id));r={serverGroup:t,account:n,region:a,cloudProvider:i,instanceIds:o,instances:[],selectAll:!1},this.instanceGroups.push(r)}return r}makeServerGroupKey(e){return[e.type,e.account,e.region,e.name,e.category].join(":")}serverGroupIsSelected(e){if(!this.serverGroups.length)return!1;const t=this.makeServerGroupKey(e);return this.serverGroups.filter((e=>e.key===t)).length>0}toggleServerGroup(e){const{$state:t}=hi;if(!Wd.filterModel.asFilterModel.sortFilter.multiselect){const n={provider:e.type,accountId:e.account,region:e.region,serverGroup:e.name,job:e.name};if(this.isClusterChildState()){if(t.includes("**.serverGroup",n))return;t.go("^."+e.category,n)}else t.go("."+e.category,n);return}this.deselectAllInstances();const n=this.makeServerGroupKey(e),a=this.serverGroups.find((e=>e.key===n));a?this.serverGroups.splice(this.serverGroups.indexOf(a),1):this.serverGroups.push({key:n,account:e.account,region:e.region,provider:e.type,name:e.name,moniker:e.moniker}),this.serverGroupsStream.next(),this.syncNavigation()}toggleInstance(e,t){const{$state:n}=hi;if(!Wd.filterModel.asFilterModel.sortFilter.multiselect){const a={provider:e.type,instanceId:t};if(this.isClusterChildState()){if(n.includes("**.instanceDetails",a))return;n.go("^.instanceDetails",a)}else n.go(".instanceDetails",a);return}this.clearAllServerGroups();const a=this.getOrCreateInstanceGroup(e);a.instanceIds.includes(t)?(a.instanceIds.splice(a.instanceIds.indexOf(t),1),a.selectAll=!1):a.instanceIds.push(t),this.instancesStream.next(),this.syncNavigation()}toggleSelectAll(e,t){const n=this.getOrCreateInstanceGroup(e);n.selectAll=!n.selectAll,n.instanceIds=n.selectAll?t:[],n.selectAll&&this.clearAllServerGroups(),this.instancesStream.next(),this.syncNavigation()}instanceIsSelected(e,t){return this.getOrCreateInstanceGroup(e).instanceIds.includes(t)}isClusterChildState(){return"clusters"!==hi.$state.$current.name.split(".").pop()}}const Td=[{model:"account",param:"acct",type:"trueKeyObject"},{model:"detail",param:"detail",type:"trueKeyObject"},{model:"filter",param:"q",clearValue:"",type:"string",filterLabel:"search"},{model:"providerType",type:"trueKeyObject",filterLabel:"provider"},{model:"region",param:"reg",type:"trueKeyObject"}];class Qd{constructor(){this.asFilterModel=rd.configureFilterModel(this,Td),rd.registerRouterHooks(this.asFilterModel,"**.application.insight.functions.**"),this.asFilterModel.activate()}}var Pd=Object.defineProperty,Rd=Object.getOwnPropertyDescriptor;class Ud{constructor(){this.groupsUpdatedStream=new At}addSearchFields(e){e.searchField||(e.searchField=[e.functionName,e.region.toLowerCase(),e.account].join(" "))}checkSearchTextFilter(e){const t=Zd.filterModel.asFilterModel.sortFilter.filter;if(!t)return!0;if(t.includes("vpc:")){const[,n]=/vpc:([\w-]*)/.exec(t);return e.vpcName.toLowerCase()===n.toLowerCase()}return this.addSearchFields(e),t.split(" ").every((t=>e.searchField.includes(t)))}filterFunctionsForDisplay(e){return A(e).filter((e=>this.checkSearchTextFilter(e))).filter((e=>rd.checkAccountFilters(Zd.filterModel.asFilterModel)(e))).filter((e=>rd.checkRegionFilters(Zd.filterModel.asFilterModel)(e))).filter((e=>rd.checkProviderFilters(Zd.filterModel.asFilterModel)(e))).value()}sortGroupsByHeading(){Zd.filterModel.asFilterModel.groups.sort(((e,t)=>e.heading.localeCompare(t.heading)))}clearFilters(){Zd.filterModel.asFilterModel.clearFilters(),Zd.filterModel.asFilterModel.applyParamsToUrl()}getFunctionGroups(e){const t=[];return ee(e,((e,n)=>{const a=I(ie(e,"region")).map((e=>e.map((e=>e.functionName)))),i=a.length>1?h(...a).reduce(((e,t)=>(e[t]=!0,e)),{}):{},r=ie(e,(e=>`${e.functionName}:${e.region}`)),s=[];ee(r,((e,t)=>{const[n,a]=t.split(":"),r=[];e.forEach((e=>{r.push({heading:e.region,functionDef:e})}));const o=`${n}${i[n]&&a?` (${a})`:""}`;s.push({heading:o,subgroups:Y(r,"heading")})})),t.push({heading:n,subgroups:Y(s,"heading")})})),t}updateFunctionGroups(e){if(!e&&(e=this.lastApplication,!this.lastApplication))return null;const t=this.filterFunctionsForDisplay(e.functions.data),n=ie(t,"account"),a=this.getFunctionGroups(n);Zd.filterModel.asFilterModel.groups=a,this.sortGroupsByHeading(),Zd.filterModel.asFilterModel.addTags(),this.lastApplication=e,this.groupsUpdatedStream.next(a)}}((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Rd(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);a&&r&&Pd(t,n,r)})([da(25)],Ud.prototype,"updateFunctionGroups",1);const zd=[{model:"account",param:"acct",type:"trueKeyObject"},{model:"availabilityZone",param:"zone",type:"trueKeyObject",filterLabel:"availability zone"},{model:"detail",param:"detail",type:"trueKeyObject"},{model:"filter",param:"q",clearValue:"",type:"string",filterLabel:"search"},{model:"loadBalancerType",param:"loadBalancerType",filterLabel:"type",type:"trueKeyObject"},{model:"providerType",type:"trueKeyObject",filterLabel:"provider"},{model:"region",param:"reg",type:"trueKeyObject"},{model:"showInstances",displayOption:!0,type:"boolean"},{model:"showServerGroups",param:"hideServerGroups",displayOption:!0,type:"inverse-boolean"},{model:"stack",param:"stack",type:"trueKeyObject"},{model:"status",type:"trueKeyObject",filterTranslator:{Up:"Healthy",Down:"Unhealthy",OutOfService:"Out of Service"}}];class Gd{constructor(){this.asFilterModel=rd.configureFilterModel(this,zd),rd.registerRouterHooks(this.asFilterModel,"**.application.insight.loadBalancers.**"),this.asFilterModel.activate()}}var jd=Object.defineProperty,Ld=Object.getOwnPropertyDescriptor;class Od{constructor(){this.groupsUpdatedStream=new At,this.isFilterable=rd.isFilterable,this.getCheckValues=rd.getCheckValues}addSearchFields(e){e.searchField||(e.searchField=[e.name,e.region.toLowerCase(),e.account,F(e.serverGroups,"name").join(" "),F(e.instances,"id").join(" ")].join(" "))}checkSearchTextFilter(e){const t=qd.filterModel.asFilterModel.sortFilter.filter;if(!t)return!0;if(t.includes("vpc:")){const[,n]=/vpc:([\w-]*)/.exec(t);return e.vpcName.toLowerCase()===n.toLowerCase()}return this.addSearchFields(e),t.split(" ").every((t=>e.searchField.includes(t)))}checkLoadBalancerTypeFilters(e){const t=qd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(t.loadBalancerType)){return!!this.getCheckValues(t.loadBalancerType).includes(e.loadBalancerType)}return!0}filterLoadBalancersForDisplay(e){return A(e).filter((e=>this.checkSearchTextFilter(e))).filter((e=>this.checkLoadBalancerTypeFilters(e))).filter((e=>rd.checkAccountFilters(qd.filterModel.asFilterModel)(e))).filter((e=>rd.checkRegionFilters(qd.filterModel.asFilterModel)(e))).filter((e=>rd.checkStackFilters(qd.filterModel.asFilterModel)(e))).filter((e=>rd.checkDetailFilters(qd.filterModel.asFilterModel)(e))).filter((e=>rd.checkStatusFilters(qd.filterModel.asFilterModel)(e))).filter((e=>rd.checkProviderFilters(qd.filterModel.asFilterModel)(e))).filter((e=>this.instanceFilters(e))).value()}instanceFilters(e){return!this.shouldFilterInstances()||q(e.instances,(e=>this.shouldShowInstance(e)))}shouldFilterInstances(){const e=qd.filterModel.asFilterModel.sortFilter;return this.isFilterable(e.status)||this.isFilterable(e.availabilityZone)}shouldShowInstance(e){const t=qd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(t.availabilityZone)){if(!this.getCheckValues(t.availabilityZone).includes(e.zone))return!1}if(this.isFilterable(t.status)){const n=this.getCheckValues(t.status),a=M(n,"Disabled");return!a.length||Z(a,e.healthState)}return!0}diffSubgroups(e,t){const n=[];e.forEach(((e,a)=>{const i=V(t,{heading:e.heading});i?(i.loadBalancer&&(e.loadBalancer=i.loadBalancer),i.serverGroups&&this.diffServerGroups(e,i),i.subgroups&&this.diffSubgroups(e.subgroups,i.subgroups),(e.hasOwnProperty("isManaged")||i.hasOwnProperty("isManaged"))&&(e.isManaged=i.isManaged,e.managedResourceSummary=i.managedResourceSummary)):n.push(a)})),n.reverse().forEach((t=>{e.splice(t,1)})),t.forEach((t=>{V(e,{heading:t.heading})||e.push(t)}))}diffServerGroups(e,t){const n=[];e.serverGroups.forEach(((a,i)=>{a.stringVal=a.stringVal||JSON.stringify(a,this.jsonReplacer);const r=V(t.serverGroups,{name:a.name,account:a.account,region:a.region});r?(r.stringVal=r.stringVal||JSON.stringify(r,this.jsonReplacer),a.stringVal!==r.stringVal&&(Xe.debug("change detected, updating server group:",a.name,a.account,a.region),e.serverGroups[i]=r)):(Xe.debug("server group no longer found, removing:",a.name,a.account,a.region),n.push(i))})),n.reverse().forEach((t=>{e.serverGroups.splice(t,1)})),t.serverGroups.forEach((t=>{V(e.serverGroups,{name:t.name,account:t.account,region:t.region})||(Xe.debug("new server group found, adding",t.name,t.account,t.region),e.serverGroups.push(t))}))}sortGroupsByHeading(e){this.diffSubgroups(qd.filterModel.asFilterModel.groups,e),qd.filterModel.asFilterModel.groups.sort(((e,t)=>e.heading<t.heading?-1:e.heading>t.heading?1:0))}clearFilters(){qd.filterModel.asFilterModel.clearFilters(),qd.filterModel.asFilterModel.applyParamsToUrl()}filterServerGroups(e){return this.shouldFilterInstances()?e.serverGroups.filter((e=>e.instances.some((e=>this.shouldShowInstance(e))))):e.serverGroups}jsonReplacer(e,t){return"string"==typeof e&&"$"===e.charAt(0)&&"$"===e.charAt(1)&&(t=void 0),t}updateLoadBalancerGroups(e){if(!e&&(e=this.lastApplication,!this.lastApplication))return null;const t=[],n=this.filterLoadBalancersForDisplay(e.loadBalancers.data),a=ie(n,"account");ee(a,((e,n)=>{const a=I(ie(e,"loadBalancerType")).map((e=>e.map((e=>e.name)))),i=a.length>1?h(...a).reduce(((e,t)=>(e[t]=!0,e)),{}):{},r=ie(e,(e=>`${e.name}:${e.loadBalancerType}`)),s=[];ee(r,((e,t)=>{const[n,a]=t.split(":"),r=[];e.forEach((e=>{r.push({heading:e.region,loadBalancer:e,serverGroups:this.filterServerGroups(e),isManaged:!!e.isManaged,managedResourceSummary:e.managedResourceSummary})}));const o=`${n}${i[n]&&a?` (${a})`:""}`,l=r.every((({isManaged:e})=>e));s.push({heading:o,subgroups:Y(r,"heading"),isManaged:l,managedResourceSummary:l?r[0].managedResourceSummary:void 0})})),t.push({heading:n,subgroups:Y(s,"heading")})})),this.sortGroupsByHeading(t),qd.filterModel.asFilterModel.addTags(),this.lastApplication=e,this.groupsUpdatedStream.next(t)}}((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Ld(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);a&&r&&jd(t,n,r)})([da(25)],Od.prototype,"updateLoadBalancerGroups",1);const Yd=[{model:"awaitingJudgement",type:"boolean",clearValue:!1},{model:"filter",param:"q",clearValue:"",type:"string",filterLabel:"search"},{model:"pipeline",param:"pipeline",type:"trueKeyObject",clearValue:{}},{model:"status",type:"trueKeyObject",clearValue:{}},{model:"tags",type:"trueKeyObject",clearValue:{}}];class $d{constructor(){this.expandSubject=new At;const{transitionService:e}=hi.$uiRouter;this.configViewStateCache=qp.createCache("executionFilters",{version:2,maxAge:24*di.maxPipelineAgeDays*60*60*1e3}),this.asFilterModel=rd.configureFilterModel(this,Yd),rd.registerRouterHooks(this.asFilterModel,"**.application.pipelines.executions.**"),this.asFilterModel.activate(),e.onBefore({entering:e=>!(!e.self.name.match(".application.pipelines.executions$")&&!e.self.name.match(".application.pipelines.executionDetails.execution$"))},(e=>{this.mostRecentApplication=e.params().application,this.assignViewStateFromCache()})),Object.defineProperty(this.asFilterModel.sortFilter,"count",{get:()=>this.groupCount,set:e=>{this.groupCount=e,this.cacheConfigViewState()}}),Object.defineProperty(this.asFilterModel.sortFilter,"groupBy",{get:()=>this.groupBy,set:e=>{this.groupBy=e,this.cacheConfigViewState()}}),Object.defineProperty(this.asFilterModel.sortFilter,"showDurations",{get:()=>this.showDurations,set:e=>{this.showDurations=e,this.cacheConfigViewState()}}),this.asFilterModel.activate()}assignViewStateFromCache(){const e=this.getCachedViewState();this.groupCount=e.count,this.groupBy=e.groupBy,this.showDurations=e.showDurations}getCachedViewState(e){e=e||this.mostRecentApplication||"#global";const t=this.configViewStateCache.get(e)||{},n=this.configViewStateCache.get("#global")||{};return this.configViewStateCache.touch(e),le({count:2,groupBy:"name",showDurations:!0},t,null!=n.showDurations?{showDurations:n.showDurations}:void 0)}cacheConfigViewState(){const e=this.getCachedViewState();e.showDurations=this.showDurations,Object.keys(this.asFilterModel.sortFilter.pipeline).length||(e.count=this.groupCount,e.groupBy=this.groupBy);const t=this.mostRecentApplication||"#global";if(this.configViewStateCache.put(t,e),"#global"!==t){const e=this.getCachedViewState("#global");e.showDurations=this.showDurations,this.configViewStateCache.put("#global",e)}}}const Hd=[{model:"account",param:"acct",type:"trueKeyObject"},{model:"detail",param:"detail",type:"trueKeyObject"},{model:"filter",param:"q",clearValue:"",type:"string",filterLabel:"search"},{model:"providerType",type:"trueKeyObject",filterLabel:"provider"},{model:"region",param:"reg",type:"trueKeyObject"},{model:"showLoadBalancers",param:"hideLoadBalancers",displayOption:!0,type:"inverse-boolean"},{model:"showServerGroups",param:"hideServerGroups",displayOption:!0,type:"inverse-boolean"},{model:"stack",param:"stack",type:"trueKeyObject"}];class Vd{constructor(){this.asFilterModel=rd.configureFilterModel(this,Hd),rd.registerRouterHooks(this.asFilterModel,"**.application.insight.firewalls.**"),this.asFilterModel.activate()}}n("spinnaker.core.securityGroup.filter.model",[]).service("securityGroupFilterModel",Vd);class Jd{constructor(){this.groupsUpdatedStream=new At}addSearchFields(e){e.searchField||(e.searchField=[e.name,e.id,e.accountName,e.region,e.vpcName,e.vpcId,F(e.usages.serverGroups,"name").join(" "),F(e.usages.loadBalancers,"name").join(" ")].join(" "))}checkSearchTextFilter(e){const t=Xd.filterModel.asFilterModel.sortFilter.filter;if(!t)return!0;if(t.includes("vpc:")){const[,n]=/vpc:([\w-]*)/.exec(t);return e.vpcName.toLowerCase()===n.toLowerCase()}return this.addSearchFields(e),t.split(" ").every((t=>e.searchField.includes(t)))}clearFilters(){Xd.filterModel.asFilterModel.clearFilters(),Xd.filterModel.asFilterModel.applyParamsToUrl()}filterSecurityGroupsForDisplay(e){const t=rd,n=Xd.filterModel.asFilterModel;return A(e).filter((e=>this.checkSearchTextFilter(e))).filter((e=>t.checkAccountFilters(n)(e))).filter((e=>t.checkRegionFilters(n)(e))).filter((e=>t.checkStackFilters(n)(e))).filter((e=>t.checkDetailFilters(n)(e))).filter((e=>t.checkProviderFilters(n)(e))).value()}sortGroupsByHeading(e){const t=Xd.filterModel.asFilterModel.groups;this.diffSubgroups(t,e),t.sort(((e,t)=>e.heading<t.heading?-1:e.heading>t.heading?1:0))}diffSubgroups(e,t){const n=[];e.forEach(((e,a)=>{const i=(t||[]).find((t=>t.heading===e.heading&&t.vpcName===e.vpcName));i?(i.securityGroup&&(e.securityGroup=i.securityGroup),i.subgroups&&this.diffSubgroups(e.subgroups,i.subgroups),(e.hasOwnProperty("isManaged")||i.hasOwnProperty("isManaged"))&&(e.isManaged=i.isManaged,e.managedResourceSummary=i.managedResourceSummary)):n.push(a)})),n.reverse().forEach((t=>{e.splice(t,1)})),t.forEach((t=>{V(e,{heading:t.heading})||e.push(t)}))}updateSecurityGroups(e){if(!e&&(e=this.lastApplication,!this.lastApplication))return null;const t=[],n=this.filterSecurityGroupsForDisplay(e.securityGroups.data),a=ie(n,"account");ee(a,((e,n)=>{const a=ie(e,"name"),i=[];ee(a,((e,t)=>{const n=[];e.forEach((e=>{const t=e.vpcName?`${e.region} (${e.vpcName})`:e.region;n.push({heading:t,vpcName:e.vpcName,securityGroup:e,isManaged:!!e.isManaged,managedResourceSummary:e.managedResourceSummary})}));const a=n.every((({isManaged:e})=>e));i.push({heading:t,subgroups:Y(n,["heading","vpcName"]),isManaged:a,managedResourceSummary:a?n[0].managedResourceSummary:void 0})})),t.push({heading:n,subgroups:Y(i,"heading")})})),this.sortGroupsByHeading(t),Xd.filterModel.asFilterModel.addTags(),this.lastApplication=e,this.groupsUpdatedStream.next(t)}}const Wd={},Kd={},qd={},Xd={},Zd={};function _d(){Wd.filterModel=new Bd,Wd.filterService=new Id,Wd.multiselectModel=new Fd,Kd.filterModel=new $d,qd.filterModel=new Gd,qd.filterService=new Od,Zd.filterModel=new Qd,Zd.filterService=new Ud,Xd.filterModel=new Vd,Xd.filterService=new Jd,di.checkForUpdates&&no.initialize()}var eu=Object.defineProperty,tu=Object.getOwnPropertyDescriptor;const nu=[{name:"Today",after:()=>En.local().startOf("day").toMillis()},{name:"Yesterday",after:()=>En.local().startOf("day").minus(bn.fromObject({days:1})).toMillis()},{name:"This Week",after:()=>En.local().startOf("week").toMillis()},{name:"Last Week",after:()=>En.local().startOf("week").minus(bn.fromObject({weeks:1})).toMillis()},{name:"Last Month",after:()=>En.local().startOf("month").toMillis()},{name:"This Year",after:()=>En.local().startOf("year").toMillis()},{name:"Prior Years",after:()=>0}];class au{static groupByTimeBoundary(e){return ie(e,(e=>nu.find((t=>(e.startTime||e.buildTime)>t.after())).name))}static updateExecutionGroups(e=this.lastApplication){if(!e)return null;(e.executions.data||[]).forEach((t=>this.fixName(t,e)));const t=this.filterExecutionsForDisplay(e.executions.data,e),n=this.groupExecutions(t,e);this.applyGroupsToModel(n),Kd.filterModel.asFilterModel.addTags(),this.lastApplication=e,this.groupsUpdatedStream.next(n)}static doesPipelineMatchCheckedTags(e,t){if(0===t.length||!e.tags||0===e.tags.length)return!1;const n=t.map((e=>e.split(":").map(decodeURIComponent))).map((([e,t])=>({name:e,value:t}))),a=ie(n,"name");return Object.keys(a).every((t=>{const n=a[t].map((e=>e.value)),i=(e.tags||[]).filter((e=>e.name===t)).map((e=>e.value));return n.some((e=>i.includes(e)))}))}static tagsFilter(e,t){const n=Kd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(n.tags)){const a=t.pipelineConfigs.data.filter((e=>this.doesPipelineMatchCheckedTags(e,rd.getCheckValues(n.tags))));return Z(a.map((e=>e.id)),e.pipelineConfigId)}return!0}static pipelineNameFilter(e){const t=Kd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(t.pipeline)){const n=rd.getCheckValues(t.pipeline);return Z(n,e.name)}return!0}static getValuesAsString(e,t=[]){return"string"==typeof e?e:"number"==typeof e?""+e:e instanceof Array?e.map((e=>this.getValuesAsString(e,t))).join(" "):e instanceof Object?Object.keys(e).map((n=>t.includes(n)?"":this.getValuesAsString(e[n],t))).join(" "):""}static addSearchText(e){if(e.searchField)return;const t=[e.name];t.push(e.id),t.push(this.getValuesAsString(e.trigger,["parentExecution"])),e.searchField=t.join(" ").toLowerCase()}static textFilter(e){const t=Kd.filterModel.asFilterModel.sortFilter.filter.toLowerCase();return!t||(this.addSearchText(e),e.searchField.includes(t))}static statusFilter(e){const t=Kd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(t.status)){const n=rd.getCheckValues(t.status);return Z(n,e.status)}return!0}static awaitingJudgementFilter(e){return!Kd.filterModel.asFilterModel.sortFilter.awaitingJudgement||e.stages.some((({type:e,status:t})=>"manualJudgment"===e&&"RUNNING"===t))}static filterExecutionsForDisplay(e,t){return A(e).filter((e=>this.textFilter(e))).filter((e=>this.tagsFilter(e,t))).filter((e=>this.pipelineNameFilter(e))).filter((e=>this.statusFilter(e))).filter((e=>this.awaitingJudgementFilter(e))).value()}static addEmptyPipelines(e,t){const n=(t.pipelineConfigs.data||[]).concat(t.strategyConfigs.data||[]),a=Kd.filterModel.asFilterModel.sortFilter,i={};e.forEach((e=>i[e.heading]=!0));let r=[];r=this.isFilterable(a.pipeline)||this.isFilterable(a.status)||a.filter||this.isFilterable(a.tags)?n.filter((e=>{const t=(a.filter||"").toLowerCase().includes(e.name.toLowerCase()),n=this.doesPipelineMatchCheckedTags(e,rd.getCheckValues(a.tags));return!i[e.name]&&(a.pipeline[e.name]||t||n)})):n.filter((e=>!i[e.name])),r.forEach((t=>{e.push({heading:t.name,config:t,executions:[],targetAccounts:this.extractAccounts(t),fromTemplate:t&&"templatedPipeline"===t.type||!1})}))}static extractAccounts(e){if(!e)return[];const t=[];return(e.stages||[]).forEach((e=>{const n=$m.pipeline.getStageConfig(e);n&&n.configAccountExtractor&&t.push(...n.configAccountExtractor(e))})),f(ce(t)).filter((e=>!e.includes("${")))}static fixName(e,t){const n=t.pipelineConfigs.data.find((t=>t.id===e.pipelineConfigId));n&&(e.name=n.name)}static groupExecutions(e,t){const n=[];let a=[];ee(ie(e,"name"),(e=>{a=a.concat(e.sort(((e,t)=>this.executionSorter(e,t))))})),a.forEach((e=>{const n=t.pipelineConfigs.data.find((t=>t.id===e.pipelineConfigId));null!=n&&"templatedPipeline"===n.type&&(e.fromTemplate=!0)}));const i=Kd.filterModel.asFilterModel.sortFilter;if("name"===i.groupBy){const e=ie(a,"name");ee(e,((e,a)=>{var i,r;const s=t.pipelineConfigs.data.concat(null!=(r=null==(i=t.strategyConfigs)?void 0:i.data)?r:[]).find((t=>t.id===e[0].pipelineConfigId));e.sort(((e,t)=>this.executionSorter(e,t))),n.push({heading:a,config:s||null,executions:e,runningExecutions:e.filter((e=>e.isActive)),targetAccounts:this.extractAccounts(s),fromTemplate:s&&"templatedPipeline"===s.type||!1})})),this.addEmptyPipelines(n,t)}if("timeBoundary"===i.groupBy){const e=this.groupByTimeBoundary(a);ee(e,((e,t)=>{e.sort(((e,t)=>this.executionSorter(e,t))),n.push({heading:t,config:null,executions:e,runningExecutions:e.filter((e=>e.isActive))})}))}return"none"===i.groupBy&&(a.sort(((e,t)=>this.executionSorter(e,t))),n.push({heading:"",executions:a,runningExecutions:[]})),n}static diffExecutionGroups(e,t){const n=[];return t.forEach((t=>{const a=e.find((e=>e.heading===t.heading));a?this.executionsAreDifferent(a,t)?n.push(t):n.push(a):n.push(t)})),e.forEach((e=>e.executions.sort(((e,t)=>this.executionSorter(e,t))))),n}static executionsAreDifferent(e,t){let n=!1;return e.executions.forEach((e=>{const a=t.executions.find((t=>t.id===e.id));a?e.stringVal!==a.stringVal&&(n=!0,Xe.debug("change detected, updating execution:",e.id)):(n=!0,Xe.debug("execution no longer found, removing:",e.id))})),t.executions.forEach((t=>{e.executions.find((e=>e.id===t.id))||(n=!0,Xe.debug("new execution found, adding",t.id),e.executions.push(t))})),n}static applyGroupsToModel(e){const t=Kd.filterModel.asFilterModel;t.groups=this.diffExecutionGroups(t.groups,e).sort(((e,t)=>this.executionGroupSorter(e,t)))}static executionGroupSorter(e,t){return"timeBoundary"===Kd.filterModel.asFilterModel.sortFilter.groupBy?(t.executions[0].startTime||t.executions[0].buildTime)-(e.executions[0].startTime||e.executions[0].buildTime):e.config&&t.config?e.config.strategy===t.config.strategy?e.config.index-t.config.index:e.config.strategy?1:-1:e.config?-1:t.config?1:e.heading<t.heading?-1:e.heading>t.heading?1:0}static executionSorter(e,t){return e.isActive&&t.isActive?t.startTime-e.startTime:e.isActive?-1:t.isActive?1:e.endTime||t.endTime?e.endTime?t.endTime?t.startTime-e.startTime:1:-1:t.buildTime-e.buildTime}static clearFilters(){Kd.filterModel.asFilterModel.clearFilters(),Kd.filterModel.asFilterModel.applyParamsToUrl()}}au.groupsUpdatedStream=new At,au.lastApplication=null,au.isFilterable=rd.isFilterable,((e,t,n,a)=>{for(var i,r=a>1?void 0:a?tu(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);a&&r&&eu(t,n,r)})([da(25)],au,"updateExecutionGroups",1);class iu{constructor(e,t,n){this.$q=e,this.$state=t,this.$timeout=n,this.runningLimit=di.maxRunningExecutionsToRetrieve||30,this.ignoredStringValFields=["asg","commits","history","hydrator","hydrated","instances","requisiteIds","requisiteStageRefIds","$$hashKey"]}get activeStatuses(){return["RUNNING","SUSPENDED","PAUSED","NOT_STARTED"]}getRunningExecutions(e){return this.getFilteredExecutions(e,this.activeStatuses,this.runningLimit,null,!0)}getFilteredExecutions(e,t,n,a=null,i=!1){const r=t.map((e=>e.toUpperCase())).join(",")||null;return(a?Si("/executions").query({limit:n,pipelineConfigIds:a,statuses:t}).get():Si("/applications").path(e,"pipelines").query({limit:n,statuses:r,pipelineConfigIds:a,expand:i}).get()).then((e=>e?(e.forEach((e=>(e.hydrated=i,this.cleanExecutionForDiffing(e)))),e):[]))}getExecutions(e,t=null,n=!1){const a=Kd.filterModel.asFilterModel.sortFilter,i=rd.getCheckValues(a.tags),r=Object.keys(a.pipeline),s=Object.keys(te(a.status||{},ae)),o=a.count;return t&&(r.length||i.length)?this.getConfigIdsFromFilterModel(t).then((e=>this.getFilteredExecutions(t.name,s,o,e,n))):this.getFilteredExecutions(e,s,o,null,n)}getExecution(e,t=[]){return Si("/pipelines").path(e).get().then((e=>{const{application:n,name:a}=e;if(e.hydrated=!0,this.cleanExecutionForDiffing(e),n&&a){const i=t.find((t=>t.id===e.pipelineConfigId));return i?(e.pipelineConfig=i,Promise.resolve(e)):Si("/applications").path(n,"pipelineConfigs",a).get().then((t=>(e.pipelineConfig=t,e))).catch((()=>e))}return e}))}transformExecutions(e,t,n=[]){t&&t.length&&t.forEach((t=>{const a=this.stringifyExecution(t),i=n.find((e=>e.id===t.id));i&&i.stringVal&&i.stringVal===a||(t.stringVal=a,Yp.transformExecution(e,t))}))}getConfigIdsFromFilterModel(e){const t=Kd.filterModel.asFilterModel.sortFilter,n=rd.getCheckValues(t.tags),a=Object.keys(t.pipeline);return e.pipelineConfigs.activate(),e.pipelineConfigs.ready().then((()=>{const t=e.pipelineConfigs.data.concat(e.strategyConfigs.data),i=a.map((e=>{const n=t.find((t=>t.name===e));return n?n.id:null})).filter((e=>!!e)),r=t.filter((e=>au.doesPipelineMatchCheckedTags(e,n))).map((e=>e.id));return i.concat(f(r))}))}cleanExecutionForDiffing(e){(e.stages||[]).forEach((e=>this.removeInstances(e)))}toggleDetails(e,t,n){const a=this.$state.current.name.endsWith(".executionDetails.execution");if(e.id===this.$state.params.executionId&&this.$state.current.name.includes(".execution")&&void 0===t)return void this.$state.go("^");const i=t||0;let r=m(e,["stageSummaries",i]);if(r&&"group"===r.type){if(void 0===n)return;r=m(r,["groupStages",n])}r=r||{firstActiveStage:0};const s={executionId:e.id,stage:i,subStage:n,step:r.firstActiveStage};if(void 0===n&&"group"===r.type)return s.stage=null,void(s.step=null);this.$state.includes("**.execution",s)?a||this.$state.go("^"):this.$state.current.name.endsWith(".execution")||a?this.$state.go(".",s):this.$state.go(".execution",s)}removeInstances(e){e.context&&(delete e.context.instances,delete e.context.asg,e.context.targetReferences&&e.context.targetReferences.forEach((e=>{delete e.instances,delete e.asg})))}startAndMonitorPipeline(e,t,n){const{executionService:a}=hi;return id.triggerPipeline(e.name,t,n).then((t=>a.waitUntilTriggeredPipelineAppears(e,t)))}waitUntilTriggeredPipelineAppears(e,t){return((e,t=1e3,n=0)=>{let a,i=0;const r=()=>(i++,0===n||i<=n?e().catch((()=>(a=_e(r,t),a))):e());return{promise:r(),cancel:()=>{a&&_e.cancel(a)}}})((()=>this.getExecution(t).then((()=>e.executions.refresh()))),1e3,10)}waitUntilPipelineIsCancelled(e,t){return this.waitUntilExecutionMatches(t,(e=>"CANCELED"===e.status)).then((()=>e.executions.refresh()))}waitUntilPipelineIsDeleted(e,t){const n=this.$q.defer();return this.getExecution(t).then((()=>this.$timeout((()=>this.waitUntilPipelineIsDeleted(e,t).then(n.resolve)),1e3)),(()=>n.resolve())),n.promise.then((()=>e.executions.refresh())),n.promise}cancelExecution(e,t,n,a){return Si("/pipelines").path(t,"cancel").query({force:n,reason:a}).put().then((()=>this.waitUntilPipelineIsCancelled(e,t))).catch((e=>{throw e&&e.data?e.message:null}))}pauseExecution(e,t){return Si("/pipelines").path(t,"pause").put().then((()=>this.waitUntilExecutionMatches(t,(e=>"PAUSED"===e.status)))).then((()=>e.executions.refresh())).catch((e=>{throw e&&e.data?e.message:null}))}resumeExecution(e,t){return Si("/pipelines").path(t,"resume").put().then((()=>this.waitUntilExecutionMatches(t,(e=>"RUNNING"===e.status)))).then((()=>e.executions.refresh())).catch((e=>{throw e&&e.data?e.message:null}))}deleteExecution(e,t){return Si("/pipelines").path(t).delete().then((()=>this.waitUntilPipelineIsDeleted(e,t))).then((()=>e.executions.refresh())).catch((e=>{throw e&&e.data?e.message:null}))}waitUntilExecutionMatches(e,t){return this.getExecution(e).then((n=>t(n)?n:this.$timeout((()=>this.waitUntilExecutionMatches(e,t)),1e3)))}getSectionCacheKey(e,t,n){return["pipeline",e,t,n].join("#")}getProjectExecutions(e,t=1){return Si("/projects").path(e,"pipelines").query({limit:t}).get().then((e=>e&&e.length?(e.forEach((e=>Yp.transformExecution({},e))),e.sort(((e,t)=>t.startTime-(e.startTime||Date.now())))):[]))}addExecutionsToApplication(e,t=[]){if(e.executions.data&&e.executions.data.length&&t.length){const n=e.executions.data,a=e.runningExecutions.data,i=[];return n.forEach(((n,r)=>{const s=t.find((e=>e.id===n.id)),o=a.find((e=>e.id===n.id));s&&n.stringVal&&s.stringVal&&n.stringVal!==s.stringVal&&(n.status!==s.status||n.hydrated===s.hydrated)&&(e.executions.data[r]=s),s||o||i.push(r)})),i.reverse().forEach((e=>n.splice(e,1))),t.forEach((e=>{n.filter((t=>t.id===e.id)).length||n.push(e)})),[...n]}return t}mergeRunningExecutionsIntoExecutions(e){let t=!1;e.runningExecutions.data.forEach((n=>{const a=e.executions.data.findIndex((e=>e.id===n.id));if(-1!==a){const i=e.executions.data[a].stringVal;n.stringVal!==i&&(t=!0,e.executions.data[a]=n)}else t=!0,e.executions.data.push(n)})),e.executions.data.forEach((t=>{var n;t.isActive&&e.runningExecutions.data.every((e=>e.id!==t.id))&&this.getExecution(t.id,null==(n=e.pipelineConfigs)?void 0:n.data).then((t=>{this.updateExecution(e,t)}))})),t&&!e.executions.reloadingForFilters&&e.executions.dataUpdated()}removeCompletedExecutionsFromRunningData(e){const t=e.executions.data,n=e.runningExecutions.data;t.forEach((e=>{const t=n.findIndex((t=>e.id===t.id));-1===t||e.isActive||n.splice(t,1)})),e.runningExecutions.dataUpdated()}updateExecution(e,t,n=e.executions){n.data&&n.data.length&&n.data.forEach(((a,i)=>{t.id===a.id&&(t.stringVal=this.stringifyExecution(t),t.status===a.status&&a.stringVal===t.stringVal||(Yp.transformExecution(e,t),n.data[i]=t,n.dataUpdated()))}))}hydrate(e,t){if(t.hydrator)return t.hydrator;if(t.hydrated)return Promise.resolve(t);const n=this.getExecution(t.id).then((n=>(Yp.transformExecution(e,n),t.stages.forEach(((e,a)=>{const i=n.stages.length===t.stages.length&&n.stages[a].id===e.id?n.stages[a]:n.stages.find((t=>e.id===t.id));i&&(e.context=i.context,e.outputs=i.outputs,e.tasks=i.tasks)})),t.hydrated=!0,t.graphStatusHash=n.graphStatusHash,t.stageSummaries=n.stageSummaries,t)));return t.hydrator=Promise.resolve(n),t.hydrator}getLastExecutionForApplicationByConfigId(e,t){return this.getFilteredExecutions(e,[],1).then((e=>e.filter((e=>e.pipelineConfigId===t)))).then((e=>e[0]))}getExecutionsForConfigIds(e,t={}){const{limit:n,statuses:a,transform:i,application:r}=t;return Si("/executions").query({limit:n,pipelineConfigIds:(e||[]).join(","),statuses:a}).get().then((e=>e?(i&&r&&e.forEach((e=>Yp.transformExecution(r,e))),e.sort(((e,t)=>(t.buildTime||0)-(e.buildTime||0)))):[])).catch((()=>[]))}patchExecution(e,t,n){return Si("/pipelines").path(e,"stages",t).patch(n)}stringifyExecution(e){const t={...e};return t.stages=t.stages.filter((e=>"SUCCEEDED"!==e.status&&"NOT_STARTED"!==e.status)),this.stringify(t)}stringify(e){return Hi.makeSortedStringFromAngularObject({...e},this.ignoredStringValFields)}}const ru="spinnaker.core.pipeline.executions.service";n(ru,[ca]).factory("executionService",["$q","$state","$timeout",(e,t,n)=>new iu(e,t,n)]),_c.addInjectable("executionService");oi("a.spelLink {\n margin-left: 10px;\n -webkit-animation: fadein 1s;\n animation: fadein 1s;\n}\n@keyframes fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@-webkit-keyframes fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\ninput.borderless,\n.borderless select {\n border: none;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.button-input {\n display: flex;\n flex-direction: row;\n align-items: center;\n border: 1px var(--color-alto) solid;\n border-radius: 4px;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n background: var(--color-white);\n}\n.button-input .input {\n display: flex;\n flex-direction: row;\n flex-grow: 1;\n}\n.button-input.invalid {\n border-color: var(--color-danger);\n outline: 0;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px var(--color-danger-light);\n}\n.button-input.focus {\n border-color: var(--color-accent);\n outline: 0;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.button-input .input select,\n.button-input input {\n flex-grow: 1;\n}\n.button-input.number {\n width: 245px;\n}\n.button-input:focus {\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.button-input .btn-group {\n margin-left: 5px;\n}\n.button-input .btn-group button.active {\n font-weight: 700;\n}\n.button-input .btn-group button:focus {\n outline: none;\n}\n.button-input .form-control:focus {\n box-shadow: none;\n}\n.button-input .select2-container .select2-choice,\n.button-input .select2-dropdown-open .select2-choice,\n.button-input .select2-container-active {\n border: none;\n background-image: none;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\nspan.marker {\n display: inline;\n padding: 0.2em 0.6em 0.3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: var(--color-white);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25em;\n}\nspan.marker.param {\n background-color: var(--color-alert);\n color: var(--color-dovegray);\n}\nspan.marker.stage {\n background-color: var(--color-accessory-light);\n color: var(--color-mineshaft);\n}\nspan.marker.function {\n background-color: var(--color-accent-g1);\n color: var(--color-primary);\n}\nspan.marker.value {\n background-color: var(--color-accent-g1);\n color: var(--color-primary);\n}\nspan.marker.param:before {\n content: 'p';\n}\nspan.marker.stage:before {\n content: 'stage';\n}\nspan.marker.function:before {\n content: 'fn';\n}\n.spel-dropdown {\n max-height: 400px;\n overflow-y: scroll;\n}\n.spel-value-separator {\n font-size: 70%;\n color: var(--color-primary);\n}\n.textcomplete-item.active .spel-value-separator {\n color: var(--color-white);\n}\n.monospace {\n font-family: monospace;\n}\n");class su extends ot.Component{constructor(e){super(e),this.destroy$=new At,this.onChange=e=>{this.props.onChange(e.target.value)},this.state={textcompleteConfig:[]},this.autocompleteService=new Lp(Ze,new iu(Ze,{},_e)),vt(this.autocompleteService.addPipelineInfo(this.props.pipeline)).pipe(It(this.destroy$)).subscribe((e=>{this.setState({textcompleteConfig:e})})),this.spelInputRef=ot.createRef()}componentWillUnmount(){this.$input.off("change",this.onChange),this.destroy$.next()}componentDidMount(){this.$input=hn(this.spelInputRef.current),this.renderSuggestions(),this.$input.on("change",this.onChange)}componentDidUpdate(e,t){t.textcompleteConfig!==this.state.textcompleteConfig&&this.renderSuggestions()}renderSuggestions(){this.$input.attr("contenteditable","true"),this.$input.textcomplete(this.state.textcompleteConfig,{maxCount:1e3,zIndex:9e3,dropdownClassName:"dropdown-menu textcomplete-dropdown spel-dropdown"})}render(){return ot.createElement("input",{type:"text",placeholder:this.props.placeholder,className:Cn({"form-control":!0,"no-doc-link":!this.props.docLink}),value:this.props.value||"",onChange:this.onChange,ref:this.spelInputRef})}}su.defaultProps={placeholder:""};const ou=(e,t,n,a,i)=>class extends Ep{constructor(e){super(e,t)}render(){return ot.createElement(zp,{label:n,helpKey:i},ot.createElement(su,{placeholder:a,value:this.props.artifact[e]||"",onChange:n=>{const a=p(this.props.artifact);a[e]=n,a.type=t,this.props.onChange(a)},pipeline:this.props.pipeline,docLink:!0}))}},lu=class extends ot.Component{constructor(e){if(super(e),this.convert=(e,t)=>{if(!t||0===t.length)return[t,""];try{return[e(t),""]}catch(e){return H(lu.DOMBase64Errors,e.code)?["",lu.DOMBase64Errors[e.code]]:["",e.message]}},this.onNameChanged=e=>{const t=p(this.props.artifact);t.name=e,this.props.onChange(t)},this.onContentChanged=e=>{const[t,n]=this.convert(btoa,e.target.value);if(!n){const e=p(this.props.artifact);e.reference=t,this.props.onChange(e)}this.setState({decoded:e.target.value,encodeDecodeError:n})},"embedded/base64"!==e.artifact.type){const t=p(e.artifact);t.type="embedded/base64",e.onChange(t)}const[t,n]=this.convert(atob,e.artifact.reference);this.state={decoded:t,encodeDecodeError:n}}render(){const{pipeline:e}=this.props,{name:t,reference:n}=this.props.artifact,{decoded:a,encodeDecodeError:i}=this.state;return ot.createElement(ot.Fragment,null,ot.createElement(zp,{label:"Name"},ot.createElement(su,{placeholder:"base64-artifact",value:t,pipeline:e,onChange:this.onNameChanged,docLink:!1})),ot.createElement(zp,{label:"Contents"},ot.createElement("textarea",{autoCapitalize:"none",autoComplete:"off",rows:16,className:"form-control code",value:a,onChange:this.onContentChanged}),ot.createElement(zi,{text:n,toolTip:"Copy base64-encoded content to clipboard",analyticsLabel:"Copy Base64 Artifact Content"})),i&&ot.createElement("div",{className:"form-group row"},ot.createElement("div",{className:"col-md-12 error-message"},"Error encoding/decoding artifact content: ",i)))}};let cu=lu;cu.DOMBase64Errors={5:"The string to encode contains characters outside the latin1 range."};const pu={label:"Base64",typePattern:vp.EMBEDDED_BASE64,type:"embedded/base64",description:"An artifact that includes its referenced resource as part of its payload.",key:"base64",isDefault:!1,isMatch:!0,editCmp:ou("name","embedded/base64","Name","base64-artifact","")},du={label:"Base64",typePattern:vp.EMBEDDED_BASE64,type:"embedded/base64",description:"An artifact that includes its referenced resource as part of its payload.",key:"default.base64",isDefault:!0,isMatch:!1,editCmp:cu},uu="bitbucket/file",mu={label:"Bitbucket",typePattern:vp.BITBUCKET_FILE,type:uu,description:"A file stored in git, hosted by Bitbucket.",key:"bitbucket",isDefault:!1,isMatch:!0,editCmp:ou("name",uu,"File path","manifests/frontend.yaml","pipeline.config.expectedArtifact.git.name")},gu={label:"Bitbucket",typePattern:vp.BITBUCKET_FILE,type:uu,description:"A file stored in git, hosted by Bitbucket.",key:"default.bitbucket",isDefault:!0,isMatch:!1,editCmp:class extends Ep{constructor(e){super(e,uu),this.onReferenceChanged=e=>{const t=p(this.props.artifact);t.reference=e,this.props.onChange(t)},this.onFilePathChanged=e=>{const t=p(this.props.artifact);t.name=e,this.props.onChange(t)}}render(){return ot.createElement(ot.Fragment,null,ot.createElement(zp,{label:"Object path",helpKey:"pipeline.config.expectedArtifact.defaultBitbucket.reference"},ot.createElement(su,{placeholder:"https://api.bitbucket.com/rest/api/1.0/$PROJECTS/$PROJECTKEY/repos/$REPONAME/raw/$FILEPATH",value:this.props.artifact.reference,onChange:this.onReferenceChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(zp,{label:"File Path",helpKey:"pipeline.config.expectedArtifact.defaultBitbucket.filepath"},ot.createElement(su,{placeholder:"path/to/file.yml",onChange:this.onFilePathChanged,value:this.props.artifact.name,pipeline:this.props.pipeline,docLink:!0})))}}},hu="custom/object";class fu extends Ep{constructor(e){super(e,hu),this.onTypeChanged=e=>{this.updateArtifact({type:e})},this.onNameChanged=e=>{this.updateArtifact({name:e})},this.onVersionChanged=e=>{this.updateArtifact({version:e})},this.onLocationChanged=e=>{this.updateArtifact({location:e})},this.onReferenceChanged=e=>{this.updateArtifact({reference:e})},this.updateArtifact=e=>{const t=p(this.props.artifact);le(t,e),this.props.onChange(t)}}render(){return ot.createElement(ot.Fragment,null,ot.createElement(zp,{label:"Type"},ot.createElement(su,{placeholder:"",value:this.props.artifact.type,onChange:this.onTypeChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(zp,{label:"Name"},ot.createElement(su,{placeholder:"",value:this.props.artifact.name,onChange:this.onNameChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(zp,{label:"Version"},ot.createElement(su,{placeholder:"",value:this.props.artifact.version,onChange:this.onVersionChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(zp,{label:"Location"},ot.createElement(su,{placeholder:"",value:this.props.artifact.location,onChange:this.onLocationChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(zp,{label:"Reference"},ot.createElement(su,{placeholder:"",value:this.props.artifact.reference,onChange:this.onReferenceChanged,pipeline:this.props.pipeline,docLink:!0})))}}const vu={label:"Custom",typePattern:vp.CUSTOM_OBJECT,type:hu,description:"A custom-defined artifact.",key:"custom",isDefault:!1,isMatch:!0,editCmp:fu},Au={label:"Custom",typePattern:vp.CUSTOM_OBJECT,type:hu,description:"A custom-defined artifact.",key:"default.custom",isDefault:!0,isMatch:!1,editCmp:fu},Eu="docker/image",bu={label:"Docker",typePattern:vp.DOCKER_IMAGE,type:Eu,isDefault:!1,isMatch:!0,description:"A Docker image to be deployed.",key:"docker",editCmp:ou("name",Eu,"Docker image","gcr.io/project/image","pipeline.config.expectedArtifact.docker.name")},yu={label:"Docker",typePattern:vp.DOCKER_IMAGE,type:Eu,isDefault:!0,isMatch:!1,description:"A Docker image to be deployed.",key:"default.docker",editCmp:class extends Ep{constructor(e){super(e,Eu),this.onReferenceChanged=e=>{const t=p(this.props.artifact);t.reference=e,this.props.onChange((e=>{const t=e.reference;if(u(t))return e;const n=t.indexOf("@"),a=t.lastIndexOf(":");if(n>=0){const n=t.split("@");e.name=n[0],e.version=n[1]}else a>0?(e.name=t.substring(0,a),e.version=t.substring(a+1)):e.name=t;return e})(t))}}render(){return ot.createElement(zp,{label:"Object path",helpKey:"pipeline.config.expectedArtifact.defaultDocker.reference"},ot.createElement(su,{placeholder:"gcr.io/project/image@sha256:9efcc2818c9...",value:this.props.artifact.reference,onChange:this.onReferenceChanged,pipeline:this.props.pipeline,docLink:!0}))}}},Cu="gcs/object",wu={label:"GCS",typePattern:vp.GCS_OBJECT,type:Cu,description:"A GCS object.",key:"gcs",isDefault:!1,isMatch:!0,editCmp:ou("name",Cu,"Object path","gs://bucket/path/to/file","pipeline.config.expectedArtifact.gcs.name")},xu={label:"GCS",typePattern:vp.GCS_OBJECT,type:Cu,description:"A GCS object.",key:"default.gcs",isDefault:!0,isMatch:!1,editCmp:class extends Ep{constructor(e){super(e,Cu),this.onReferenceChange=e=>{if(u(e))return;const t=p(this.props.artifact);if(t.reference=e,e.indexOf("#")>=0){const n=e.split("#");t.name=n[0],t.version=n[1]}else t.name=e;this.props.onChange(t)}}render(){return ot.createElement(zp,{label:"Object path",helpKey:"pipeline.config.expectedArtifact.defaultGcs.reference"},ot.createElement(su,{placeholder:"gs://bucket/path/to/file",value:this.props.artifact.reference,onChange:this.onReferenceChange,pipeline:this.props.pipeline,docLink:!0}))}}},ku="github/file",Bu={label:"GitHub",description:"A file stored in git, hosted by GitHub.",key:"github",typePattern:vp.GITHUB_FILE,type:ku,isDefault:!1,isMatch:!0,editCmp:ou("name",ku,"File path","manifests/frontend.yaml","pipeline.config.expectedArtifact.git.name")},Su={label:"GitHub",typePattern:vp.GITHUB_FILE,type:ku,description:"A file stored in git, hosted by GitHub.",key:"default.github",isDefault:!0,isMatch:!1,editCmp:class extends Ep{constructor(e){super(e,ku),this.pathRegex=new RegExp("/repos/[^/]*/[^/]*/contents/(.*)$"),this.onReferenceChange=e=>{const t=this.pathRegex.exec(e),n=p(this.props.artifact);null!==t?(n.name=t[1],n.reference=e):(n.name=e,n.reference=e),this.props.onChange(n)}}render(){return ot.createElement(ot.Fragment,null,ot.createElement(zp,{label:"Content URL",helpKey:"pipeline.config.expectedArtifact.defaultGithub.reference"},ot.createElement(su,{placeholder:"https://api.github.com/repos/$ORG/$REPO/contents/$FILEPATH",value:this.props.artifact.reference,onChange:this.onReferenceChange,pipeline:this.props.pipeline,docLink:!1})),ot.createElement(zp,{label:"Commit/Branch",helpKey:"pipeline.config.expectedArtifact.defaultGithub.version"},ot.createElement(su,{placeholder:"master",value:this.props.artifact.version,onChange:this.onVersionChange,pipeline:this.props.pipeline,docLink:!1})))}}},Mu="gitlab/file",Nu={label:"Gitlab",typePattern:vp.GITLAB_FILE,type:Mu,description:"A file stored in git, hosted by Gitlab.",key:"gitlab",isDefault:!1,isMatch:!0,editCmp:ou("name",Mu,"File path","manifests/frontend.yaml","pipeline.config.expectedArtifact.git.name")},Du={label:"Gitlab",typePattern:vp.GITLAB_FILE,type:Mu,description:"A file stored in git, hosted by Gitlab.",key:"default.gitlab",isDefault:!0,isMatch:!1,editCmp:class extends Ep{constructor(e){super(e,Mu),this.pathRegex=new RegExp("/repos/[^/]*/[^/]*/contents/(.*)$"),this.onReferenceChange=e=>{const t=this.pathRegex.exec(e),n=p(this.props.artifact);null!==t?(n.name=t[1],n.reference=e):(n.name=e,n.reference=e),this.props.onChange(n)}}render(){return ot.createElement(ot.Fragment,null,ot.createElement(zp,{label:"Content URL",helpKey:"pipeline.config.expectedArtifact.defaultGitlab.reference"},ot.createElement(su,{placeholder:"https://gitlab.com/api/v4/projects/$ORG%2F$REPO/repository/files/path%2Fto%2Ffile.yml/raw",value:this.props.artifact.reference,onChange:this.onReferenceChange,pipeline:this.props.pipeline,docLink:!1})),ot.createElement(zp,{label:"Commit/Branch",helpKey:"pipeline.config.expectedArtifact.defaultGitlab.version"},ot.createElement(su,{placeholder:"master",value:this.props.artifact.version,onChange:this.onVersionChange,pipeline:this.props.pipeline,docLink:!1})))}}};class Iu extends ot.Component{constructor(e){var t,n;super(e),this.onIncludesSubPathChange=e=>{this.setState({includesSubPath:e.target.checked})},this.onReferenceChanged=e=>{const t=p(this.props.artifact);t.reference=e,this.props.onChange(t)},this.onVersionChanged=e=>{const t=p(this.props.artifact);t.version=e,this.props.onChange(t)},this.onSubPathChanged=e=>{const t=p(this.props.artifact);t.location=e,this.props.onChange(t)};const{artifact:a}=this.props;this.state={includesSubPath:void 0!==(null!=(n=a.location)?n:null==(t=a.metadata)?void 0:t.subPath)}}render(){var e,t;const{artifact:n}=this.props;return ot.createElement(ot.Fragment,null,ot.createElement(zp,{label:"URL",helpKey:"pipeline.config.expectedArtifact.gitrepo.url"},ot.createElement(su,{placeholder:"https or ssh to your git repo",value:n.reference,onChange:this.onReferenceChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(zp,{label:"Branch",helpKey:"pipeline.config.expectedArtifact.gitrepo.branch"},ot.createElement(su,{placeholder:"master",value:n.version,onChange:this.onVersionChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(zp,{label:"Checkout subpath",helpKey:"pipeline.config.expectedArtifact.gitrepo.checkoutSubpath"},ot.createElement(xo,{checked:this.state.includesSubPath,onChange:this.onIncludesSubPathChange})),this.state.includesSubPath&&ot.createElement(zp,{label:"Subpath",helpKey:"pipeline.config.expectedArtifact.gitrepo.subpath"},ot.createElement(su,{placeholder:"path/to/subdirectory",value:null!=(t=n.location)?t:null==(e=n.metadata)?void 0:e.subPath,onChange:this.onSubPathChanged,pipeline:this.props.pipeline,docLink:!0})))}}const Fu={label:"GitRepo",description:"A Git repository.",key:"gitrepo",typePattern:vp.GIT_REPO,type:"git/repo",isDefault:!1,isMatch:!0,editCmp:Iu},Tu={label:"GitRepo",typePattern:vp.GIT_REPO,type:"git/repo",description:"A Git repository.",key:"default.gitrepo",isDefault:!0,isMatch:!1,editCmp:Iu};class Qu{static getArtifactNames(e,t){return Si("/artifacts/account").path(t,"names").query({type:e}).get()}static getArtifactVersions(e,t,n){return Si("/artifacts/account").path(t,"versions").query({type:e,artifactName:n}).get()}}const Pu="helm/chart";class Ru extends ot.Component{constructor(e){super(e),this.state={names:[],versions:[],versionsLoading:!0,namesLoading:!0},this.SEMVER=new RegExp(/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\+[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)?$/),this.onChange=(e,t)=>{const n=p(this.props.artifact);n[t]=e.value.toString(),this.props.onChange(n)};const{artifact:t}=this.props;if(t.type!==Pu){const n=p(t);n.type=Pu,e.onChange(n)}Qu.getArtifactNames(Pu,this.props.account.name).then((e=>{this.setState({names:e,namesLoading:!1})}),(()=>{this.setState({names:[],namesLoading:!1,versionsLoading:!1,versions:[]})}))}componentDidMount(){const{artifact:e}=this.props;e.name&&this.getChartVersionOptions(e.name)}componentDidUpdate(e){this.props.account.name!==e.account.name&&Qu.getArtifactNames(Pu,this.props.account.name).then((e=>{this.setState({names:e,namesLoading:!1,versions:[]})}),(()=>{this.setState({names:[],namesLoading:!1,versions:[]})}))}render(){const{artifact:e}=this.props,t=this.state.names.map((e=>({value:e,label:e})));return ot.createElement(ot.Fragment,null,ot.createElement(zp,{label:"Name"},!this.state.namesLoading&&ot.createElement(Ti,{options:t,value:e.name||"",onChange:e=>{this.onChange(e,"name"),this.getChartVersionOptions(e.value.toString())},clearable:!1}),this.state.namesLoading&&ot.createElement(bs,null)),ot.createElement(zp,{label:"Version"},!this.state.versionsLoading&&ot.createElement(Ec,{options:this.state.versions,value:e.version||"",onChange:e=>{this.onChange(e,"version")},clearable:!1}),this.state.versionsLoading&&ot.createElement(bs,null)))}getChartVersionOptions(e){const{artifact:t,account:n}=this.props;this.setState({versionsLoading:!0}),Qu.getArtifactVersions(Pu,n.name,e).then((e=>{t.version&&!this.SEMVER.test(t.version)&&(e=e.concat(t.version)),this.setState({versions:e.map((e=>({label:e,value:e}))),versionsLoading:!1})}))}}const Uu={label:"Helm",typePattern:vp.HELM_CHART,type:Pu,isDefault:!1,isMatch:!0,description:"A helm chart to be deployed",key:"helm",editCmp:Ru},zu={label:"Helm",typePattern:vp.HELM_CHART,type:Pu,isDefault:!0,isMatch:!1,description:"A helm chart to be deployed",key:"default.helm",editCmp:Ru},Gu={label:"HTTP",typePattern:vp.HTTP_FILE,type:"http/file",description:"An HTTP artifact.",key:"http",isDefault:!1,isMatch:!0,editCmp:ou("reference","http/file","URL","path/file.ext","")},ju={label:"HTTP",typePattern:vp.HTTP_FILE,type:"http/file",description:"An HTTP artifact.",key:"default.http",isDefault:!0,isMatch:!1,editCmp:ou("reference","http/file","URL","http://host/path/file.ext","")},Lu={label:"Ivy",typePattern:vp.IVY_FILE,type:"ivy/file",description:"An Ivy repository artifact.",key:"ivy",isDefault:!1,isMatch:!0,editCmp:ou("reference","ivy/file","Ivy Coordinate","group:artifact:version","")},Ou={label:"Ivy",typePattern:vp.IVY_FILE,type:"ivy/file",description:"An Ivy repository artifact.",key:"ivy",isDefault:!0,isMatch:!1,editCmp:ou("reference","ivy/file","Ivy Coordinate","group:artifact:version","")};var Yu,$u;($u=Yu||(Yu={})).Jenkins="jenkins",$u.Travis="travis",$u.Wercker="wercker",$u.Concourse="concourse";class Hu{static listMasters(e=null){const t=Si("/v2/builds").query({type:e}).get();if(!t)return Ze.reject("An error occurred when retrieving build masters");switch(e){case Yu.Jenkins:return t.then((e=>e.filter((e=>!/^travis-/.test(e)))));case Yu.Travis:return t.then((e=>e.filter((e=>/^travis-/.test(e)))));case Yu.Concourse:return t.then((e=>e.filter((e=>/^concourse-/.test(e)))));default:return t}}static listJobsForMaster(e){return Si("/v3/builds").path(e,"jobs").get()}static listBuildsForJob(e,t){return Si("/v3/builds").path(e,"builds").query({job:t}).get()}static getJobConfig(e,t){return Si("/v3/builds").path(e,"job").query({job:t}).get()}static getGcbAccounts(){return Si("/gcb/accounts").get()}static getGcbTriggers(e){return Si("/gcb/triggers").path(e).get()}static getCodeBuildAccounts(){return Si("/codebuild/accounts").get()}static getCodeBuildProjects(e){return Si("/codebuild/projects").path(e).get()}}const Vu="jenkins/file",Ju={label:"Jenkins",typePattern:vp.JENKINS_FILE,type:Vu,isDefault:!1,isMatch:!0,description:"A Jenkins artifact file.",key:"default.jenkins",editCmp:ou("reference",Vu,"Relative path","pathFromWorkspaceRoot/file.ext","")},Wu={label:"Jenkins",typePattern:vp.JENKINS_FILE,type:Vu,isDefault:!0,isMatch:!1,description:"A Jenkins artifact file.",key:"default.jenkins",editCmp:class extends Ep{constructor(e){super(e,Vu),this.onReferenceChange=e=>{const t=p(this.props.artifact);t.reference=e,this.props.onChange(t)},this.onNameChange=e=>{const t=p(this.props.artifact);t.name=e,this.props.onChange(t),Hu.listBuildsForJob(this.props.account.name,e).then((e=>{const t=e.filter((e=>!e.building&&"SUCCESS"===e.result)).sort(((e,t)=>t.number-e.number)).map((e=>e.number));this.setState({buildNumbers:t})}),(()=>{this.setState({buildNumbers:[]})}))},this.state={jobs:[],buildNumbers:[]}}componentDidMount(){Hu.listJobsForMaster(this.props.account.name).then((e=>{this.setState({jobs:e})}))}render(){const{buildNumbers:e,jobs:t}=this.state,{artifact:n}=this.props,a=e.map((e=>({label:e,value:e})));a.splice(0,0,{label:"lastSuccessfulBuild",value:"lastSuccessfulBuild"});const i=t.map((e=>({label:e,value:e})));return ot.createElement(ot.Fragment,null,ot.createElement(zp,{label:"Job"},ot.createElement(Ti,{options:i,onChange:e=>this.onNameChange(e.value),value:n.name,clearable:!1})),ot.createElement(zp,{label:"Build Number"},ot.createElement(Ti,{options:a,onChange:e=>this.onVersionChange(e.value),value:n.version,clearable:!1})),ot.createElement(zp,{label:"Relative path"},ot.createElement(su,{placeholder:"pathFromWorkspaceRoot/file.ext",value:this.props.artifact.reference,onChange:this.onReferenceChange,pipeline:this.props.pipeline,docLink:!1})))}}};class Ku extends Ep{constructor(e){super(e,e.artifact.type||"kubernetes/configMap"),this.onReferenceChange=e=>{const t=p(this.props.artifact);t.reference=e,this.props.onChange(t)},this.onTypeChange=e=>{const t=p(this.props.artifact);t.type=e.value,this.props.onChange(t)}}render(){return ot.createElement(ot.Fragment,null,ot.createElement(zp,{label:"Resource Type"},ot.createElement(cn,{options:[{label:"ConfigMap",value:"kubernetes/configMap"},{label:"Deployment",value:"kubernetes/deployment"},{label:"ReplicaSet",value:"kubernetes/replicaSet"},{label:"Secret",value:"kubernetes/secret"}],clearable:!1,value:this.props.artifact.type,onChange:this.onTypeChange})),ot.createElement(zp,{label:"Reference"},ot.createElement(su,{placeholder:"",value:this.props.artifact.reference,onChange:this.onReferenceChange,pipeline:this.props.pipeline,docLink:!0})))}}const qu={label:"Kubernetes",typePattern:vp.KUBERNETES,type:"kubernetes/*",description:"A kubernetes resource.",key:"kubernetes",isDefault:!1,isMatch:!0,editCmp:Ku},Xu={label:"Kubernetes",typePattern:vp.KUBERNETES,type:"kubernetes/*",description:"A kubernetes resource.",key:"default.kubernetes",isDefault:!0,isMatch:!1,editCmp:Ku},Zu={label:"Maven",typePattern:vp.MAVEN_FILE,type:"maven/file",description:"A Maven repository artifact.",key:"maven",isDefault:!1,isMatch:!0,editCmp:ou("reference","maven/file","Maven Coordinate","group:artifact:version","")},_u={label:"Maven",typePattern:vp.MAVEN_FILE,type:"maven/file",description:"A Maven repository artifact.",key:"maven",isDefault:!0,isMatch:!1,editCmp:ou("reference","maven/file","Maven Coordinate","group:artifact:version","")},em={label:"Oracle",typePattern:vp.ORACLE_OBJECT,type:"oracle/object",description:"An oracle object.",key:"oracle",isDefault:!1,isMatch:!0,editCmp:ou("name","oracle/object","reference","oci://bucket/file-path","pipeline.config.expectedArtifact.oracle.name")},tm={label:"Oracle",typePattern:vp.ORACLE_OBJECT,type:"oracle/object",description:"An oracle object.",key:"oracle",isDefault:!0,isMatch:!1,editCmp:ou("reference","oracle/object","Reference","oci://bucket/file-path","pipeline.config.expectedArtifact.defaultOracle.reference")},nm={label:"S3",typePattern:vp.S3_OBJECT,type:"s3/object",description:"An S3 object.",key:"s3",isDefault:!1,isMatch:!0,editCmp:ou("name","s3/object","Object path","s3://bucket/path/to/file","pipeline.config.expectedArtifact.s3.name")},am={label:"S3",typePattern:vp.S3_OBJECT,type:"s3/object",description:"An S3 object.",key:"s3",isDefault:!0,isMatch:!1,editCmp:ou("reference","s3/object","Object path","s3://bucket/path/to/file","pipeline.config.expectedArtifact.defaultS3.reference")};var im="data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20width%3D%22110.37mm%22%20height%3D%22110.37mm%22%20version%3D%221.1%22%20viewBox%3D%220%200%20110.36904%20110.36904%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%3E%20%3Cmetadata%3E%20%20%3Crdf%3ARDF%3E%20%20%20%3Ccc%3AWork%20rdf%3Aabout%3D%22%22%3E%20%20%20%20%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%20%20%20%20%3Cdc%3Atype%20rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22%2F%3E%20%20%20%20%3Cdc%3Atitle%2F%3E%20%20%20%3C%2Fcc%3AWork%3E%20%20%3C%2Frdf%3ARDF%3E%20%3C%2Fmetadata%3E%20%3Cg%20transform%3D%22translate%28-43.089%20-111.04%29%22%3E%20%20%3Crect%20x%3D%2243.089%22%20y%3D%22111.04%22%20width%3D%22110.37%22%20height%3D%22110.37%22%20stroke-width%3D%22.26458%22%2F%3E%20%20%3Cg%20transform%3D%22matrix%28.56848%200%200%20.56848%2034.64%2080.686%29%22%20aria-label%3D%22%3F%22%3E%20%20%20%3Cpath%20d%3D%22m96.688%20198.91h19.031v23.812h-19.031zm18.469-13.781h-17.906v-14.438q0-9.4688%202.625-15.562t11.062-14.156l8.4375-8.3438q5.3438-4.9688%207.6875-9.375%202.4375-4.4062%202.4375-9%200-8.3438-6.1875-13.5-6.0938-5.1563-16.219-5.1563-7.4062%200-15.844%203.2812-8.3438%203.2813-17.438%209.5625v-17.625q8.8125-5.3438%2017.812-7.9688%209.0938-2.625%2018.75-2.625%2017.25%200%2027.656%209.0938%2010.5%209.0938%2010.5%2024%200%207.125-3.375%2013.594-3.375%206.375-11.812%2014.438l-8.25%208.0625q-4.4062%204.4062-6.2812%206.9375-1.7812%202.4375-2.5312%204.7812-0.5625%201.9688-0.84375%204.7812t-0.28125%207.6875z%22%20fill%3D%22%23fff%22%2F%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fsvg%3E";const rm=class{static registerType(e,t){rm.icons.push({type:e,path:t})}static getPath(e){if(null==e)return im;const t=rm.icons.find((t=>t.type.test(e)));return void 0===t?null:t.path}};let sm=rm;sm.icons=[],sm.registerType(vp.CUSTOM_OBJECT,im),sm.registerType(vp.DOCKER_IMAGE,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20standalone%3D%22no%22%3F%3E%3Csvg%20%20%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%20%20%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%20%20%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%20%20%20xmlns%3Asvg%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20%20%20viewBox%3D%220%200%20482%20439%22%20%20%20height%3D%22439%22%20%20%20width%3D%22482%22%20%20%20xml%3Aspace%3D%22preserve%22%20%20%20id%3D%22svg3718%22%20%20%20version%3D%221.1%22%3E%3Cmetadata%20%20%20%20%20id%3D%22metadata3724%22%3E%3Crdf%3ARDF%3E%3Ccc%3AWork%20%20%20%20%20%20%20%20%20rdf%3Aabout%3D%22%22%3E%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%3Cdc%3Atype%20%20%20%20%20%20%20%20%20%20%20rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22%20%2F%3E%3Cdc%3Atitle%3E%3C%2Fdc%3Atitle%3E%3C%2Fcc%3AWork%3E%3C%2Frdf%3ARDF%3E%3C%2Fmetadata%3E%3Cdefs%20%20%20%20%20id%3D%22defs3722%22%3E%3CclipPath%20%20%20%20%20%20%20id%3D%22clipPath3734%22%20%20%20%20%20%20%20clipPathUnits%3D%22userSpaceOnUse%22%3E%3Cpath%20%20%20%20%20%20%20%20%20id%3D%22path3732%22%20%20%20%20%20%20%20%20%20d%3D%22M%200%2C329.25%20H%20361.5%20V%200%20H%200%20Z%22%20%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3Cg%20%20%20%20%20transform%3D%22matrix%281.3333333%2C0%2C0%2C-1.3333333%2C0%2C439%29%22%20%20%20%20%20id%3D%22g3726%22%3E%3Cg%20%20%20%20%20%20%20id%3D%22g3728%22%3E%3Cg%20%20%20%20%20%20%20%20%20clip-path%3D%22url%28%23clipPath3734%29%22%20%20%20%20%20%20%20%20%20id%3D%22g3730%22%3E%3Cg%20%20%20%20%20%20%20%20%20%20%20transform%3D%22translate%28344.626%2C78.6162%29%22%20%20%20%20%20%20%20%20%20%20%20id%3D%22g3736%22%3E%3Cpath%20%20%20%20%20%20%20%20%20%20%20%20%20id%3D%22path3738%22%20%20%20%20%20%20%20%20%20%20%20%20%20style%3D%22fill%3A%23066da5%3Bfill-opacity%3A1%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%22%20%20%20%20%20%20%20%20%20%20%20%20%20d%3D%22m%200%2C0%20c%20-0.915%2C0.881%20-2.067%2C1.574%20-3.455%2C2.083%20-1.39%2C0.505%20-2.909%2C0.858%20-4.559%2C1.055%20-1.652%2C0.196%20-3.197%2C0.292%20-4.634%2C0.292%20-3.268%2C0%20-6.342%2C-0.523%20-9.217%2C-1.568%20-2.876%2C-1.048%20-5.539%2C-2.549%20-7.992%2C-4.511%20v%200.981%20c%200%2C1.403%20-0.497%2C2.605%20-1.495%2C3.604%20-0.995%2C0.997%20-2.2%2C1.494%20-3.603%2C1.494%20-1.44%2C0%20-2.656%2C-0.497%20-3.653%2C-1.494%20-0.996%2C-0.999%20-1.496%2C-2.201%20-1.496%2C-3.604%20v%20-44.713%20c%200%2C-1.406%200.5%2C-2.606%201.496%2C-3.603%200.997%2C-0.997%202.213%2C-1.495%203.653%2C-1.495%201.403%2C0%202.608%2C0.498%203.603%2C1.495%200.998%2C0.997%201.495%2C2.197%201.495%2C3.603%20v%2022.357%20c%200%2C2.384%200.452%2C4.625%201.348%2C6.717%200.9%2C2.091%202.125%2C3.911%203.677%2C5.466%201.554%2C1.552%203.375%2C2.777%205.468%2C3.676%202.09%2C0.899%204.329%2C1.349%206.716%2C1.349%202.419%2C0%204.657%2C-0.409%206.717%2C-1.226%200.815%2C-0.36%201.536%2C-0.538%202.157%2C-0.538%200.716%2C0%201.387%2C0.128%202.01%2C0.392%200.618%2C0.26%201.16%2C0.627%201.618%2C1.102%200.457%2C0.473%200.824%2C1.021%201.102%2C1.644%200.278%2C0.618%200.418%2C1.289%200.418%2C2.009%20C%201.374%2C-2.028%200.915%2C-0.883%200%2C0%20m%20-88.54%2C-18.925%20c%200.52%2C1.796%201.323%2C3.437%202.4%2C4.927%201.079%2C1.486%202.353%2C2.762%203.825%2C3.825%201.472%2C1.059%203.089%2C1.887%204.854%2C2.476%201.764%2C0.587%203.578%2C0.881%205.442%2C0.881%201.863%2C0%203.667%2C-0.294%205.415%2C-0.881%201.749%2C-0.589%203.352%2C-1.417%204.804%2C-2.476%201.456%2C-1.063%202.732%2C-2.339%203.824%2C-3.825%201.098%2C-1.49%201.922%2C-3.131%202.479%2C-4.927%20z%20m%2035.936%2C14.316%20c%20-5.428%2C5.36%20-11.9%2C8.039%20-19.415%2C8.039%20-7.585%2C0%20-14.057%2C-2.679%20-19.415%2C-8.039%20-5.363%2C-5.364%20-8.042%2C-11.832%20-8.042%2C-19.415%200%2C-7.583%202.679%2C-14.055%208.042%2C-19.415%205.358%2C-5.361%2011.83%2C-8.04%2019.415%2C-8.04%206.894%2C0%2012.875%2C2.222%2017.944%2C6.667%200.98%2C1.012%201.471%2C2.237%201.471%2C3.677%200%2C1.472%20-0.484%2C2.689%20-1.449%2C3.654%20-0.963%2C0.962%20-2.179%2C1.446%20-3.651%2C1.446%20-1.274%2C-0.034%20-2.402%2C-0.461%20-3.382%2C-1.276%20-1.538%2C-1.307%20-3.206%2C-2.289%20-5.002%2C-2.941%20-1.801%2C-0.654%20-3.774%2C-0.981%20-5.931%2C-0.981%20-1.898%2C0%20-3.719%2C0.295%20-5.469%2C0.883%20-1.746%2C0.589%20-3.351%2C1.412%20-4.804%2C2.476%20-1.454%2C1.061%20-2.721%2C2.335%20-3.798%2C3.824%20-1.079%2C1.487%20-1.898%2C3.129%20-2.45%2C4.927%20h%2038.827%20c%201.436%2C0%202.654%2C0.482%203.651%2C1.447%200.998%2C0.963%201.498%2C2.182%201.498%2C3.652%200%2C3.79%20-0.673%2C7.311%20-2.011%2C10.565%20-1.342%2C3.252%20-3.352%2C6.202%20-6.029%2C8.85%20m%20-51.511%2C2.941%20c%200%2C0.687%20-0.137%2C1.339%20-0.415%2C1.96%20-0.279%2C0.621%20-0.646%2C1.168%20-1.105%2C1.644%20-0.458%2C0.471%20-0.997%2C0.838%20-1.618%2C1.103%20-0.62%2C0.261%20-1.291%2C0.391%20-2.01%2C0.391%20-1.013%2C0%20-1.928%2C-0.263%20-2.745%2C-0.783%20l%20-29.316%2C-19.073%20v%2038.241%20c%200%2C1.438%20-0.5%2C2.655%20-1.497%2C3.654%20-0.995%2C0.995%20-2.199%2C1.495%20-3.604%2C1.495%20-1.44%2C0%20-2.656%2C-0.5%20-3.651%2C-1.495%20-0.997%2C-0.999%20-1.497%2C-2.216%20-1.497%2C-3.654%20v%20-68.146%20c%200%2C-1.405%200.5%2C-2.617%201.497%2C-3.628%200.995%2C-1.014%202.211%2C-1.52%203.651%2C-1.52%201.405%2C0%202.609%2C0.506%203.604%2C1.52%200.997%2C1.011%201.497%2C2.223%201.497%2C3.628%20v%2017.699%20l%205.98%2C3.92%2022.652%2C-25.443%20c%200.912%2C-0.884%202.057%2C-1.324%203.429%2C-1.324%200.719%2C0%201.39%2C0.13%202.01%2C0.392%200.621%2C0.261%201.16%2C0.628%201.618%2C1.103%200.459%2C0.472%200.826%2C1.022%201.105%2C1.642%200.278%2C0.619%200.415%2C1.277%200.415%2C1.961%200%2C1.339%20-0.475%2C2.532%20-1.421%2C3.58%20l%20-21.081%2C23.728%2020.542%2C13.336%20c%201.305%2C0.883%201.96%2C2.236%201.96%2C4.069%20m%20-84.207%2C-10.173%20c%201.568%2C1.552%203.398%2C2.777%205.49%2C3.676%202.093%2C0.899%204.332%2C1.349%206.719%2C1.349%202.156%2C0%204.148%2C-0.361%205.981%2C-1.078%201.828%2C-0.72%203.578%2C-1.784%205.244%2C-3.187%200.981%2C-0.785%202.092%2C-1.178%203.334%2C-1.178%201.471%2C0%202.688%2C0.49%203.653%2C1.472%200.964%2C0.981%201.447%2C2.207%201.447%2C3.677%200%2C1.535%20-0.589%2C2.827%20-1.766%2C3.874%20-5.034%2C4.443%20-10.997%2C6.666%20-17.893%2C6.666%20-7.586%2C0%20-14.057%2C-2.679%20-19.415%2C-8.039%20-5.361%2C-5.364%20-8.042%2C-11.832%20-8.042%2C-19.415%200%2C-7.583%202.681%2C-14.055%208.042%2C-19.415%205.358%2C-5.361%2011.829%2C-8.04%2019.415%2C-8.04%206.862%2C0%2012.827%2C2.222%2017.893%2C6.667%201.079%2C1.081%201.617%2C2.335%201.617%2C3.775%200%2C1.473%20-0.483%2C2.688%20-1.444%2C3.653%20-0.965%2C0.964%20-2.184%2C1.447%20-3.653%2C1.447%20-1.242%2C-0.034%20-2.321%2C-0.392%20-3.236%2C-1.079%20-1.634%2C-1.406%20-3.368%2C-2.46%20-5.196%2C-3.163%20-1.833%2C-0.703%20-3.825%2C-1.054%20-5.981%2C-1.054%20-2.387%2C0%20-4.626%2C0.45%20-6.719%2C1.348%20-2.092%2C0.9%20-3.922%2C2.125%20-5.49%2C3.677%20-1.57%2C1.552%20-2.804%2C3.375%20-3.701%2C5.468%20-0.899%2C2.09%20-1.349%2C4.329%20-1.349%2C6.716%200%2C2.384%200.45%2C4.625%201.349%2C6.717%200.897%2C2.091%202.131%2C3.911%203.701%2C5.466%20m%20-31.676%2C-18.827%20c%20-0.899%2C-2.076%20-2.127%2C-3.897%20-3.678%2C-5.465%20-1.552%2C-1.57%20-3.376%2C-2.813%20-5.466%2C-3.726%20-2.092%2C-0.917%20-4.331%2C-1.374%20-6.718%2C-1.374%20-2.419%2C0%20-4.673%2C0.457%20-6.764%2C1.374%20-2.092%2C0.913%20-3.906%2C2.147%20-5.442%2C3.701%20-1.538%2C1.552%20-2.755%2C3.373%20-3.654%2C5.466%20-0.899%2C2.089%20-1.348%2C4.315%20-1.348%2C6.668%200%2C2.352%200.449%2C4.575%201.348%2C6.668%200.899%2C2.089%202.116%2C3.913%203.654%2C5.467%201.536%2C1.549%203.35%2C2.784%205.442%2C3.701%202.091%2C0.913%204.345%2C1.372%206.764%2C1.372%202.387%2C0%204.626%2C-0.459%206.718%2C-1.372%202.09%2C-0.917%203.914%2C-2.159%205.466%2C-3.726%201.551%2C-1.57%202.779%2C-3.392%203.678%2C-5.468%200.897%2C-2.076%201.347%2C-4.29%201.347%2C-6.642%200%2C-2.353%20-0.45%2C-4.569%20-1.347%2C-6.644%20m%203.553%2C26.059%20c%20-5.427%2C5.36%20-11.898%2C8.039%20-19.415%2C8.039%20-7.583%2C0%20-14.055%2C-2.679%20-19.412%2C-8.039%20-5.363%2C-5.364%20-8.042%2C-11.832%20-8.042%2C-19.415%200%2C-7.583%202.679%2C-14.055%208.042%2C-19.415%205.357%2C-5.361%2011.829%2C-8.04%2019.412%2C-8.04%207.517%2C0%2013.988%2C2.679%2019.415%2C8.04%205.361%2C5.295%208.042%2C11.767%208.042%2C19.415%20-0.034%2C3.79%20-0.712%2C7.304%20-2.036%2C10.54%20-1.323%2C3.236%20-3.325%2C6.193%20-6.006%2C8.875%20m%20-63.398%2C-26.059%20c%20-0.899%2C-2.076%20-2.124%2C-3.897%20-3.676%2C-5.465%20-1.552%2C-1.57%20-3.375%2C-2.813%20-5.465%2C-3.726%20-2.093%2C-0.917%20-4.331%2C-1.374%20-6.719%2C-1.374%20-2.418%2C0%20-4.673%2C0.457%20-6.765%2C1.374%20-2.093%2C0.913%20-3.907%2C2.147%20-5.441%2C3.701%20-1.538%2C1.552%20-2.754%2C3.373%20-3.653%2C5.466%20-0.899%2C2.089%20-1.349%2C4.315%20-1.349%2C6.668%200%2C2.352%200.45%2C4.575%201.349%2C6.668%200.899%2C2.089%202.115%2C3.913%203.653%2C5.467%201.534%2C1.549%203.348%2C2.784%205.441%2C3.701%202.092%2C0.913%204.347%2C1.372%206.765%2C1.372%202.388%2C0%204.626%2C-0.459%206.719%2C-1.372%202.09%2C-0.917%203.913%2C-2.159%205.465%2C-3.726%201.552%2C-1.57%202.777%2C-3.392%203.676%2C-5.468%200.9%2C-2.076%201.349%2C-4.29%201.349%2C-6.642%200%2C-2.353%20-0.449%2C-4.569%20-1.349%2C-6.644%20m%206.449%2C57.632%20c%20-1.472%2C0%20-2.69%2C-0.485%20-3.653%2C-1.447%20-0.966%2C-0.965%20-1.447%2C-2.182%20-1.447%2C-3.651%20V%20-2.6%20c%20-4.968%2C4.022%20-10.705%2C6.03%20-17.209%2C6.03%20-7.583%2C0%20-14.054%2C-2.679%20-19.415%2C-8.039%20-5.36%2C-5.364%20-8.039%2C-11.832%20-8.039%2C-19.415%200%2C-7.583%202.679%2C-14.055%208.039%2C-19.415%205.361%2C-5.361%2011.832%2C-8.04%2019.415%2C-8.04%207.517%2C0%2013.989%2C2.679%2019.415%2C8.04%205.361%2C5.295%208.04%2C11.767%208.04%2C19.415%20v%2045.89%20c%200%2C1.469%20-0.498%2C2.686%20-1.495%2C3.651%20-0.997%2C0.962%20-2.213%2C1.447%20-3.651%2C1.447%20m%20142.279%2C113.243%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%20-29.666%2C0%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%20-29.665%2C0%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%20-29.666%2C0%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%20-29.666%2C0%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%2029.666%2C27.383%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%2029.666%2C0%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%2029.665%2C0%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%200%2C27.384%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%20135.273%2C-44.843%20-5.068%2C3.382%20c%20-5.484%2C3.667%20-18.077%2C5.011%20-27.772%2C3.183%20-1.248%2C9.13%20-6.337%2C17.047%20-15.592%2C24.203%20l%20-5.322%2C3.548%20-3.551%2C-5.326%20c%20-4.545%2C-6.855%20-6.816%2C-16.352%20-6.072%2C-25.46%200.335%2C-3.203%201.388%2C-8.934%204.685%2C-13.973%20-3.295%2C-1.77%20-9.808%2C-4.209%20-18.391%2C-4.045%20h%20-165.087%20l%20-0.323%2C-1.901%20c%20-1.552%2C-9.153%20-1.518%2C-37.714%2017.025%2C-59.667%2014.096%2C-16.686%2035.229%2C-25.147%2062.811%2C-25.147%2059.795%2C0%20104.033%2C27.525%20124.749%2C77.557%208.146%2C-0.162%2025.687%2C-0.047%2034.697%2C17.167%200.234%2C0.395%200.775%2C1.429%202.349%2C4.69%20z%22%20%2F%3E%3C%2Fg%3E%3Cg%20%20%20%20%20%20%20%20%20%20%20transform%3D%22translate%28323.4053%2C29.5137%29%22%20%20%20%20%20%20%20%20%20%20%20id%3D%22g3740%22%3E%3Cpath%20%20%20%20%20%20%20%20%20%20%20%20%20id%3D%22path3742%22%20%20%20%20%20%20%20%20%20%20%20%20%20style%3D%22fill%3A%23066da5%3Bfill-opacity%3A1%3Bfill-rule%3Anonzero%3Bstroke%3Anone%22%20%20%20%20%20%20%20%20%20%20%20%20%20d%3D%22M%200%2C0%20H%200.233%20C%200.507%2C0%200.728%2C0.091%200.728%2C0.312%200.728%2C0.507%200.585%2C0.638%200.272%2C0.638%200.143%2C0.638%200.052%2C0.624%200%2C0.61%20Z%20m%20-0.013%2C-1.209%20h%20-0.494%20v%202.132%20c%200.195%2C0.039%200.468%2C0.065%200.819%2C0.065%200.403%2C0%200.584%2C-0.065%200.741%2C-0.156%20C%201.17%2C0.741%201.261%2C0.572%201.261%2C0.364%201.261%2C0.13%201.079%2C-0.052%200.819%2C-0.13%20v%20-0.026%20c%200.207%2C-0.077%200.325%2C-0.234%200.39%2C-0.52%200.064%2C-0.325%200.103%2C-0.455%200.156%2C-0.533%20H%200.832%20c%20-0.065%2C0.078%20-0.104%2C0.272%20-0.169%2C0.521%20-0.039%2C0.233%20-0.169%2C0.337%20-0.442%2C0.337%20h%20-0.234%20z%20m%20-1.313%2C1.118%20c%200%2C-0.949%200.702%2C-1.703%201.664%2C-1.703%200.935%2C0%201.625%2C0.754%201.625%2C1.69%200%2C0.949%20-0.69%2C1.716%20-1.638%2C1.716%20-0.949%2C0%20-1.651%2C-0.767%20-1.651%2C-1.703%20m%203.835%2C0%20c%200%2C-1.209%20-0.949%2C-2.158%20-2.184%2C-2.158%20-1.222%2C0%20-2.197%2C0.949%20-2.197%2C2.158%200%2C1.183%200.975%2C2.132%202.197%2C2.132%201.235%2C0%202.184%2C-0.949%202.184%2C-2.132%22%20%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"),sm.registerType(vp.KUBERNETES,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20standalone%3D%22no%22%3F%3E%3Csvg%20%20%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%20%20%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%20%20%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%20%20%20xmlns%3Asvg%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20%20%20xmlns%3Asodipodi%3D%22http%3A%2F%2Fsodipodi.sourceforge.net%2FDTD%2Fsodipodi-0.dtd%22%20%20%20xmlns%3Ainkscape%3D%22http%3A%2F%2Fwww.inkscape.org%2Fnamespaces%2Finkscape%22%20%20%20width%3D%22722.8457%22%20%20%20height%3D%22701.96637%22%20%20%20id%3D%22svg2%22%20%20%20version%3D%221.1%22%20%20%20inkscape%3Aversion%3D%220.48.4%20r9939%22%20%20%20sodipodi%3Adocname%3D%22logo.svg%22%20%20%20inkscape%3Aexport-filename%3D%22%2Fhome%2Fthockin%2Fsrc%2Fkubernetes%2Fnew.png%22%20%20%20inkscape%3Aexport-xdpi%3D%22460.95001%22%20%20%20inkscape%3Aexport-ydpi%3D%22460.95001%22%3E%20%20%3Cdefs%20%20%20%20%20id%3D%22defs4%22%20%2F%3E%20%20%3Csodipodi%3Anamedview%20%20%20%20%20id%3D%22base%22%20%20%20%20%20pagecolor%3D%22%23ffffff%22%20%20%20%20%20bordercolor%3D%22%23666666%22%20%20%20%20%20borderopacity%3D%221.0%22%20%20%20%20%20inkscape%3Apageopacity%3D%220.0%22%20%20%20%20%20inkscape%3Apageshadow%3D%222%22%20%20%20%20%20inkscape%3Azoom%3D%2216.190509%22%20%20%20%20%20inkscape%3Acx%3D%22277.56851%22%20%20%20%20%20inkscape%3Acy%3D%22157.54494%22%20%20%20%20%20inkscape%3Adocument-units%3D%22px%22%20%20%20%20%20inkscape%3Acurrent-layer%3D%22g3052%22%20%20%20%20%20showgrid%3D%22false%22%20%20%20%20%20inkscape%3Awindow-width%3D%221519%22%20%20%20%20%20inkscape%3Awindow-height%3D%22822%22%20%20%20%20%20inkscape%3Awindow-x%3D%2251%22%20%20%20%20%20inkscape%3Awindow-y%3D%2225%22%20%20%20%20%20inkscape%3Awindow-maximized%3D%220%22%20%20%20%20%20inkscape%3Asnap-global%3D%22false%22%20%20%20%20%20fit-margin-top%3D%2210%22%20%20%20%20%20fit-margin-left%3D%2210%22%20%20%20%20%20fit-margin-right%3D%2210%22%20%20%20%20%20fit-margin-bottom%3D%2210%22%20%2F%3E%20%20%3Cmetadata%20%20%20%20%20id%3D%22metadata7%22%3E%20%20%20%20%3Crdf%3ARDF%3E%20%20%20%20%20%20%3Ccc%3AWork%20%20%20%20%20%20%20%20%20rdf%3Aabout%3D%22%22%3E%20%20%20%20%20%20%20%20%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%20%20%20%20%20%20%20%20%3Cdc%3Atype%20%20%20%20%20%20%20%20%20%20%20rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22%20%2F%3E%20%20%20%20%20%20%20%20%3Cdc%3Atitle%20%2F%3E%20%20%20%20%20%20%3C%2Fcc%3AWork%3E%20%20%20%20%3C%2Frdf%3ARDF%3E%20%20%3C%2Fmetadata%3E%20%20%3Cg%20%20%20%20%20inkscape%3Alabel%3D%22Layer%201%22%20%20%20%20%20inkscape%3Agroupmode%3D%22layer%22%20%20%20%20%20id%3D%22layer1%22%20%20%20%20%20transform%3D%22translate%28-6.3260942%2C-174.7524%29%22%3E%20%20%20%20%3Cg%20%20%20%20%20%20%20id%3D%22g3052%22%3E%20%20%20%20%20%20%3Cpath%20%20%20%20%20%20%20%20%20style%3D%22fill%3A%23326ce5%3Bfill-opacity%3A1%3Bstroke%3A%23ffffff%3Bstroke-width%3A0%3Bstroke-miterlimit%3A4%3Bstroke-opacity%3A1%3Bstroke-dasharray%3Anone%22%20%20%20%20%20%20%20%20%20d%3D%22m%20365.3125%2C184.8125%20a%2046.724621%2C46.342246%200%200%200%20-17.90625%2C4.53125%20l%20-244.34375%2C116.75%20a%2046.724621%2C46.342246%200%200%200%20-25.28125%2C31.4375%20L%2017.5%2C599.78125%20A%2046.724621%2C46.342246%200%200%200%2023.84375%2C635.3125%2046.724621%2C46.342246%200%200%200%2026.5%2C639%20l%20169.125%2C210.28125%20a%2046.724621%2C46.342246%200%200%200%2036.53125%2C17.4375%20L%20503.375%2C866.65625%20A%2046.724621%2C46.342246%200%200%200%20539.90625%2C849.25%20L%20708.96875%2C638.9375%20A%2046.724621%2C46.342246%200%200%200%20718%2C599.71875%20l%20-60.375%2C-262.25%20a%2046.724621%2C46.342246%200%200%200%20-25.28125%2C-31.4375%20l%20-244.375%2C-116.6875%20A%2046.724621%2C46.342246%200%200%200%20365.3125%2C184.8125%20z%22%20%20%20%20%20%20%20%20%20id%3D%22path3055%22%20%20%20%20%20%20%20%20%20inkscape%3Aconnector-curvature%3D%220%22%20%20%20%20%20%20%20%20%20inkscape%3Aexport-filename%3D%22new.png%22%20%20%20%20%20%20%20%20%20inkscape%3Aexport-xdpi%3D%22250.55%22%20%20%20%20%20%20%20%20%20inkscape%3Aexport-ydpi%3D%22250.55%22%20%2F%3E%20%20%20%20%20%20%3Cpath%20%20%20%20%20%20%20%20%20inkscape%3Aconnector-curvature%3D%220%22%20%20%20%20%20%20%20%20%20id%3D%22path3059%22%20%20%20%20%20%20%20%20%20d%3D%22m%20367.73366%2C274.05962%20c%20-8.07696%2C8.2e-4%20-14.62596%2C7.27591%20-14.625%2C16.25%201e-5%2C0.13773%200.0282%2C0.26934%200.0312%2C0.40625%20-0.0119%2C1.21936%20-0.0708%2C2.68836%20-0.0312%2C3.75%200.19262%2C5.176%201.3209%2C9.13749%202%2C13.90625%201.23028%2C10.20666%202.26117%2C18.66736%201.625%2C26.53125%20-0.61869%2C2.9654%20-2.80288%2C5.67741%20-4.75%2C7.5625%20l%20-0.34375%2C6.1875%20c%20-8.77682%2C0.72717%20-17.61235%2C2.05874%20-26.4375%2C4.0625%20-37.97461%2C8.62218%20-70.67008%2C28.18307%20-95.5625%2C54.59375%20-1.61522%2C-1.10193%20-4.44103%2C-3.12914%20-5.2813%2C-3.75%20-2.61117%2C0.35262%20-5.25021%2C1.15829%20-8.6875%2C-0.84375%20-6.54491%2C-4.40563%20-12.50587%2C-10.48693%20-19.71875%2C-17.8125%20-3.30498%2C-3.50419%20-5.69832%2C-6.84101%20-9.625%2C-10.21875%20-0.89172%2C-0.76707%20-2.25258%2C-1.80455%20-3.25%2C-2.59375%20-3.06988%2C-2.44757%20-6.6907%2C-3.72402%20-10.1875%2C-3.84375%20-4.49589%2C-0.15394%20-8.82394%2C1.60385%20-11.65625%2C5.15625%20-5.03521%2C6.31538%20-3.42312%2C15.96805%203.59375%2C21.5625%200.0712%2C0.0567%200.14702%2C0.10078%200.21875%2C0.15625%200.96422%2C0.78162%202.14496%2C1.78313%203.03125%2C2.4375%204.16687%2C3.07655%207.9732%2C4.65145%2012.125%2C7.09375%208.747%2C5.40181%2015.99837%2C9.88086%2021.75%2C15.28125%202.24602%2C2.39417%202.63858%2C6.61292%202.9375%2C8.4375%20l%204.6875%2C4.1875%20c%20-25.09342%2C37.76368%20-36.70686%2C84.40946%20-29.8437%2C131.9375%20l%20-6.125%2C1.78125%20c%20-1.6143%2C2.08461%20-3.89541%2C5.36474%20-6.2813%2C6.34375%20-7.52513%2C2.37021%20-15.99424%2C3.24059%20-26.21875%2C4.3125%20-4.80031%2C0.39915%20-8.94218%2C0.16095%20-14.03125%2C1.125%20-1.12008%2C0.21218%20-2.68072%2C0.61877%20-3.90625%2C0.90625%20-0.0426%2C0.009%20-0.0824%2C0.0216%20-0.125%2C0.0312%20-0.0668%2C0.0155%20-0.15456%2C0.0479%20-0.21875%2C0.0625%20-8.62014%2C2.08279%20-14.15774%2C10.006%20-12.375%2C17.8125%201.78316%2C7.80833%2010.20314%2C12.55677%2018.875%2C10.6875%200.0626%2C-0.0143%200.1535%2C-0.0167%200.21875%2C-0.0312%200.0979%2C-0.0224%200.18409%2C-0.0699%200.28125%2C-0.0937%201.20885%2C-0.26536%202.72377%2C-0.5606%203.78125%2C-0.84375%205.00334%2C-1.33963%208.62694%2C-3.30796%2013.125%2C-5.03125%209.67694%2C-3.47077%2017.69173%2C-6.37022%2025.5%2C-7.5%203.26118%2C-0.25542%206.69711%2C2.01216%208.40625%2C2.96875%20l%206.375%2C-1.09375%20c%2014.67018%2C45.48282%2045.41416%2C82.24502%2084.34375%2C105.3125%20l%20-2.65625%2C6.375%20c%200.95742%2C2.47542%202.01341%2C5.8247%201.30022%2C8.26932%20-2.83868%2C7.3612%20-7.70097%2C15.13097%20-13.23772%2C23.79318%20-2.68085%2C4.00192%20-5.42453%2C7.10761%20-7.84375%2C11.6875%20-0.5789%2C1.09589%20-1.31618%2C2.77932%20-1.875%2C3.9375%20-3.75884%2C8.04236%20-1.00164%2C17.3052%206.21875%2C20.78125%207.26575%2C3.49788%2016.28447%2C-0.19134%2020.1875%2C-8.25%200.006%2C-0.0114%200.0257%2C-0.0198%200.0312%2C-0.0312%200.004%2C-0.009%20-0.004%2C-0.0225%200%2C-0.0312%200.55593%2C-1.14255%201.34353%2C-2.64437%201.8125%2C-3.71875%202.07213%2C-4.74702%202.76161%2C-8.81506%204.21875%2C-13.40625%203.86962%2C-9.72014%205.99567%2C-19.91903%2011.32258%2C-26.27411%201.45868%2C-1.74023%203.83681%2C-2.4095%206.30242%2C-3.06964%20l%203.3125%2C-6%20c%2033.93824%2C13.0268%2071.92666%2C16.52246%20109.875%2C7.90625%208.65697%2C-1.96557%2017.01444%2C-4.50945%2025.09375%2C-7.5625%200.93098%2C1.65133%202.66113%2C4.8257%203.125%2C5.625%202.50559%2C0.81518%205.24044%2C1.23614%207.46875%2C4.53125%203.98539%2C6.80898%206.7109%2C14.86416%2010.03125%2C24.59375%201.45738%2C4.59111%202.17762%2C8.65933%204.25%2C13.40625%200.47234%2C1.08195%201.256%2C2.60486%201.8125%2C3.75%203.89482%2C8.08484%2012.94212%2C11.78667%2020.21875%2C8.28125%207.2195%2C-3.4779%209.97974%2C-12.7399%206.21875%2C-20.78125%20-0.55889%2C-1.15814%20-1.3273%2C-2.84164%20-1.90625%2C-3.9375%20-2.41946%2C-4.57976%20-5.1627%2C-7.65448%20-7.84375%2C-11.65625%20-5.53721%2C-8.66192%20-10.12968%2C-15.8577%20-12.96875%2C-23.21875%20-1.18711%2C-3.79657%200.20028%2C-6.15774%201.125%2C-8.625%20-0.55378%2C-0.63477%20-1.73881%2C-4.22009%20-2.4375%2C-5.90625%2040.4574%2C-23.88816%2070.29856%2C-62.02129%2084.3125%2C-106.0625%201.8924%2C0.29742%205.18154%2C0.87936%206.25%2C1.09375%202.19954%2C-1.4507%204.22194%2C-3.34352%208.1875%2C-3.03125%207.80832%2C1.12937%2015.82288%2C4.02973%2025.5%2C7.5%204.49815%2C1.72306%208.1216%2C3.72313%2013.125%2C5.0625%201.05749%2C0.28309%202.57238%2C0.5472%203.78125%2C0.8125%200.0972%2C0.0238%200.1833%2C0.0714%200.28125%2C0.0937%200.0653%2C0.0146%200.15615%2C0.0169%200.21875%2C0.0312%208.67236%2C1.86695%2017.09384%2C-2.87871%2018.875%2C-10.6875%201.78074%2C-7.80696%20-3.7543%2C-15.73201%20-12.375%2C-17.8125%20-1.25393%2C-0.28513%20-3.03225%2C-0.76938%20-4.25%2C-1%20-5.08912%2C-0.96378%20-9.23092%2C-0.7261%20-14.03125%2C-1.125%20-10.22456%2C-1.07138%20-18.6935%2C-1.94269%20-26.21875%2C-4.3125%20-3.06826%2C-1.19028%20-5.25103%2C-4.84124%20-6.31255%2C-6.34375%20l%20-5.90625%2C-1.71875%20c%203.06226%2C-22.15442%202.23655%2C-45.21134%20-3.0625%2C-68.28125%20-5.34839%2C-23.28471%20-14.80037%2C-44.58084%20-27.40625%2C-63.34375%201.51505%2C-1.37729%204.37619%2C-3.91091%205.1875%2C-4.65625%200.23716%2C-2.62417%200.0334%2C-5.37553%202.75%2C-8.28125%205.75134%2C-5.40069%2013.00329%2C-9.87898%2021.75%2C-15.28125%204.15167%2C-2.44252%207.98954%2C-4.01698%2012.15625%2C-7.09375%200.94225%2C-0.69576%202.2289%2C-1.79759%203.21875%2C-2.59375%207.01538%2C-5.59633%208.63058%2C-15.24842%203.59375%2C-21.5625%20-5.03683%2C-6.31408%20-14.79712%2C-6.90883%20-21.8125%2C-1.3125%20-0.99856%2C0.79085%20-2.35353%2C1.82252%20-3.25%2C2.59375%20-3.9265%2C3.37796%20-6.35145%2C6.71439%20-9.65625%2C10.21875%20-7.21249%2C7.32595%20-13.17407%2C13.43777%20-19.71875%2C17.84375%20-2.83601%2C1.65106%20-6.98996%2C1.07978%20-8.87505%2C0.96875%20l%20-5.5625%2C3.96875%20c%20-31.7188%2C-33.26057%20-74.90466%2C-54.52546%20-121.40605%2C-58.6563%20-0.13006%2C-1.94872%20-0.30045%2C-5.47117%20-0.34375%2C-6.53125%20-1.90371%2C-1.82165%20-4.20342%2C-3.37686%20-4.78125%2C-7.3125%20-0.63617%2C-7.86389%200.42597%2C-16.32459%201.65625%2C-26.53125%200.6791%2C-4.76876%201.80738%2C-8.73025%202%2C-13.90625%200.0438%2C-1.17663%20-0.0265%2C-2.88401%20-0.0312%2C-4.15625%20-9.6e-4%2C-8.97409%20-6.54804%2C-16.25082%20-14.625%2C-16.25%20z%20m%20-18.3125%2C113.4375%20-4.34375%2C76.71875%20-0.3125%2C0.15625%20c%20-0.29134%2C6.86335%20-5.93996%2C12.34375%20-12.875%2C12.34375%20-2.84081%2C0%20-5.46294%2C-0.91229%20-7.59375%2C-2.46875%20l%20-0.125%2C0.0625%20-62.90625%2C-44.59375%20c%2019.33365%2C-19.01115%2044.06291%2C-33.06039%2072.5625%2C-39.53125%205.20599%2C-1.18203%2010.40966%2C-2.0591%2015.59375%2C-2.6875%20z%20m%2036.65625%2C0%20c%2033.27347%2C4.09232%2064.04501%2C19.15882%2087.625%2C42.25%20l%20-62.5%2C44.3125%20-0.21875%2C-0.0937%20c%20-5.54745%2C4.05169%20-13.36343%2C3.04639%20-17.6875%2C-2.375%20-1.77132%2C-2.22096%20-2.70072%2C-4.83239%20-2.8125%2C-7.46875%20l%20-0.0625%2C-0.0312%20z%20m%20-147.625%2C70.875%2057.4375%2C51.375%20-0.0625%2C0.3125%20c%205.18437%2C4.50697%205.94888%2C12.32794%201.625%2C17.75%20-1.7712%2C2.22105%20-4.14208%2C3.71074%20-6.6875%2C4.40625%20l%20-0.0625%2C0.25%20-73.625%2C21.25%20c%20-3.74728%2C-34.26517%204.32855%2C-67.57364%2021.375%2C-95.34375%20z%20m%20258.15625%2C0.0312%20c%208.5341%2C13.83256%2014.99655%2C29.28214%2018.84375%2C46.03125%203.80106%2C16.54828%204.75499%2C33.06697%203.1875%2C49.03125%20l%20-74%2C-21.3125%20-0.0625%2C-0.3125%20c%20-6.6265%2C-1.81104%20-10.69893%2C-8.55162%20-9.15625%2C-15.3125%200.63203%2C-2.76962%202.10222%2C-5.11264%204.09375%2C-6.84375%20l%20-0.0312%2C-0.15625%2057.125%2C-51.125%20z%20m%20-140.65625%2C55.3125%2023.53125%2C0%2014.625%2C18.28125%20-5.25%2C22.8125%20-21.125%2C10.15625%20-21.1875%2C-10.1875%20-5.25%2C-22.8125%20z%20m%2075.4375%2C62.5625%20c%200.99997%2C-0.0505%201.99558%2C0.0396%202.96875%2C0.21875%20l%200.125%2C-0.15625%2076.15625%2C12.875%20c%20-11.1455%2C31.3131%20-32.47281%2C58.44018%20-60.96875%2C76.59375%20l%20-29.5625%2C-71.40625%200.0937%2C-0.125%20c%20-2.71561%2C-6.30999%200.002%2C-13.70956%206.25%2C-16.71875%201.59965%2C-0.77041%203.27089%2C-1.19701%204.9375%2C-1.28125%20z%20m%20-127.90625%2C0.3125%20c%205.81174%2C0.0815%2011.02462%2C4.11525%2012.375%2C10.03125%200.63219%2C2.76958%200.3245%2C5.51375%20-0.71875%2C7.9375%20l%200.21875%2C0.28125%20-29.25%2C70.6875%20c%20-27.34716%2C-17.5486%20-49.12927%2C-43.82403%20-60.78125%2C-76.06245%20l%2075.5%2C-12.8125%200.125%2C0.15625%20c%200.84451%2C-0.15541%201.701%2C-0.2304%202.53125%2C-0.21875%20z%20m%2063.78125%2C30.9688%20c%202.02445%2C-0.0744%204.07865%2C0.34098%206.03125%2C1.28125%202.55951%2C1.23253%204.53673%2C3.17319%205.78125%2C5.5%20l%200.28125%2C0%2037.21875%2C67.25%20c%20-4.83029%2C1.61923%20-9.79609%2C3.00308%20-14.875%2C4.15625%20-28.46453%2C6.4629%20-56.83862%2C4.50467%20-82.53125%2C-4.25%20l%2037.125%2C-67.125%200.0625%2C0%20c%202.22767%2C-4.16441%206.45247%2C-6.64887%2010.90625%2C-6.8125%20z%22%20%20%20%20%20%20%20%20%20style%3D%22font-size%3Amedium%3Bfont-style%3Anormal%3Bfont-variant%3Anormal%3Bfont-weight%3Anormal%3Bfont-stretch%3Anormal%3Btext-indent%3A0%3Btext-align%3Astart%3Btext-decoration%3Anone%3Bline-height%3Anormal%3Bletter-spacing%3Anormal%3Bword-spacing%3Anormal%3Btext-transform%3Anone%3Bdirection%3Altr%3Bblock-progression%3Atb%3Bwriting-mode%3Alr-tb%3Btext-anchor%3Astart%3Bbaseline-shift%3Abaseline%3Bcolor%3A%23000000%3Bfill%3A%23ffffff%3Bfill-opacity%3A1%3Bstroke%3A%23ffffff%3Bstroke-width%3A0.25%3Bstroke-miterlimit%3A4%3Bstroke-opacity%3A1%3Bstroke-dasharray%3Anone%3Bmarker%3Anone%3Bvisibility%3Avisible%3Bdisplay%3Ainline%3Boverflow%3Avisible%3Benable-background%3Aaccumulate%3Bfont-family%3ASans%3B-inkscape-font-specification%3ASans%22%20%20%20%20%20%20%20%20%20sodipodi%3Anodetypes%3D%22ccccccccsccccscssccsccccccccscccsccccccccccccccscccscsccsccccscscsccccccccscccscsccccsccccscscscccccccccccccccscccsccccccccccccscccccscccccccccccccccccccccccscccscccccccccscccscccc%22%20%20%20%20%20%20%20%20%20inkscape%3Aexport-filename%3D%22.%2Fpath3059.png%22%20%20%20%20%20%20%20%20%20inkscape%3Aexport-xdpi%3D%22250.55%22%20%20%20%20%20%20%20%20%20inkscape%3Aexport-ydpi%3D%22250.55%22%20%2F%3E%20%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%3C%2Fsvg%3E"),sm.registerType(vp.EMBEDDED_BASE64,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20width%3D%22110.37mm%22%20height%3D%22110.37mm%22%20version%3D%221.1%22%20viewBox%3D%220%200%20110.36904%20110.36904%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%3E%20%3Cmetadata%3E%20%20%3Crdf%3ARDF%3E%20%20%20%3Ccc%3AWork%20rdf%3Aabout%3D%22%22%3E%20%20%20%20%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%20%20%20%20%3Cdc%3Atype%20rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22%2F%3E%20%20%20%20%3Cdc%3Atitle%2F%3E%20%20%20%3C%2Fcc%3AWork%3E%20%20%3C%2Frdf%3ARDF%3E%20%3C%2Fmetadata%3E%20%3Cg%20transform%3D%22translate%28-43.089%20-111.04%29%22%3E%20%20%3Crect%20x%3D%2243.089%22%20y%3D%22111.04%22%20width%3D%22110.37%22%20height%3D%22110.37%22%20stroke-width%3D%22.26458%22%2F%3E%20%20%3Cg%20fill%3D%22%23fff%22%3E%20%20%20%3Cpath%20d%3D%22m70.081%20171.06q0-6.0035-2.3648-9.4046-2.3366-3.4306-6.4468-3.4306t-6.475%203.4306q-2.3366%203.401-2.3366%209.4046t2.3366%209.4341q2.3648%203.401%206.475%203.401t6.4468-3.401q2.3648-3.4306%202.3648-9.4341zm-17.623-11.563q1.6328-2.9574%204.1102-4.377%202.5055-1.4491%205.9683-1.4491%205.743%200%209.3184%204.791%203.6035%204.791%203.6035%2012.599%200%207.8076-3.6035%2012.599-3.5753%204.791-9.3184%204.791-3.4627%200-5.9683-1.4196-2.4774-1.4491-4.1102-4.4066v4.9685h-5.2081v-46.017h5.2081z%22%2F%3E%20%20%20%3Cpath%20d%3D%22m97.744%20163.14q-3.8287%200-6.0809%202.7504-2.224%202.7504-2.224%207.5414%200%204.7614%202.224%207.5414%202.2522%202.7504%206.0809%202.7504%203.8287%200%206.0528-2.7504%202.2522-2.78%202.2522-7.5414%200-4.791-2.2522-7.5414-2.224-2.7504-6.0528-2.7504zm11.289-18.72v5.4416q-2.1396-1.0647-4.3355-1.6266-2.1677-0.5619-4.3073-0.5619-5.6304%200-8.6146%203.9925-2.956%203.9925-3.3783%2012.066%201.661-2.573%204.1665-3.9334%202.5055-1.39%205.5178-1.39%206.3343%200%209.9941%204.0517%203.6879%204.0221%203.6879%2010.972%200%206.802-3.8287%2010.913-3.8287%204.1108-10.191%204.1108-7.2914%200-11.148-5.8557-3.8568-5.8853-3.8568-17.035%200-10.469%204.7296-16.68%204.7296-6.2401%2012.697-6.2401%202.1396%200%204.3073%200.44361%202.1959%200.44361%204.5607%201.3308z%22%2F%3E%20%20%20%3Cpath%20d%3D%22m137.32%20148.64-14.358%2023.571h14.358zm-1.4921-5.205h7.1506v28.776h5.9964v4.9684h-5.9964v10.41h-5.6586v-10.41h-18.975v-5.7669z%22%2F%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fsvg%3E"),sm.registerType(vp.GCS_OBJECT,"data:image/svg+xml,%3Csvg%20id%3D%22Layer_1%22%20data-name%3D%22Layer%201%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22128%22%20height%3D%22128%22%20viewBox%3D%220%200%20128%20128%22%3E%20%20%3Ctitle%3ECloud%20Storage%3C%2Ftitle%3E%20%20%3Cpath%20d%3D%22M126.47%2C58.12l-26.3-45.74A11.56%2C11.56%2C0%2C0%2C0%2C90.31%2C6.5H37.7a11.55%2C11.55%2C0%2C0%2C0-9.86%2C5.88L1.53%2C58a11.48%2C11.48%2C0%2C0%2C0%2C0%2C11.44l26.3%2C46a11.77%2C11.77%2C0%2C0%2C0%2C9.86%2C6.09H90.3a11.73%2C11.73%2C0%2C0%2C0%2C9.87-6.06l26.3-45.74A11.73%2C11.73%2C0%2C0%2C0%2C126.47%2C58.12Z%22%20style%3D%22fill%3A%20%234285f4%22%2F%3E%20%20%3Cpath%20d%3D%22M85.49%2C50.55%2C49.31%2C53.88l-7%2C7%2C6%2C6L42.36%2C77.3l44.2%2C44.2H90.3a11.73%2C11.73%2C0%2C0%2C0%2C9.87-6.06L118.5%2C83.56Z%22%20style%3D%22opacity%3A%200.070000000298023%3Bisolation%3A%20isolate%22%2F%3E%20%20%3Cg%20id%3D%22art%22%3E%20%20%20%20%3Cg%3E%20%20%20%20%20%20%3Cpath%20d%3D%22M84.7%2C50.27H43.26A1.22%2C1.22%2C0%2C0%2C0%2C42%2C51.48v8.57a1.21%2C1.21%2C0%2C0%2C0%2C1.21%2C1.21H84.7a1.22%2C1.22%2C0%2C0%2C0%2C1.21-1.21V51.48a1.22%2C1.22%2C0%2C0%2C0-1.21-1.21m-6.41%2C8a2.48%2C2.48%2C0%2C1%2C1%2C2.48-2.48%2C2.48%2C2.48%2C0%2C0%2C1-2.48%2C2.48%22%20style%3D%22fill%3A%20%23fff%22%2F%3E%20%20%20%20%20%20%3Cpath%20d%3D%22M84.7%2C66.74H43.26A1.22%2C1.22%2C0%2C0%2C0%2C42%2C68v8.57a1.22%2C1.22%2C0%2C0%2C0%2C1.21%2C1.21H84.7a1.22%2C1.22%2C0%2C0%2C0%2C1.21-1.21V67.95a1.22%2C1.22%2C0%2C0%2C0-1.21-1.21m-6.41%2C8a2.48%2C2.48%2C0%2C1%2C1%2C2.48-2.48%2C2.48%2C2.48%2C0%2C0%2C1-2.48%2C2.48%22%20style%3D%22fill%3A%20%23fff%22%2F%3E%20%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%3C%2Fsvg%3E"),sm.registerType(vp.GITHUB_FILE,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20width%3D%22161.03%22%20height%3D%22157.06%22%20version%3D%221.1%22%20viewBox%3D%220%200%20161.03467%20157.05798%22%20xml%3Aspace%3D%22preserve%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%3E%3Cmetadata%3E%3Crdf%3ARDF%3E%3Ccc%3AWork%20rdf%3Aabout%3D%22%22%3E%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%3Cdc%3Atype%20rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22%2F%3E%3Cdc%3Atitle%2F%3E%3C%2Fcc%3AWork%3E%3C%2Frdf%3ARDF%3E%3C%2Fmetadata%3E%3Cg%20transform%3D%22matrix%281.3333%200%200%20-1.3333%20-386.96%20658.07%29%22%3E%3Cg%20transform%3D%22translate%28350.61%20493.55%29%22%3E%3Cpath%20d%3D%22m0%200c-33.347%200-60.388-27.035-60.388-60.388%200-26.68%2017.303-49.316%2041.297-57.301%203.018-0.559%204.126%201.31%204.126%202.905%200%201.439-0.056%206.197-0.082%2011.243-16.8-3.653-20.345%207.125-20.345%207.125-2.747%206.979-6.705%208.836-6.705%208.836-5.479%203.748%200.413%203.671%200.413%203.671%206.064-0.426%209.257-6.224%209.257-6.224%205.386-9.231%2014.127-6.562%2017.573-5.019%200.543%203.902%202.107%206.567%203.834%208.075-13.413%201.526-27.513%206.705-27.513%2029.844%200%206.592%202.359%2011.98%206.222%2016.209-0.627%201.521-2.694%207.663%200.586%2015.981%200%200%205.071%201.622%2016.61-6.191%204.817%201.338%209.983%202.009%2015.115%202.033%205.132-0.024%2010.302-0.695%2015.128-2.033%2011.526%207.813%2016.59%206.191%2016.59%206.191%203.287-8.318%201.22-14.46%200.593-15.981%203.872-4.229%206.214-9.617%206.214-16.209%200-23.195-14.127-28.301-27.574-29.796%202.166-1.874%204.096-5.549%204.096-11.183%200-8.08-0.069-14.583-0.069-16.572%200-1.608%201.086-3.49%204.147-2.898%2023.982%207.994%2041.263%2030.622%2041.263%2057.294%200%2033.353-27.037%2060.388-60.388%2060.388%22%20fill%3D%22%231b1817%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"),sm.registerType(vp.GIT_REPO,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2297px%22%20height%3D%2297px%22%20viewBox%3D%220%200%2097%2097%22%20enable-background%3D%22new%200%200%2097%2097%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%3E%20%3Cpath%20fill%3D%22%23F05133%22%20d%3D%22M92.71%2C44.408L52.591%2C4.291c-2.31-2.311-6.057-2.311-8.369%2C0l-8.33%2C8.332L46.459%2C23.19%20%20c2.456-0.83%2C5.272-0.273%2C7.229%2C1.685c1.969%2C1.97%2C2.521%2C4.81%2C1.67%2C7.275l10.186%2C10.185c2.465-0.85%2C5.307-0.3%2C7.275%2C1.671%20%20c2.75%2C2.75%2C2.75%2C7.206%2C0%2C9.958c-2.752%2C2.751-7.208%2C2.751-9.961%2C0c-2.068-2.07-2.58-5.11-1.531-7.658l-9.5-9.499v24.997%20%20c0.67%2C0.332%2C1.303%2C0.774%2C1.861%2C1.332c2.75%2C2.75%2C2.75%2C7.206%2C0%2C9.959c-2.75%2C2.749-7.209%2C2.749-9.957%2C0c-2.75-2.754-2.75-7.21%2C0-9.959%20%20c0.68-0.679%2C1.467-1.193%2C2.307-1.537V36.369c-0.84-0.344-1.625-0.853-2.307-1.537c-2.083-2.082-2.584-5.14-1.516-7.698%20%20L31.798%2C16.715L4.288%2C44.222c-2.311%2C2.313-2.311%2C6.06%2C0%2C8.371l40.121%2C40.118c2.31%2C2.311%2C6.056%2C2.311%2C8.369%2C0L92.71%2C52.779%20%20C95.021%2C50.468%2C95.021%2C46.719%2C92.71%2C44.408z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"),sm.registerType(vp.GITLAB_FILE,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20standalone%3D%22no%22%3F%3E%3Csvg%20width%3D%22494px%22%20height%3D%22455px%22%20viewBox%3D%220%200%20494%20455%22%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20xmlns%3Asketch%3D%22http%3A%2F%2Fwww.bohemiancoding.com%2Fsketch%2Fns%22%3E%20%20%20%20%20%20%20%20%3Ctitle%3Elogo%3C%2Ftitle%3E%20%20%20%20%3Cdesc%3ECreated%20with%20Sketch.%3C%2Fdesc%3E%20%20%20%20%3Cdefs%3E%20%20%20%20%20%20%20%20%3Cpath%20id%3D%22path-1%22%20d%3D%22M0%2C1173.3333%20L1999.99995%2C1173.3333%20L1999.99995%2C0%20L0%2C0%20L0%2C1173.3333%20L0%2C1173.3333%20Z%22%3E%3C%2Fpath%3E%20%20%20%20%3C%2Fdefs%3E%20%20%20%20%3Cg%20id%3D%22Page-1%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%20sketch%3Atype%3D%22MSPage%22%3E%20%20%20%20%20%20%20%20%3Cg%20id%3D%22gitlab_logo%22%20sketch%3Atype%3D%22MSLayerGroup%22%20transform%3D%22translate%28-359.000000%2C%20-360.000000%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g10%22%20transform%3D%22translate%28999.999975%2C%20587.666648%29%20scale%281%2C%20-1%29%20translate%28-999.999975%2C%20-587.666648%29%20translate%280.000000%2C%200.999996%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g16%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g18-Clipped%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cmask%20id%3D%22mask-2%22%20sketch%3Aname%3D%22path22%22%20fill%3D%22white%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cuse%20xlink%3Ahref%3D%22%23path-1%22%3E%3C%2Fuse%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fmask%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22path22%22%3E%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g18%22%20mask%3D%22url%28%23mask-2%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20transform%3D%22translate%28358.666658%2C%20358.666658%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g44%22%20transform%3D%22translate%280.532000%2C%200.774933%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M491.999988%2C194.666662%20L464.441322%2C279.481326%20L409.82399%2C447.578655%20C407.014656%2C456.226655%20394.778657%2C456.226655%20391.96799%2C447.578655%20L337.349325%2C279.481326%20L155.982663%2C279.481326%20L101.362664%2C447.578655%20C98.5533309%2C456.226655%2086.3173312%2C456.226655%2083.5066646%2C447.578655%20L28.8893326%2C279.481326%20L1.33199997%2C194.666662%20C-1.18266664%2C186.930662%201.57199996%2C178.455996%208.1519998%2C173.674662%20L246.665327%2C0.385333324%20L485.179988%2C173.674662%20C491.759988%2C178.455996%20494.513321%2C186.930662%20491.999988%2C194.666662%22%20id%3D%22path46%22%20fill%3D%22%23FC6D26%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g48%22%20transform%3D%22translate%28155.197863%2C%201.160267%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M91.9999977%2C0%20L91.9999977%2C0%20L182.683995%2C279.095993%20L1.31599997%2C279.095993%20L91.9999977%2C0%20L91.9999977%2C0%20Z%22%20id%3D%22path50%22%20fill%3D%22%23E24329%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g52%22%20transform%3D%22translate%28247.197860%2C%201.160267%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22path54%22%3E%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g56%22%20transform%3D%22translate%2828.531199%2C%201.160800%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M218.666661%2C0%20L127.982663%2C279.09466%20L0.890666644%2C279.09466%20L218.666661%2C0%20L218.666661%2C0%20Z%22%20id%3D%22path58%22%20fill%3D%22%23FC6D26%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g60%22%20transform%3D%22translate%28247.197860%2C%201.160800%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22path62%22%3E%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g64%22%20transform%3D%22translate%280.088533%2C%200.255867%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M29.3333326%2C279.999993%20L29.3333326%2C279.999993%20L1.77466662%2C195.185328%20C-0.738666648%2C187.449329%202.01466662%2C178.974662%208.59599979%2C174.194662%20L247.109327%2C0.905333311%20L29.3333326%2C279.999993%20L29.3333326%2C279.999993%20Z%22%20id%3D%22path66%22%20fill%3D%22%23FCA326%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g68%22%20transform%3D%22translate%28247.197860%2C%201.160267%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22path70%22%3E%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g72%22%20transform%3D%22translate%2829.421866%2C%20280.255593%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M0%2C0%20L127.091997%2C0%20L72.4733315%2C168.097329%20C69.6626649%2C176.746662%2057.4266652%2C176.746662%2054.617332%2C168.097329%20L0%2C0%20L0%2C0%20Z%22%20id%3D%22path74%22%20fill%3D%22%23E24329%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g76%22%20transform%3D%22translate%28247.197860%2C%201.160800%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M0%2C0%20L90.6839977%2C279.09466%20L217.775995%2C279.09466%20L0%2C0%20L0%2C0%20Z%22%20id%3D%22path78%22%20fill%3D%22%23FC6D26%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g80%22%20transform%3D%22translate%28246.307061%2C%200.255867%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M218.666661%2C279.999993%20L218.666661%2C279.999993%20L246.225327%2C195.185328%20C248.73866%2C187.449329%20245.985327%2C178.974662%20239.403994%2C174.194662%20L0.890666644%2C0.905333311%20L218.666661%2C279.999993%20L218.666661%2C279.999993%20Z%22%20id%3D%22path82%22%20fill%3D%22%23FCA326%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g84%22%20transform%3D%22translate%28336.973725%2C%20280.255593%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M127.999997%2C0%20L0.907999977%2C0%20L55.5266653%2C168.097329%20C58.3373319%2C176.746662%2070.5733316%2C176.746662%2073.3826648%2C168.097329%20L127.999997%2C0%20L127.999997%2C0%20Z%22%20id%3D%22path86%22%20fill%3D%22%23E24329%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%3C%2Fg%3E%3C%2Fsvg%3E"),sm.registerType(vp.BITBUCKET_FILE,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%2065%2063.27%22%3E%20%20%3Cdefs%3E%20%20%20%20%3Cstyle%3E.cls-2%7Bfill%3Anone%3B%7D.cls-3%7Bfill%3A%232684ff%3B%7D.cls-4%7Bfill%3Aurl%28%23New_Gradient_Swatch_1%29%3B%7D%3C%2Fstyle%3E%20%20%20%20%3ClinearGradient%20id%3D%22New_Gradient_Swatch_1%22%20x1%3D%2264.01%22%20y1%3D%2230.27%22%20x2%3D%2232.99%22%20y2%3D%2254.48%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.18%22%20stop-color%3D%22%230052cc%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%221%22%20stop-color%3D%22%232684ff%22%2F%3E%20%20%20%20%3C%2FlinearGradient%3E%20%20%3C%2Fdefs%3E%20%20%3Ctitle%3EBitbucket-blue%3C%2Ftitle%3E%20%20%3Cg%20id%3D%22Layer_2%22%20data-name%3D%22Layer%202%22%3E%20%20%20%20%3Cg%20id%3D%22Blue%22%3E%20%20%20%20%20%20%3Cpolygon%20class%3D%22cls-2%22%20points%3D%2224.7%2043.51%2037.75%2043.51%2040.9%2025.12%2021.23%2025.12%2024.7%2043.51%22%2F%3E%20%20%20%20%20%20%3Cpath%20class%3D%22cls-3%22%20d%3D%22M2%2C6.26A2%2C2%2C0%2C0%2C0%2C0%2C8.58L8.49%2C60.12a2.72%2C2.72%2C0%2C0%2C0%2C2.66%2C2.27H51.88a2%2C2%2C0%2C0%2C0%2C2-1.68L62.37%2C8.59a2%2C2%2C0%2C0%2C0-2-2.32ZM37.75%2C43.51h-13L21.23%2C25.12H40.9Z%22%2F%3E%20%20%20%20%20%20%3Cpath%20class%3D%22cls-4%22%20d%3D%22M59.67%2C25.12H40.9L37.75%2C43.51h-13L9.4%2C61.73a2.71%2C2.71%2C0%2C0%2C0%2C1.75.66H51.89a2%2C2%2C0%2C0%2C0%2C2-1.68Z%22%2F%3E%20%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%3C%2Fsvg%3E"),sm.registerType(vp.S3_OBJECT,"data:image/svg+xml,%3Csvg%20id%3D%22Layer_1%22%20data-name%3D%22Layer%201%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22100%22%20height%3D%22100%22%20viewBox%3D%220%200%20100%20100%22%3E%20%20%3Ctitle%3EStorage%3C%2Ftitle%3E%20%20%3Cg%3E%20%20%20%20%3Cpolygon%20points%3D%2221.54%2023.23%2016.08%2025.96%2016.08%2073.93%2021.54%2076.66%2034.94%2049.94%2021.54%2023.23%22%20fill%3D%22%238c3123%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2250%2069.76%2021.54%2076.65%2021.54%2023.23%2050%2030.12%2063.45%2050.02%2050%2069.76%22%20fill%3D%22%23e05243%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2250%2069.76%2078.45%2076.65%2083.37%2050.62%2078.45%2023.23%2050%2030.12%2050%2069.76%22%20fill%3D%22%238c3123%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2278.45%2023.23%2083.92%2025.96%2083.92%2073.93%2078.45%2076.66%2078.45%2023.23%22%20fill%3D%22%23e05243%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2237.59%2058.78%2050%2060.37%2059.84%2050.02%2050%2039.68%2037.59%2041.24%2037.59%2058.78%22%20fill%3D%22%238c3123%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2262.41%2032.75%2050%2035.01%2037.59%2032.75%2050%209%2062.41%2032.75%22%20fill%3D%22%235e1f18%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2262.41%2067.25%2050%2064.97%2037.59%2067.25%2050%2091%2062.41%2067.25%22%20fill%3D%22%23f2b0a9%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2262.41%2032.75%2050%2029.68%2050%209%2062.41%2015.2%2062.41%2032.75%22%20fill%3D%22%23e05243%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2237.59%2032.75%2050%2029.68%2050%209%2037.59%2015.2%2037.59%2032.75%22%20fill%3D%22%238c3123%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2250%2091%2062.41%2084.8%2062.41%2067.25%2050%2070.32%2050%2091%22%20fill%3D%22%23e05243%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2250%2091%2037.59%2084.8%2037.59%2067.25%2050%2070.32%2050%2091%22%20fill%3D%22%238c3123%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2262.41%2058.78%2050%2060.37%2050%2039.68%2062.41%2041.24%2062.41%2058.78%22%20fill%3D%22%23e05243%22%2F%3E%20%20%3C%2Fg%3E%3C%2Fsvg%3E"),sm.registerType(vp.HELM_CHART,"helm-chart-artifact2320ab55b431ba0a.svg"),sm.registerType(vp.IVY_FILE,"ivy-artifact537f2ce5956f4038.svg"),sm.registerType(vp.JENKINS_FILE,"jenkins-file-artifactffa863534b26f298.svg"),sm.registerType(vp.MAVEN_FILE,"data:image/svg+xml,%3Csvg%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2232mm%22%20width%3D%2232mm%22%20version%3D%221.1%22%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%20viewBox%3D%220%200%20113.38583%20113.38582%22%3E%20%3Cg%20transform%3D%22translate%28-212.06%20-472.38%29%22%3E%20%20%3Cg%20transform%3D%22translate%288.4853%20-1.4142%29%22%3E%20%20%20%3Cpath%20fill%3D%22%23e8a1a2%22%20d%3D%22m240.91%20580.01c-1.4824-4.2852-3.0745-9.2894-3.538-11.12-1.1372-4.4931-1.6472-4.8098-4.1569-2.5813-2.1418%201.9018-2.1462%201.9003-0.97095-0.33946%201.0077-1.9204%200.9278-2.25-0.54562-2.25-1.5731%200-1.5619-0.12023%200.12599-1.3544%201.7365-1.2698%201.6088-1.5199-2.041-4-2.4685-1.6774-3.2594-2.6456-2.1612-2.6456%202.1818%200%202.2506%200.42403-1.1547-7.1117-6.3934-14.148-9.1638-31.223-8.7054-53.655%200.26565-13%200.57841-15.561%202.1071-17.25%202.169-2.3967%202.745-2.4287%207.0398-0.39064%202.1654%201.0275%204.0683%203.0685%205.3612%205.75%202.5118%205.2098%204.2463%2018.35%202.7926%2021.157-0.92374%201.7835-0.85705%201.8525%200.61602%200.63738%202.0383-1.6814%202.7958-0.21965%203.0241%205.835%200.0833%202.209%200.54518%204.0188%201.0264%204.0219%200.48125%200.003%200.605%201.3557%200.275%203.0057s-0.19352%203%200.30328%203c2.6941%200%203.7428%2017.64%201.4808%2024.906-1.6203%205.2051%201.6784%200.7327%205.5919-7.5816%207.4605-15.85%2018.983-31.543%2033.937-46.223%2010.047-9.862%2014.218-12.61%2016.932-11.158%207.3999%203.9603%204.4295%2017.155-6.47%2028.741-2.791%202.9668-4.4785%205.1654-3.75%204.8858%202.3126-0.88743%201.4341%201.8404-1.8925%205.8761-1.7694%202.1466-3.3115%204.5462-3.4269%205.3325s-1.1503%202.0883-2.2997%202.8934c-1.1494%200.80509-1.8715%201.8172-1.6045%202.2491%200.64529%201.0441-4.8466%209.7279-8.8005%2013.915-3.6411%203.8562-9.5531%207.1556-12.862%207.1777-1.6096%200.0108-1.8993%200.26298-0.97519%200.84897%201.5334%200.97236%206.1197%200.31492%207.9595-1.141%200.70079-0.55456%201.5178-0.76462%201.8157-0.46679%200.68106%200.68106-5.8716%205.7435-7.4342%205.7435-0.63559%200-1.1556%200.43588-1.1556%200.96861%200%200.53274%200.74882%200.68127%201.664%200.33007%201.1573-0.44408%201.4322-0.26346%200.90287%200.59306-1.0808%201.7487-5.096%203.1042-9.7336%203.2859-3.501%200.13718-3.9164%200.40636-3.456%202.2391%200.50216%201.9991%200.4667%202.0075-0.87842%200.20849-1.2384-1.6564-1.0516-2.5682%201.604-7.8289%202.721-5.3903%2013.868-24.641%2017.811-30.758%200.8725-1.3537%201.0905-2.1559%200.4845-1.7825-1.7197%201.0594-17.765%2028.347-24.189%2041.136l-2.5006%204.9786%202.7335%208.3935c3.4677%2010.648%202.7166%2011.942-0.88644%201.5269zm-0.10056-17.041c0.42418-1.404%200.25625-2.25-0.44662-2.25-0.61952%200-0.86751%200.41891-0.55108%200.9309%200.31644%200.512%200.16515%201.1844-0.33619%201.4943-0.50134%200.30984-1.1943-0.17347-1.5398-1.074-0.34558-0.90056-0.85533-1.4104-1.1328-1.133-0.27744%200.27744-0.0251%201.7651%200.5607%203.306%201.1274%202.9652%202.2955%202.5332%203.4458-1.2742zm-5.5256-9.9968c-1.0612-3.7108-1.9294-7.1608-1.9294-7.6667%200-0.50592-0.25022-0.66963-0.55604-0.36381-0.52233%200.52233%202.1863%2012.37%203.2048%2014.018%201.2636%202.0446%201.0362%200.15112-0.71935-5.9875zm-4.4557-17.727c-0.93421-4.1991-1.9183-7.415-2.1869-7.1464-0.26861%200.2686%200.31288%203.8871%201.2922%208.0411%200.97931%204.154%201.9634%207.3699%202.1869%207.1464%200.2235-0.22351-0.35799-3.842-1.2922-8.0411zm-3.0737-14.426c-0.36648-2.2918-0.87608-3.9572-1.1324-3.7009-0.25636%200.25637-0.15176%202.3268%200.23245%204.6009s0.89381%203.9395%201.1324%203.7009c0.23863-0.23864%200.13403-2.309-0.23245-4.6009zm45.009-6.1437c3.0475-4.424%205.0948-7.768%204.5497-7.4311-1.1721%200.72439-11.233%2015.475-10.555%2015.475%200.25562%200%202.9582-3.6196%206.0056-8.0437zm-46.726-1.1438c-0.31922-0.79773-0.55618-0.56078-0.60416%200.60417-0.0434%201.0542%200.19292%201.6448%200.52522%201.3125%200.33229-0.3323%200.36781-1.1948%200.0789-1.9167zm-0.99378-9.5625c-0.25153-0.9625-0.45733-0.175-0.45733%201.75s0.2058%202.7125%200.45733%201.75c0.25152-0.9625%200.25152-2.5375%200-3.5zm55.438%200c1.2439-1.5861%201.2085-1.6214-0.37756-0.37756-1.6658%201.3064-2.1955%202.1276-1.3724%202.1276%200.20765%200%200.99515-0.7875%201.75-1.75zm-50.173%2080.37c1.8714-4.922%206.1906-12.808%206.7233-12.275%200.64112%200.64113-5.4132%2013.374-6.7529%2014.202-0.54189%200.33491-0.52977-0.45565%200.0295-1.9267z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23f8a52a%22%20d%3D%22m233.34%20578.74c2.2061-4.3878%204.0112-8.9144%204.0112-10.059%200-1.1447%200.36736-1.8542%200.81635-1.5767%200.44899%200.27749%201.5191-1.046%202.3781-2.941%201.2158-2.6824%201.275-3.4455%200.26698-3.4455-0.7121%200-1.4875%200.5625-1.723%201.25-1.3539%203.9511-11.385-39.693-14.286-62.157l-1.368-10.593%200.37967%2010c0.51206%2013.487%205.5806%2038.798%2012.514%2062.493%201.2478%204.2643%201.2661%204.9404%200.0831%203.0709-0.70095-1.1077-1.2282-1.1704-2.3079-0.27424-1.1575%200.96065-1.324%200.64698-0.96271-1.8143%200.24021-1.6367%200.0482-2.9858-0.42675-2.998-0.47493-0.0122-1.9885-0.95412-3.3635-2.0931-1.7885-1.4815-1.9782-1.9019-0.66644-1.4771%201.0085%200.32657%201.6639%200.25596%201.4566-0.15691-8.5314-16.99-11.952-33.628-11.87-57.739%200.0614-18.043%200.65624-20.888%204.4601-21.335%207.1233-0.83622%2011.788%207.2931%2011.99%2020.896%200.0995%206.7048%200.41125%208.5089%201.3385%207.7456%201.6189-1.3328%202.7298%203.0911%201.9629%207.8168-0.49112%203.0264-0.36328%203.3534%200.90085%202.3043%201.1834-0.98217%201.3868-0.94897%201.0338%200.1688-0.24165%200.76529-0.73025%202.7075-1.0858%204.3161-0.54261%202.455-0.41766%202.7348%200.7782%201.7423%201.1895-0.98722%201.6353-0.18963%202.7012%204.8334%201.5414%207.2635%200.83326%2014.446-1.9652%2019.931-1.1416%202.2376-1.649%204.0684-1.1278%204.0684%201.6726%200%204.659-4.6191%2010.471-16.196%206.6604-13.266%2015.19-25.095%2027.19-37.705%2015.39-16.173%2021.504-19.166%2024.479-11.986%201.047%202.5278%201.06%204.0393%200.0665%207.7627-2.0495%207.6813-10.5%2019.159-15.205%2020.653-2.5932%200.82304-1.4824%202.4338%201.1954%201.7336%202.0694-0.54117%202.0658-0.49392-0.23563%203.0169-1.2859%201.9617-3.6686%204.3527-5.295%205.3134-2.5848%201.5269-2.7263%201.8276-1.1244%202.3896%201.576%200.55283%201.3578%200.9467-1.5584%202.8134-2.2594%201.4463-2.8101%202.1762-1.6502%202.1875%201.4874%200.0144%201.3089%200.71866-1.2265%204.8392-5.5503%209.0204-14.408%2016.082-20.264%2016.156-0.9625%200.0121-1.75%200.47196-1.75%201.022%200%201.3119%205.5942%201.2875%208.0657-0.0352%201.0638-0.56935%201.9343-0.75399%201.9343-0.4103%200%201.1947-4.5108%204.3792-6.25%204.4122-1.9687%200.0374-2.4476%202.0155-0.5%202.0651%200.70412%200.0179%200.40229%200.67298-0.69113%201.5-1.0894%200.82402-4.077%201.4682-6.809%201.4682-3.4249%200-4.6564%200.34222-4.1544%201.1545%200.43457%200.70315%200.2751%200.88354-0.40791%200.46142-2.661-1.6446%2023.158-44.042%2037.881-62.204%209.6668-11.925%2010.352-13.178%202.9574-5.4121-11.195%2011.758-25.777%2033.509-40.138%2059.871-6.1651%2011.317-7.6224%2014.756-6.8581%2016.184%200.53378%200.99738%200.94199%202.4055%200.90712%203.1292-0.0349%200.72366-0.52319%200.19074-1.0852-1.1843-0.97068-2.375-1.2182-2.1124-4.9487%205.25-2.1598%204.2625-4.1515%207.75-4.426%207.75-0.27449%200%201.306-3.59%203.5121-7.9778zm9.0901%205.3096c-0.0434-0.64252-0.33793-1.9925-0.65446-3-0.54705-1.7412-0.51883-1.7434%200.57078-0.0441%200.63045%200.98322%200.92496%202.3332%200.65445%203-0.35498%200.87499-0.51379%200.88727-0.57077%200.0441z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23ee8a2e%22%20d%3D%22m233.34%20578.74c2.2061-4.3878%204.0112-8.9144%204.0112-10.059%200-1.1447%200.36736-1.8542%200.81635-1.5767%200.44899%200.27749%201.5191-1.046%202.3781-2.941%201.2158-2.6824%201.275-3.4455%200.26698-3.4455-0.7121%200-1.4875%200.5625-1.723%201.25-1.4444%204.2152-12.641-45.572-14.224-63.25l-0.67174-7.5%203.9696-3.8462%203.9696-3.8462%201.2942%203.8462c0.71181%202.1154%201.3235%207.2934%201.3593%2011.507%200.0499%205.8679%200.34798%207.4268%201.2739%206.6618%201.6189-1.3376%202.7301%203.0854%201.9629%207.8133-0.49112%203.0264-0.36328%203.3534%200.90085%202.3043%201.1834-0.98217%201.3868-0.94897%201.0338%200.1688-0.24165%200.76529-0.73025%202.7075-1.0858%204.3161-0.54261%202.455-0.41766%202.7348%200.7782%201.7423%201.1895-0.98722%201.6353-0.18963%202.7012%204.8334%201.5414%207.2635%200.83326%2014.446-1.9652%2019.931-1.1416%202.2376-1.649%204.0684-1.1278%204.0684%201.6726%200%204.659-4.6191%2010.471-16.196%203.1212-6.217%208.5466-15.168%2012.056-19.89%206.4511-8.6802%2022.123-25.914%2023.566-25.914%200.4305%200%201.0767%201.1712%201.4359%202.6026%200.51967%202.0705-0.0742%203.4504-2.9048%206.75-10.644%2012.407-25.113%2034.515-37.644%2057.518-6.1651%2011.317-7.6224%2014.756-6.8581%2016.184%200.53378%200.99738%200.94199%202.4055%200.90712%203.1292-0.0349%200.72366-0.52319%200.19074-1.0852-1.1843-0.97068-2.375-1.2182-2.1124-4.9487%205.25-2.1598%204.2625-4.1515%207.75-4.426%207.75-0.27449%200%201.306-3.59%203.5121-7.9778zm9.0901%205.3096c-0.0434-0.64252-0.33793-1.9925-0.65446-3-0.54705-1.7412-0.51883-1.7434%200.57078-0.0441%200.63045%200.98322%200.92496%202.3332%200.65445%203-0.35498%200.87499-0.51379%200.88727-0.57077%200.0441zm-9.2887-21.356c0.24021-1.6367%200.0482-2.9858-0.42675-2.998-0.47493-0.0122-1.9885-0.95412-3.3635-2.0931-1.7885-1.4815-1.9782-1.9019-0.66644-1.4771%201.0085%200.32657%201.6639%200.25596%201.4566-0.15691-8.9594-17.843-12.488-36.385-11.898-62.524l0.10773-4.7731%202.3532%201.5419c2.083%201.3648%202.42%202.5444%202.9354%2010.273%200.87913%2013.184%206.336%2039.513%2012.689%2061.225%201.2478%204.2643%201.2661%204.9404%200.0831%203.0709-0.70095-1.1077-1.2282-1.1704-2.3079-0.27424-1.1575%200.96065-1.324%200.64698-0.96271-1.8143zm11.943%200.42401c-1.8279-1.8279%2024.6-44.87%2037.239-60.65l6.2075-7.75h5.9103c7.0286%200%207.2251%200.58116%202.5402%207.5134-4.0552%206.0005-8.1478%2010.199-10.746%2011.023-2.5763%200.81769-1.4423%202.422%201.2199%201.7258%202.0694-0.54117%202.0658-0.49392-0.23563%203.0169-1.2859%201.9617-3.6686%204.3527-5.295%205.3134-2.5848%201.5269-2.7263%201.8276-1.1244%202.3896%201.576%200.55283%201.3578%200.9467-1.5584%202.8134-2.2594%201.4463-2.8101%202.1762-1.6502%202.1875%201.4874%200.0144%201.3089%200.71866-1.2265%204.8392-5.5503%209.0204-14.408%2016.082-20.264%2016.156-0.9625%200.0121-1.75%200.47196-1.75%201.022%200%201.3119%205.5942%201.2875%208.0657-0.0352%201.0638-0.56935%201.9343-0.75399%201.9343-0.4103%200%201.1947-4.5108%204.3792-6.25%204.4122-1.9687%200.0374-2.4476%202.0155-0.5%202.0651%200.70412%200.0179%200.40229%200.67298-0.69113%201.5-1.0894%200.82402-4.077%201.4682-6.809%201.4682-2.9906%200-4.6295%200.38564-4.2498%201%200.67773%201.0966%200.18616%201.3528-0.76691%200.39976z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23a0579b%22%20d%3D%22m233.34%20578.74c2.2061-4.3878%204.0112-8.9144%204.0112-10.059%200-1.1447%200.36736-1.8542%200.81635-1.5767%200.44899%200.27749%201.5191-1.046%202.3781-2.941%201.2158-2.6824%201.275-3.4455%200.26698-3.4455-0.7121%200-1.4875%200.5625-1.723%201.25-1.4255%204.1602-13.738-50.443-13.738-60.925%200-3.9763%200.2069-4.3251%202.5657-4.3251%201.4112%200%203.4251-0.45991%204.4754-1.022%201.6085-0.86085%202.0116-0.61573%202.5563%201.5543%200.35564%201.417%200.38906%204.1634%200.0743%206.1032-0.47971%202.9561-0.34429%203.3376%200.83677%202.3575%201.1386-0.94491%201.5364-0.66207%202.0723%201.4731%200.36478%201.4534%200.40568%204.2296%200.0909%206.1694-0.49112%203.0264-0.36327%203.3534%200.90086%202.3043%201.1834-0.98217%201.3868-0.94897%201.0338%200.1688-0.24166%200.76529-0.73026%202.7075-1.0858%204.3161-0.54261%202.455-0.41766%202.7348%200.7782%201.7423%201.1895-0.98722%201.6353-0.18963%202.7012%204.8334%201.5414%207.2635%200.83326%2014.446-1.9652%2019.931-1.1416%202.2376-1.649%204.0684-1.1278%204.0684%201.6726%200%204.659-4.6191%2010.471-16.196%205.815-11.583%2014.544-24.164%2023.356-33.663%204.7543-5.1249%205.0822-5.2996%207.5078-4l2.5364%201.359-7.9171%2010.904c-9.8621%2013.583-20.076%2029.991-29.524%2047.428-5.6996%2010.52-7.063%2013.813-6.3051%2015.229%200.53191%200.99388%200.93859%202.3991%200.90372%203.1228-0.0349%200.72366-0.52319%200.19074-1.0852-1.1843-0.97068-2.375-1.2182-2.1124-4.9487%205.25-2.1598%204.2625-4.1515%207.75-4.426%207.75-0.27449%200%201.306-3.59%203.5121-7.9778zm9.0901%205.3096c-0.0434-0.64252-0.33793-1.9925-0.65446-3-0.54705-1.7412-0.51883-1.7434%200.57078-0.0441%200.63045%200.98322%200.92496%202.3332%200.65445%203-0.35498%200.87499-0.51379%200.88727-0.57077%200.0441zm-9.2887-21.356c0.24021-1.6367%200.0482-2.9858-0.42675-2.998-0.47493-0.0122-1.9885-0.95412-3.3635-2.0931-1.7885-1.4815-1.9782-1.9019-0.66644-1.4771%201.0085%200.32657%201.6639%200.25596%201.4566-0.15691-7.5974-15.13-11.778-32.994-11.786-50.362-0.004-8.5328%200.0177-8.6072%202.3774-8.1561%202.1048%200.40235%202.4608%201.1704%203.0642%206.6113%201.4438%2013.019%207.1395%2039.22%2012.532%2057.649%201.2478%204.2643%201.2661%204.9404%200.0831%203.0709-0.70095-1.1077-1.2282-1.1704-2.3079-0.27424-1.1575%200.96065-1.324%200.64698-0.96271-1.8143zm11.943%200.42401c-1.6524-1.6524%2024.342-44.54%2035.278-58.204%204.2053-5.2544%204.2649-5.2867%206.367-3.4544%201.1671%201.0173%203.3335%202.4537%204.8144%203.1922%202.6064%201.2997%202.6383%201.4164%201%203.6512-0.93085%201.2697-3.1274%203.0951-4.8813%204.0563-3.4635%201.8982-3.5904%203.506-0.20681%202.6212%202.0694-0.54117%202.0658-0.49392-0.23563%203.0169-1.2859%201.9617-3.6686%204.3527-5.295%205.3134-2.5848%201.5269-2.7263%201.8276-1.1244%202.3896%201.576%200.55283%201.3578%200.9467-1.5584%202.8134-2.2594%201.4463-2.8101%202.1762-1.6502%202.1875%201.4874%200.0144%201.3089%200.71866-1.2265%204.8392-5.5503%209.0204-14.408%2016.082-20.264%2016.156-0.9625%200.0121-1.75%200.47196-1.75%201.022%200%201.3119%205.5942%201.2875%208.0657-0.0352%201.0638-0.56935%201.9343-0.75399%201.9343-0.4103%200%201.1947-4.5108%204.3792-6.25%204.4122-1.9687%200.0374-2.4476%202.0155-0.5%202.0651%200.70412%200.0179%200.40229%200.67298-0.69113%201.5-1.0894%200.82402-4.077%201.4682-6.809%201.4682-2.9906%200-4.6295%200.38564-4.2498%201%200.67773%201.0966%200.18616%201.3528-0.76691%200.39976z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23d9555d%22%20d%3D%22m232.38%20581.22c0-0.55%200.43621-1.675%200.96937-2.5s0.96937-1.05%200.96937-0.5-0.43621%201.675-0.96937%202.5-0.96937%201.05-0.96937%200.5zm1.9694-18.927c0-0.78508-1.1097-2.3003-2.4661-3.3672s-2.1836-2.2223-1.8383-2.5676c0.34526-0.34526-0.53192-2.7675-1.9493-5.3828-5.633-10.394-9.7349-29.495-9.7423-45.366-0.004-8.5328%200.0177-8.6072%202.3774-8.1561%202.1048%200.40235%202.4608%201.1704%203.0642%206.6113%201.3157%2011.864%207.161%2039.457%2012.161%2057.406%200.38001%201.3642%200.18716%202.25-0.48987%202.25-0.61415%200-1.1166-0.64234-1.1166-1.4274zm13.085-1.4621c-1.1463-0.75519-0.12074-3.2717%205.4085-13.271%207.5732-13.696%2020.99-34.488%2027.517-42.643%204.2053-5.2544%204.2649-5.2867%206.367-3.4544%201.1671%201.0173%203.3335%202.4537%204.8144%203.1922%202.6064%201.2997%202.6383%201.4164%201%203.6512-0.93085%201.2697-3.1274%203.0951-4.8813%204.0563-3.4635%201.8982-3.5904%203.506-0.20681%202.6212%202.0694-0.54117%202.0658-0.49392-0.23563%203.0169-1.2859%201.9617-3.6686%204.3527-5.295%205.3134-2.5848%201.5269-2.7263%201.8276-1.1244%202.3896%201.576%200.55283%201.3578%200.9467-1.5584%202.8134-2.2594%201.4463-2.8101%202.1762-1.6502%202.1875%201.4874%200.0144%201.3089%200.71866-1.2265%204.8392-5.7488%209.343-14.425%2016.094-20.764%2016.156-1.2375%200.0121-2.25%200.52921-2.25%201.1492%200%200.75009%201.6731%200.96646%205.0007%200.64673%204.0039-0.38473%204.7874-0.22358%203.9309%200.80849-0.58837%200.70895-2.3887%201.5787-4.0007%201.9327-3.1838%200.69928-4.0133%202.466-1.1809%202.5152%201.4792%200.0257%201.5179%200.16633%200.25%200.90866-2.5006%201.4641-8.4104%202.1624-9.9146%201.1714zm-10.35-2.8605c-0.27024-1.5125-1.9027-7.925-3.6276-14.25-3.8171-13.997-8.108-36.524-8.108-42.567%200-4.0926%200.19724-4.4334%202.5657-4.4334%201.4112%200%203.4251-0.45991%204.4754-1.022%201.6085-0.86085%202.0116-0.61573%202.5563%201.5543%200.35564%201.417%200.38906%204.1634%200.0743%206.1032-0.47971%202.9561-0.34429%203.3376%200.83677%202.3575%201.1386-0.94491%201.5364-0.66207%202.0723%201.4731%200.36478%201.4534%200.40568%204.2296%200.0909%206.1694-0.49112%203.0264-0.36327%203.3534%200.90086%202.3043%201.1834-0.98217%201.3868-0.94897%201.0338%200.1688-0.24166%200.76529-0.73026%202.7075-1.0858%204.3161-0.54261%202.455-0.41766%202.7348%200.7782%201.7423%201.1895-0.98722%201.6353-0.18963%202.7012%204.8334%201.6176%207.6223%200.76802%2014.931-2.3929%2020.587-1.3565%202.4271-2.0831%204.4129-1.6147%204.4129%201.1318%200%208.0075-8.072%208.0075-9.4007%200-0.57236%202.0354-5.1039%204.5232-10.07%204.7721-9.5263%2013.911-22.441%2022.211-31.388%204.7543-5.1249%205.0822-5.2996%207.5078-4l2.5364%201.359-7.9327%2010.926c-7.9323%2010.925-20.408%2030.492-27.181%2042.63-1.9776%203.5442-4.045%206.3369-4.5942%206.206-0.54923-0.13091-0.74165%200.43159-0.4276%201.25%200.42714%201.1131-0.18318%201.488-2.4225%201.488-2.4798%200-3.0778-0.47187-3.4848-2.75zm8.3919-7c1.2439-1.5861%201.2085-1.6214-0.37756-0.37756-0.9625%200.75485-1.75%201.5424-1.75%201.75%200%200.82304%200.82119%200.29331%202.1276-1.3724z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23e56636%22%20d%3D%22m232.38%20581.22c0-0.55%200.43621-1.675%200.96937-2.5s0.96937-1.05%200.96937-0.5-0.43621%201.675-0.96937%202.5-0.96937%201.05-0.96937%200.5zm1.9694-18.927c0-0.78508-1.1097-2.3003-2.4661-3.3672s-2.2127-2.1932-1.903-2.5029c0.30969-0.30968-0.82795-3.4069-2.5281-6.8828-5.2654-10.765-9.0932-30.085-9.1-45.931-0.003-6.4246%200.0644-6.5985%202.3772-6.1564%202.1594%200.4128%202.4441%201.1183%203.0718%207.6113%201.2154%2012.574%205.1314%2030.731%2012.165%2056.406%200.37202%201.358%200.1737%202.25-0.50025%202.25-0.61415%200-1.1166-0.64234-1.1166-1.4274zm13.104-1.4505c-1.1331-0.7471-0.60134-2.3678%202.8256-8.6118%2010.132-18.462%2019.444-33.053%2029.884-46.83%204.3859-5.7876%204.4216-5.8091%206.5482-3.9544%201.176%201.0257%203.3498%202.469%204.8307%203.2075%202.6064%201.2997%202.6383%201.4164%201%203.6512-0.93085%201.2697-3.155%203.1099-4.9424%204.0892-3.581%201.9619-4.4062%203.8275-1.25%202.8258%202.4434-0.77549%202.495-0.14656%200.29394%203.5796-0.93834%201.5885-3.3008%203.6544-5.25%204.591-3.3984%201.6329-3.4459%201.7267-1.1565%202.2847%202.2951%200.55931%202.2467%200.65759-1.25%202.5407-3.5284%201.9002-5.1631%204.3035-2.1374%203.1424%200.825-0.31658%201.5-0.24622%201.5%200.15636%200%201.1908-6.5289%2010.495-9.2884%2013.237-3.1139%203.094-10.659%206.968-13.571%206.968-1.1773%200-2.1405%200.50725-2.1405%201.1272%200%200.75009%201.6731%200.96646%205.0007%200.64673%204.0039-0.38473%204.7874-0.22358%203.9309%200.80849-0.58837%200.70895-2.3887%201.5787-4.0007%201.9327-3.1838%200.69928-4.0133%202.466-1.1809%202.5152%201.4792%200.0257%201.5179%200.16633%200.25%200.90866-2.4882%201.4568-8.4073%202.1645-9.8958%201.183zm-10.397-2.8721c-0.28577-1.5125-2.0781-8.8284-3.9828-16.257-3.797-14.809-7.7246-35.885-7.7246-41.451%200-3.1933%200.27052-3.5432%202.75-3.557%201.5125-0.008%203.4131-0.43467%204.2236-0.94722%203.1162-1.9707%204.1457%204.8974%201.5007%2010.012-1.7991%203.479-1.3116%203.7654%201.4196%200.83387l1.9718-2.1165%200.7143%203.8075c0.41102%202.191%200.25033%205.0367-0.37849%206.7026-0.93555%202.4786-0.86844%202.809%200.46645%202.2968%201.3089-0.50226%201.4477-0.004%200.86477%203.1034-0.60046%203.2007-0.49366%203.5351%200.78905%202.4706%201.2738-1.0572%201.653-0.22631%202.6826%205.8779%201.3301%207.8859%200.41614%2013.825-3.0354%2019.724-1.0458%201.7875-1.5018%203.25-1.0132%203.25%201.615%200%207.5499-7.7426%208.934-11.655%203.177-8.9807%2016.825-29.501%2026.607-40.005%204.0422-4.3404%204.3511-4.4839%206.8431-3.1782l2.6098%201.3674-5.7565%207.4853c-5.5704%207.2434-16.25%2022.982-18.921%2027.883-0.71861%201.3188-2.8308%204.9188-4.6938%208s-4.7645%208.0772-6.4478%2011.102c-1.6833%203.025-3.51%205.3929-4.0594%205.262-0.5494-0.13091-0.74195%200.43159-0.4279%201.25%200.42714%201.1131-0.18318%201.488-2.4225%201.488-2.473%200-3.0838-0.47816-3.5131-2.75zm8.4202-7c1.2439-1.5861%201.2085-1.6214-0.37756-0.37756-0.9625%200.75485-1.75%201.5424-1.75%201.75%200%200.82304%200.82119%200.29331%202.1276-1.3724z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23953a8a%22%20d%3D%22m232.38%20581.22c0-0.55%200.43621-1.675%200.96937-2.5s0.96937-1.05%200.96937-0.5-0.43621%201.675-0.96937%202.5-0.96937%201.05-0.96937%200.5zm1.9694-18.927c0-0.78508-1.1097-2.3003-2.4661-3.3672s-2.1836-2.2223-1.8383-2.5676c0.34526-0.34526-0.52619-2.7675-1.9366-5.3828-4.3364-8.041-6.7059-17.289-9.1878-35.861-0.53866-4.0306-0.49396-4.104%202.4378-4%201.6426%200.0583%202.9875%200.19557%202.9888%200.30515%200.0403%203.5253%206.5198%2031.436%2011.619%2050.051%200.37202%201.358%200.1737%202.25-0.50025%202.25-0.61415%200-1.1166-0.64234-1.1166-1.4274zm13.16-1.4157c-1.0904-0.72083-0.96415-1.6213%200.67868-4.8416%203.6946-7.2419%2015.279-26.709%2020.784-34.927l5.4342-8.112%205.5666%201.294c3.0616%200.7117%206.1987%201.0515%206.9712%200.75503%203.9642-1.5212-1.2122%206.2605-5.5515%208.3455-3.3984%201.6329-3.4459%201.7267-1.1565%202.2847%202.2951%200.55931%202.2467%200.65759-1.25%202.5407-3.5284%201.9002-5.1631%204.3035-2.1374%203.1424%200.825-0.31658%201.5-0.24622%201.5%200.15636%200%201.1908-6.5289%2010.495-9.2884%2013.237-3.1139%203.094-10.659%206.968-13.571%206.968-1.1773%200-2.1405%200.50725-2.1405%201.1272%200%200.75009%201.6731%200.96646%205.0007%200.64673%204.0039-0.38473%204.7874-0.22358%203.9309%200.80849-0.58837%200.70895-2.3887%201.5787-4.0007%201.9327-3.1838%200.69928-4.0133%202.466-1.1809%202.5152%201.4792%200.0257%201.5179%200.16633%200.25%200.90866-2.4503%201.4347-8.398%202.1708-9.8395%201.2178zm-10.808-4.4068c-3.9503-15.231-8.4522-35.009-8.9341-39.25-0.55928-4.9215-0.50815-5.0392%203.2567-7.4996%202.1037-1.3748%204.347-3.1691%204.9851-3.9874%201.7148-2.199%202.9854%205.4383%201.5413%209.2642-0.93555%202.4786-0.86844%202.809%200.46645%202.2968%201.3089-0.50226%201.4477-0.004%200.86477%203.1034-0.60046%203.2007-0.49366%203.5351%200.78905%202.4706%201.2738-1.0572%201.653-0.22631%202.6826%205.8779%201.3301%207.8859%200.41614%2013.825-3.0354%2019.724-1.0458%201.7875-1.5018%203.25-1.0132%203.25%201.615%200%207.5499-7.7426%208.934-11.655%202.7833-7.8678%2019.916-34.345%2022.223-34.345%200.41358%200%201.0679%201.0125%201.4541%202.25s1.0456%202.475%201.4654%202.75c0.41975%200.275-2.3409%205.1993-6.1348%2010.943-3.7939%205.7436-6.898%2010.565-6.898%2010.715%200%200.14937-1.9826%203.55-4.4059%207.557-2.4232%204.007-5.7825%209.7605-7.4651%2012.785-1.6826%203.025-3.5088%205.3929-4.0581%205.262-0.5494-0.13091-0.74195%200.43159-0.4279%201.25%200.42404%201.105-0.17012%201.488-2.3086%201.488-2.5482%200-3.0065-0.48911-3.9819-4.25zm8.7751-5.5c1.2439-1.5861%201.2085-1.6214-0.37756-0.37756-0.9625%200.75485-1.75%201.5424-1.75%201.75%200%200.82304%200.82119%200.29331%202.1276-1.3724z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23b93368%22%20d%3D%22m229.62%20550.73c-4.5614-2.7739-7.6998-13.229-10.692-35.62-0.53866-4.0306-0.49396-4.104%202.4378-4%201.6426%200.0583%202.9875%200.19557%202.9888%200.30515%200.0207%201.8074%204.784%2024.184%206.6332%2031.161%201.3645%205.1484%202.3225%209.5192%202.1287%209.713-0.19376%200.19375-1.7671-0.50814-3.4964-1.5598zm3.3618-8.7222c-3.6221-15.214-5.6262-25.062-5.6183-27.607%200.004-1.4075%201.3383-3.0738%203.75-4.6842%202.0587-1.3748%204.2652-3.1691%204.9033-3.9874%201.7148-2.199%202.9854%205.4383%201.5413%209.2642-0.93555%202.4786-0.86844%202.809%200.46645%202.2968%201.3089-0.50226%201.4477-0.004%200.86477%203.1034-0.60046%203.2007-0.49366%203.5351%200.78905%202.4706%202.2862-1.8974%204.3241%2011.23%202.7275%2017.571-1.3475%205.3514-3.3184%209.43-5.3861%2011.146-1.2562%201.0426-1.8405-0.3426-4.038-9.5728zm18.076%2010.076c-0.64872-0.64871%2010.414-19.771%2017.923-30.98l5.4342-8.112%205.5666%201.294c3.0616%200.7117%206.1987%201.0515%206.9712%200.75503%203.9642-1.5212-1.2122%206.2605-5.5515%208.3455-3.3984%201.6329-3.4459%201.7267-1.1565%202.2847%202.2951%200.55931%202.2467%200.65759-1.25%202.5407-3.5284%201.9002-5.1631%204.3035-2.1374%203.1424%200.825-0.31658%201.5-0.24622%201.5%200.15636%200%201.1908-6.5289%2010.495-9.2884%2013.237-4.225%204.198-16.251%209.0958-18.011%207.3356zm-3.7203-5.4144c-1.6525-3.9895-0.58695-7.2754%206.0354-18.612%205.1782-8.8643%2014.889-22.341%2016.097-22.341%200.41358%200%201.0679%201.0125%201.4541%202.25s1.0456%202.475%201.4654%202.75c0.41975%200.275-2.3409%205.1993-6.1348%2010.943-3.7939%205.7436-6.898%2010.565-6.898%2010.715%200%200.41204-9.2079%2015.725-10.011%2016.648-0.38541%200.4431-1.2894-0.61555-2.0089-2.3526z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23d0334d%22%20d%3D%22m268.92%20543.41c0.39936-1.0407%200.16314-1.6939-0.61257-1.6939-0.69443%200-2.7035-1.099-4.4647-2.4423-2.5028-1.909-3.4785-2.182-4.4679-1.25-1.964%201.8499%203.5846-7.9204%209.6087-16.92l5.4301-8.112%205.5666%201.294c3.0616%200.7117%206.1987%201.0515%206.9712%200.75503%203.9642-1.5212-1.2122%206.2605-5.5515%208.3455-3.3984%201.6329-3.4459%201.7267-1.1565%202.2847%202.2951%200.55931%202.2467%200.65759-1.25%202.5407-3.5284%201.9002-5.1631%204.3035-2.1374%203.1424%202.1429-0.82232%201.8896%200.0794-1.5114%205.3794-3.4044%205.3054-7.5528%209.6161-6.4246%206.6761zm-46.308-7.299c-1.065-3.6153-2.3791-11.094-3.6902-21.001-0.53331-4.0299-0.48805-4.104%202.4446-4%202.6018%200.0922%203.0678%200.55823%203.6051%203.6059%200.33938%201.925%201.4647%207.712%202.5008%2012.86%201.036%205.148%201.8837%209.5355%201.8837%209.75%200%200.21446-1.0875%200.38992-2.4167%200.38992s-2.5884%200.5152-2.7983%201.1449c-0.20989%200.62969-0.89795-0.60781-1.529-2.75zm6.8793-9.4428c-2.8681-13.469-2.8186-13.987%201.6215-16.952%202.0587-1.3748%204.2652-3.1691%204.9033-3.9874%201.7148-2.199%202.9854%205.4383%201.5413%209.2642-0.93555%202.4786-0.86844%202.809%200.46645%202.2968%201.3089-0.50226%201.4477-0.004%200.86477%203.1034-0.60089%203.203-0.4943%203.5356%200.79119%202.4688%201.2587-1.0446%201.5813-0.65346%202.1116%202.5604%201.4575%208.8336%201.4278%209.864-0.28538%209.8878-0.90753%200.0126-3.5016%200.32963-5.7647%200.70445l-4.1146%200.68151-2.1354-10.028zm25.578%206.8509c-0.98257-1.0318-2.2201-1.608-2.75-1.2804-0.52994%200.32752-0.96237%200.23144-0.96096-0.21352%200.008-2.4071%2016.461-26.309%2018.111-26.309%200.41358%200%201.0679%201.0125%201.4541%202.25s1.0456%202.475%201.4654%202.75c0.41975%200.275-2.3409%205.1993-6.1348%2010.943-3.7939%205.7436-6.898%2010.751-6.898%2011.128%200%202.0224-2.63%202.4718-4.2865%200.73246z%22%2F%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fsvg%3E"),sm.registerType(vp.HTTP_FILE,"data:image/svg+xml,%3Csvg%20id%3D%22svg2%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%22145mm%22%20width%3D%22145mm%22%20version%3D%221.1%22%20viewBox%3D%220%200%20513.77953%20513.77951%22%3E%20%3Cg%20id%3D%22layer1%22%20transform%3D%22translate%28-87.403%20-17.44%29%22%3E%20%20%3Cg%20id%3D%22text3336%22%3E%20%20%20%3Cpath%20id%3D%22path3372%22%20d%3D%22m145.34%20318.08v-51.12q0-10.98-3.06-15.84t-11.16-4.86q-5.94%200-10.98%204.14-4.86%203.96-6.48%2010.26v57.42h-23.4v-126h23.4v46.08h0.72q4.32-5.76%2010.62-9.18t16.02-3.42q6.84%200%2012.06%201.8t8.64%205.94q3.6%204.14%205.22%2011.34%201.8%207.02%201.8%2017.46v55.98h-23.4z%22%2F%3E%20%20%20%3Cpath%20id%3D%22path3374%22%20d%3D%22m178.99%20228.08h12.42v-16.92l23.4-6.66v23.58h21.96v19.8h-21.96v34.56q0%209.36%201.8%2013.5%201.98%203.96%207.2%203.96%203.6%200%206.12-0.72%202.7-0.72%205.94-2.16l4.14%2018q-4.86%202.34-11.34%203.96t-13.14%201.62q-12.42%200-18.36-6.3-5.76-6.48-5.76-21.06v-45.36h-12.42v-19.8z%22%2F%3E%20%20%20%3Cpath%20id%3D%22path3376%22%20d%3D%22m240.51%20228.08h12.42v-16.92l23.4-6.66v23.58h21.96v19.8h-21.96v34.56q0%209.36%201.8%2013.5%201.98%203.96%207.2%203.96%203.6%200%206.12-0.72%202.7-0.72%205.94-2.16l4.14%2018q-4.86%202.34-11.34%203.96t-13.14%201.62q-12.42%200-18.36-6.3-5.76-6.48-5.76-21.06v-45.36h-12.42v-19.8z%22%2F%3E%20%20%20%3Cpath%20id%3D%22path3378%22%20d%3D%22m312.8%20228.08h17.1l2.7%2010.8h0.72q4.68-6.84%2010.98-10.08%206.48-3.24%2015.66-3.24%2016.92%200%2025.38%2010.8%208.46%2010.62%208.46%2034.38%200%2011.52-2.7%2020.88-2.7%209.18-8.1%2015.66-5.22%206.48-12.96%209.9-7.56%203.42-17.46%203.42-5.58%200-9.18-0.9-3.6-0.72-7.2-2.52v36.9h-23.4v-126zm40.14%2017.28q-6.84%200-10.8%203.42-3.78%203.42-5.94%2010.26v37.44q2.52%201.98%205.4%203.24%203.06%201.08%207.92%201.08%2010.08%200%2015.12-7.02%205.04-7.2%205.04-23.58%200-11.88-3.96-18.36t-12.78-6.48z%22%2F%3E%20%20%20%3Cpath%20id%3D%22path3380%22%20d%3D%22m416.66%20241.04q0-6.3%203.96-9.9%203.96-3.78%2010.44-3.78%206.84%200%2010.8%203.78%203.96%203.6%203.96%209.9t-3.96%2010.08-10.8%203.78q-6.48%200-10.44-3.78t-3.96-10.08zm0%2065.16q0-6.3%203.96-9.9%203.96-3.78%2010.44-3.78%206.84%200%2010.8%203.78%203.96%203.6%203.96%209.9t-3.96%2010.08-10.8%203.78q-6.48%200-10.44-3.78t-3.96-10.08z%22%2F%3E%20%20%20%3Cpath%20id%3D%22path3382%22%20d%3D%22m508.38%20189.92%2017.64%207.92-64.26%20145.44-17.64-8.28%2064.26-145.08z%22%2F%3E%20%20%20%3Cpath%20id%3D%22path3384%22%20d%3D%22m581.85%20189.92%2017.64%207.92-64.26%20145.44-17.64-8.28%2064.26-145.08z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Ctext%20id%3D%22text3340%22%20style%3D%22word-spacing%3A0px%3Bletter-spacing%3A0px%22%20xml%3Aspace%3D%22preserve%22%20font-size%3D%2240px%22%20font-stretch%3D%22condensed%22%20line-height%3D%22125%25%22%20y%3D%2292.362206%22%20x%3D%22-511.42856%22%20font-family%3D%22Impact%22%20fill%3D%22%23000000%22%3E%3Ctspan%20id%3D%22tspan3342%22%20x%3D%22-511.42856%22%20y%3D%2292.362206%22%2F%3E%3C%2Ftext%3E%20%20%3CflowRoot%20id%3D%22flowRoot3344%22%20style%3D%22word-spacing%3A0px%3Bletter-spacing%3A0px%22%20xml%3Aspace%3D%22preserve%22%20font-size%3D%2240px%22%20font-stretch%3D%22condensed%22%20line-height%3D%22125%25%22%20font-family%3D%22Impact%22%20fill%3D%22%23000000%22%3E%3CflowRegion%20id%3D%22flowRegion3346%22%3E%3Crect%20id%3D%22rect3348%22%20height%3D%2257.143%22%20width%3D%22225.71%22%20y%3D%22489.51%22%20x%3D%2274.286%22%2F%3E%3C%2FflowRegion%3E%3CflowPara%20id%3D%22flowPara3350%22%2F%3E%3C%2FflowRoot%3E%20%3C%2Fg%3E%3C%2Fsvg%3E"),sm.registerType(vp.ORACLE_OBJECT,"data:image/svg+xml,%3Csvg%20width%3D%2236%22%20height%3D%2236%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M0%200h36v36H0V0z%22%20fill%3D%22%23C74634%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M21.541%2022.139c2.277%200%204.126-1.855%204.126-4.143a4.134%204.134%200%2000-4.126-4.139H14.46a4.134%204.134%200%2000-4.128%204.139%204.135%204.135%200%20004.128%204.143h7.082zm-7.245%202.257c-3.52%200-6.376-2.865-6.376-6.4%200-3.534%202.855-6.393%206.376-6.393h7.408c3.52%200%206.373%202.86%206.373%206.393%200%203.54-2.853%206.403-6.373%206.403l-7.409-.003z%22%20fill%3D%22%23fff%22%2F%3E%3C%2Fsvg%3E");class om{static removeReferenceFromStages(e,t){(t||[]).forEach((t=>{const n=$m.pipeline.getStageConfig(t);m(n,["artifactRemover"],pe)(t,e)}))}static removeReferencesFromStages(e,t){e.forEach((e=>om.removeReferenceFromStages(e,t)))}static removeArtifactFromField(e,t,n){const a=m(t,e);Array.isArray(a)?g(t,e,a.filter((e=>e!==n))):a===n&&g(t,e,null)}static removeArtifactFromFields(e){return(t,n)=>e.forEach((e=>this.removeArtifactFromField(e,t,n)))}}const lm=e=>e.artifacts.map(((e,t)=>{const{location:n,reference:a,type:i}=e;let{name:r}=e;const s=sm.getPath(i),o=`${n||""}${i||""}${a||""}`||String(t);let l=i;if(C(i)&&i.length>0){const e=i.match(vp.KUBERNETES);if(null!=e&&e[1].length>0){r=`${e[1].substr(0,1).toUpperCase()+e[1].substr(1)} ${r}`,l=r}}return ot.createElement("div",{key:o,className:"artifact-list-item",title:l},s&&ot.createElement("img",{className:"artifact-list-item-icon",width:"20",height:"20",src:s}),ot.createElement("span",{className:"artifact-list-item-name"},r,e.version&&ot.createElement("span",null," - ",e.version)))}));oi(".execution-artifacts {\n background: var(--color-alabaster);\n display: flex;\n margin-right: 0;\n padding: 6px;\n}\n.artifact-list-container {\n background: var(--color-white);\n padding: 8px 6px 6px;\n}\n.artifact-list-container > h5 {\n margin-top: 0;\n}\n.artifact-list-item {\n height: 28px;\n position: relative;\n line-height: 28px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n margin-bottom: 0.1em;\n}\n.artifact-list-item-icon {\n position: absolute;\n top: 4px;\n}\n.artifact-list-item-name {\n padding-left: 24px;\n}\n");class cm extends ot.Component{extractBoundArtifactsFromExecution(e){const t=m(e,["trigger","resolvedExpectedArtifacts"],[]),n=m(e,"stages",[]).reduce(((e,t)=>{const n=m(t,["outputs","resolvedExpectedArtifacts"],[]);return e.concat(n)}),[]);return t.concat(n).filter((e=>H(e,"boundArtifact")))}artifactLists(){const{stage:e,execution:t}=this.props,n=$m.pipeline.getStageConfig(e),a=m(e,["context"],{}),i=new Set(n&&n.artifactExtractor?n.artifactExtractor(a):[]);return{consumedArtifacts:this.extractBoundArtifactsFromExecution(t).filter((e=>i.has(e.id))).map((e=>e.boundArtifact)).filter((({name:e,type:t})=>e&&t)),producedArtifacts:m(e,["outputs","artifacts"],[]).slice()}}render(){const{consumedArtifacts:e,producedArtifacts:t}=this.artifactLists();return ot.createElement(bp,{name:this.props.name,current:this.props.current},ot.createElement("div",{className:"row execution-artifacts"},ot.createElement("div",{className:"col-sm-6 artifact-list-container"},ot.createElement("h5",null,"Consumed Artifacts"),ot.createElement("div",null,ot.createElement(lm,{artifacts:e}))),ot.createElement("div",{className:"col-sm-6 artifact-list-container"},ot.createElement("h5",null,"Produced Artifacts"),ot.createElement("div",null,ot.createElement(lm,{artifacts:t})))))}}cm.title="artifactStatus";const pm="spinnaker.core.artifact.artifactTab.component";n(pm,[]).component("executionArtifactTab",yn(jl(cm,"executionArtifactTab"),["config","stage","execution"]));class dm{static getExpectedArtifactsAvailableToStage(e,t){if(!e||!t)return[];let n=t.expectedArtifacts||[];return id.getAllUpstreamDependencies(t,e).forEach((e=>{const t=e.expectedArtifact;t&&(n=n.concat(t));const a=e.expectedArtifacts;a&&(n=n.concat(a))})),n}static accumulateArtifacts(e){return t=>e.map((e=>m(t,e))).filter((e=>e)).reduce(((e,t)=>e.concat(t)),[])}static createEmptyArtifact(){return{id:pr.generateUuid(),usePriorArtifact:!1,useDefaultArtifact:!1,matchArtifact:{id:pr.generateUuid(),customKind:!0},defaultArtifact:{id:pr.generateUuid(),customKind:!0},displayName:pa.random()}}static addArtifactTo(e,t){return null==t.expectedArtifacts&&(t.expectedArtifacts=[]),t.expectedArtifacts.push(e),e}static addNewArtifactTo(e){return dm.addArtifactTo(dm.createEmptyArtifact(),e)}static artifactFromExpected(e){return e&&e.matchArtifact?e.matchArtifact:null}static sourcesForPipelineStage(e,t){const n=[{get source(){return e()},label:"Pipeline Trigger"}];return id.getAllUpstreamDependencies(e(),t).filter((e=>$m.pipeline.getStageConfig(e).producesArtifacts)).map((e=>({source:e,label:"Stage ("+e.name+")"}))).forEach((e=>n.push(e))),n}static getKindConfig(e,t){if(null==e||e.customKind||"custom"===e.kind)return $m.pipeline.getCustomArtifactKind();const n=(t?$m.pipeline.getDefaultArtifactKinds():$m.pipeline.getMatchArtifactKinds()).find((t=>t.type===e.type));return void 0!==n?n:$m.pipeline.getCustomArtifactKind()}}const um={bindings:{command:"=",imageSources:"<",helpFieldKey:"@",idField:"@",imageSourceText:"<"},controllerAs:"ctrl",template:'\n <div class="form-group" ng-if="ctrl.imageSourceText">\n <div class="col-md-3 sm-label-right">\n Image Source\n </div>\n <div class="col-md-7" style="margin-top: 5px;">\n <span ng-bind-html="ctrl.imageSourceText"></span>\n </div>\n </div>\n <div class="form-group" ng-if="!ctrl.imageSourceText">\n <div class="col-md-3 sm-label-right">\n Image Source\n <help-field key="{{ ctrl.helpFieldKey }}"></help-field>\n </div>\n <div class="col-md-7">\n <div class="radio" ng-repeat="imageSource in ctrl.imageSources">\n <label>\n <input type="radio" ng-model="ctrl.command[ctrl.idField]" value="{{ imageSource }}">\n {{ imageSource | robotToHuman }}\n </label>\n </div>\n </div>\n </div>\n '},mm="spinnaker.core.artifacts.expected.image.selector";n(mm,[]).component("imageSourceSelector",um);class gm{constructor(e){this.delegate=e,this.accountsForArtifact=[],this.updateAccounts=e=>{if(null==e)this.accountsForArtifact=[];else{const t=dm.artifactFromExpected(e),n=this.delegate.getExpectedArtifactAccounts();this.accountsForArtifact="helm/chart"===t.type?n.filter((e=>e.types.includes(t.type)&&e.name===t.artifactAccount)):n.filter((e=>e.types.includes(t.type)));const a=this.delegate.getSelectedAccount();a&&this.accountsForArtifact.find((e=>e.name===a.name))||(this.accountsForArtifact.length?this.delegate.setSelectedArtifactAccount(this.accountsForArtifact[0]):this.delegate.setSelectedArtifactAccount(null))}},this.onArtifactChange=e=>{this.delegate.setSelectedExpectedArtifact(e),this.updateAccounts(e)},this.onArtifactCreated=e=>{dm.addArtifactTo(e.expectedArtifact,e.source.source),this.delegate.refreshExpectedArtifacts(),this.updateAccounts(e.expectedArtifact),this.delegate.setSelectedExpectedArtifact(e.expectedArtifact),this.delegate.setSelectedArtifactAccount(e.account)},this.onRequestCreate=()=>{this.delegate.createArtifact()},this.onAccountChange=e=>{this.delegate.setSelectedArtifactAccount(e)}}}gm.$inject=["delegate"];class hm{constructor(e){this.$scope=e,this.sources=[],this.kinds=[],this.accounts=[],this.setAccounts=e=>{this.accounts=[...e]}}getExpectedArtifactSources(){return this.sources}getSupportedArtifactKinds(){return this.kinds}getExpectedArtifactAccounts(){return this.accounts}scopeApply(){this.$scope.$evalAsync()}}const fm=[vp.KUBERNETES,vp.DOCKER_IMAGE];class vm extends hm{constructor(e,t,n=fm){super(e),this.$scope=e,this.tag=t,this.excludedArtifactTypes=n,this.getExcludedArtifactTypes=()=>this.excludedArtifactTypes,this.getExpectedArtifacts=()=>dm.getExpectedArtifactsAvailableToStage(this.$scope.stage,this.$scope.$parent.pipeline),this.getSelectedExpectedArtifact=()=>{const e=this.$scope.stage[`${this.tag}ArtifactId`];return null==e?null:this.getExpectedArtifacts().find((t=>t.id===e))},this.getSelectedAccount=()=>{const e=this.$scope.stage[`${this.tag}ArtifactAccount`];return null==e?null:this.getExpectedArtifactAccounts().find((t=>t.name===e))},this.setSelectedExpectedArtifact=e=>{this.$scope.showCreateArtifactForm=!1,this.$scope.stage[`${this.tag}ArtifactId`]=e.id,this.scopeApply()},this.sources=dm.sourcesForPipelineStage((()=>this.$scope.$parent.pipeline),this.$scope.stage),this.kinds=$m.pipeline.getMatchArtifactKinds().filter((e=>!this.getExcludedArtifactTypes().find((t=>t.test(e.type))))),this.refreshExpectedArtifacts()}setSelectedArtifactAccount(e){this.$scope.stage[`${this.tag}ArtifactAccount`]=e?e.name:"",this.scopeApply()}createArtifact(){this.$scope.showCreateArtifactForm=!0,this.scopeApply()}refreshExpectedArtifacts(){this.$scope.expectedArtifacts=this.getExpectedArtifacts()}}const Am=[vp.GCE_MACHINE_IMAGE];class Em extends hm{constructor(e){super(e),this.$scope=e,this.kinds=[$m.pipeline.getCustomArtifactKind()];const{viewState:t}=e.command;this.sources=dm.sourcesForPipelineStage((()=>t.pipeline),t.stage),this.refreshExpectedArtifacts()}getExpectedArtifacts(){const{viewState:e}=this.$scope.command;return dm.getExpectedArtifactsAvailableToStage(e.stage,e.pipeline)}getSelectedExpectedArtifact(){return(this.getExpectedArtifacts()||[]).find((e=>e.id===this.$scope.command.imageArtifactId))}getSelectedAccount(){return null}getOfferedArtifactTypes(){return Am}setSelectedExpectedArtifact(e){this.$scope.command.imageArtifactId=e.id,this.$scope.gceImageArtifact.showCreateArtifactForm=!1,this.scopeApply()}setSelectedArtifactAccount(e){}createArtifact(){this.$scope.gceImageArtifact.showCreateArtifactForm=!0,this.scopeApply()}refreshExpectedArtifacts(){this.$scope.command.viewState.expectedArtifacts=this.getExpectedArtifacts()}}class bm extends hm{constructor(e,t=null){super(e),this.$scope=e,this.offeredArtifactTypes=t;const{viewState:n}=e.command;this.sources=dm.sourcesForPipelineStage((()=>n.pipeline),n.stage),this.kinds=$m.pipeline.getMatchArtifactKinds().filter((e=>e.customKind||t.find((t=>t.test(e.type))))),this.refreshExpectedArtifacts()}getExpectedArtifacts(){const{viewState:e}=this.$scope.command;return dm.getExpectedArtifactsAvailableToStage(e.stage,e.pipeline)}getSelectedExpectedArtifact(){return(this.getExpectedArtifacts()||[]).find((e=>e.id===this.$scope.command.expectedArtifactId))}getSelectedAccount(){return null}getOfferedArtifactTypes(){return this.offeredArtifactTypes}setSelectedExpectedArtifact(e){this.$scope.command.expectedArtifactId=e.id,this.$scope.showCreateArtifactForm=!1,this.scopeApply()}setSelectedArtifactAccount(e){}createArtifact(){this.$scope.showCreateArtifactForm=!0,this.scopeApply()}refreshExpectedArtifacts(){this.$scope.command.backingData.expectedArtifacts=this.getExpectedArtifacts()}}class ym extends hm{constructor(e){super(e.$scope),this.artifact=e,this.requestingNew=!1,this.setAccounts=e=>{this.accounts=[...e]},this.refreshExpectedArtifacts(),this.sources=dm.sourcesForPipelineStage((()=>this.$scope.$parent.pipeline),this.$scope.stage),this.kinds=$m.pipeline.getMatchArtifactKinds()}getExpectedArtifacts(){return dm.getExpectedArtifactsAvailableToStage(this.$scope.stage,this.$scope.$parent.pipeline)}getSelectedExpectedArtifact(){return this.expectedArtifacts.find((e=>e.id===this.artifact.id))}getSelectedAccount(){return this.accounts.find((e=>e.name===this.artifact.account))}setSelectedExpectedArtifact(e){this.artifact.id=e.id,this.requestingNew=!1,this.scopeApply()}setSelectedArtifactAccount(e){this.artifact.account=null==e?"":e.name,this.scopeApply()}createArtifact(){this.requestingNew=!0,this.scopeApply()}refreshExpectedArtifacts(){this.expectedArtifacts=this.getExpectedArtifacts()}}class Cm extends hm{constructor(e){super(e.$scope),this.artifact=e,this.requestingNew=!1,this.setAccounts=e=>{this.accounts=[...e]},this.refreshExpectedArtifacts(),this.sources=dm.sourcesForPipelineStage((()=>this.getPipeline()),this.getStage()),this.kinds=$m.pipeline.getMatchArtifactKinds()}getStage(){var e,t,n,a;return null==(a=null==(n=null==(t=null==(e=this.artifact)?void 0:e.$scope)?void 0:t.command)?void 0:n.viewState)?void 0:a.stage}getPipeline(){var e,t,n,a;return null==(a=null==(n=null==(t=null==(e=this.artifact)?void 0:e.$scope)?void 0:t.command)?void 0:n.viewState)?void 0:a.pipeline}getExpectedArtifacts(){return dm.getExpectedArtifactsAvailableToStage(this.getStage(),this.getPipeline())}getSelectedExpectedArtifact(){return this.expectedArtifacts.find((e=>e.id===this.artifact.id))}getSelectedAccount(){return this.accounts.find((e=>e.name===this.artifact.account))}setSelectedExpectedArtifact(e){this.artifact.id=e.id,this.requestingNew=!1,this.scopeApply()}setSelectedArtifactAccount(e){this.artifact.account=null==e?"":e.name,this.scopeApply()}createArtifact(){this.requestingNew=!0,this.scopeApply()}refreshExpectedArtifacts(){this.expectedArtifacts=this.getExpectedArtifacts()}}const wm=e=>{let t;return e.type?t=e.type:e.artifact?t=e.artifact.type:e.kind?t=e.kind.type:e.expectedArtifact&&(t=dm.artifactFromExpected(e.expectedArtifact).type),ot.createElement("img",{style:{verticalAlign:"text-top",marginRight:"4px"},src:sm.getPath(t),width:e.width,height:e.height})};class xm extends ot.Component{constructor(e){super(e),this.renderOption=e=>ot.createElement("span",null,ot.createElement(wm,{type:e.types[0],width:"16",height:"16"}),e.name)}render(){return ot.createElement(Ti,{className:this.props.className||"",options:this.props.accounts,value:this.props.selected,onChange:this.props.onChange,optionRenderer:this.renderOption,valueRenderer:this.renderOption,clearable:!1,valueKey:"name"})}}const km="spinnaker.core.artifacts.account.selector.react";n(km,[]).component("artifactAccountSelectorReact",yn(jl(xm,"artifactAccountSelectorReact"),["accounts","className","onChange","selected"]));class Bm extends ot.Component{constructor(e){super(e),this.renderOption=e=>ot.createElement("span",null,this.props.showIcons&&ot.createElement(wm,{type:e.type,width:"16",height:"16"}),e.label," - ",e.description),this.onChange=e=>{const t=this.props.kinds.find((t=>t.key===e.value));this.setState({selected:e}),this.props.onChange(t)},this.optionFromKindConfig=e=>e?{label:e.label,description:e.description,type:e.type,value:e.key}:null,this.state={selected:this.optionFromKindConfig(e.selected)}}render(){const e=this.props.kinds.map(this.optionFromKindConfig),t=this.state.selected;return ot.createElement(Ti,{className:this.props.className||"",options:e,value:t,optionRenderer:this.renderOption,valueRenderer:this.renderOption,onChange:this.onChange,clearable:!1})}}Bm.defaultProps={showIcons:!0};n("spinnaker.core.artifacts.expected.kind.selector.react",[]).component("expectedArtifactKindSelectorReact",yn(jl(Bm,"expectedArtifactKindSelectorReact"),["kinds","selected","onChange","showIcons","className"]));class Sm extends ot.Component{constructor(e){super(e),this.renderOption=e=>ot.createElement("span",null,e.label),this.onChange=e=>{const t=this.props.sources.find((t=>t.source===e.source));this.props.onChange(t)},this.state={options:e.sources.map((e=>e.value?e:{...e,value:pr.generateUuid()}))}}render(){return ot.createElement(Ti,{className:this.props.className||"",options:this.state.options,optionRenderer:this.renderOption,value:this.props.selected,valueRenderer:this.renderOption,onChange:this.onChange,clearable:!1})}}const Mm="spinnaker.core.artifacts.expected.source.selector.react";n(Mm,[]).component("expectedArtifactSourceSelectorReact",yn(jl(Sm,"expectedArtifactSourceSelectorReact"),["sources","className","onChange","selected"]));class Nm extends ot.Component{constructor(){super(...arguments),this.renderOption=e=>e.expectedArtifact||e.requestingNew?e.requestingNew?ot.createElement("span",null,"Create new..."):ot.createElement("span",null,this.props.showIcons&&ot.createElement(wm,{expectedArtifact:e.expectedArtifact,width:"16",height:"16"}),e.expectedArtifact.displayName):ot.createElement("span",null),this.onChange=e=>{e.requestingNew?this.props.onRequestCreate():this.props.onChange(e.expectedArtifact)}}filterExpectedArtifacts(e){return(this.props.expectedArtifacts||[]).filter((t=>{const n=dm.artifactFromExpected(t);return!!n&&e(t,n)}))}getExpectedArtifacts(){return this.filterExpectedArtifacts(((e,t)=>{const{offeredArtifactTypes:n,excludedArtifactTypes:a}=this.props;let i=!0,r=!1;return n&&n.length>0&&(i=!!n.find((e=>e.test(t.type)))),a&&a.length>0&&(r=!!a.find((e=>e.test(t.type)))),i&&!r}))}render(){const e=this.getExpectedArtifacts().map((e=>({value:e.id,expectedArtifact:e,requestingNew:!1})));this.props.onRequestCreate&&e.push({value:"",expectedArtifact:null,requestingNew:!0});const t={value:this.props.selected?this.props.selected.id:"",expectedArtifact:this.props.selected,requestingNew:this.props.requestingNew};return ot.createElement(Ti,{className:this.props.className||"",options:e,optionRenderer:this.renderOption,value:t,valueRenderer:this.renderOption,onChange:this.onChange,clearable:!1})}}Nm.defaultProps={requestingNew:!1,showIcons:!0};const Dm="spinnaker.core.artifacts.expected.selector.react";n(Dm,["spinnaker.core.artifacts.expected.kind.selector.react",Mm,km]).component("expectedArtifactSelectorReact",yn(jl(Nm,"expectedArtifactSelectorReact"),["expectedArtifacts","selected","requestingNew","onRequestCreate","onChange","showIcons","className","offeredArtifactTypes","excludedArtifactTypes"]));class Im extends ot.Component{constructor(e){super(e),this.onSave=()=>{this.props.onSave({expectedArtifact:this.state.expectedArtifact,source:this.state.source,account:this.state.account})},this.onSourceChange=e=>{this.setState({source:e})},this.onKindChange=e=>{const t=p(this.state.expectedArtifact);t.matchArtifact.type=e.type,delete t.matchArtifact.kind,t.matchArtifact.customKind=e.customKind;const n=this.accountsForExpectedArtifact(t);this.setState({expectedArtifact:t,account:n[0]})},this.onAccountChange=e=>{const{expectedArtifact:t}=this.state;this.props.onArtifactChange&&this.props.onArtifactChange({artifactAccount:e.name,id:t.matchArtifact.id,reference:t.matchArtifact.name,type:t.matchArtifact.type}),this.setState({account:e})},this.onArtifactEdit=e=>{const t={...this.state.expectedArtifact,matchArtifact:{...e}};let n=this.state.account;if(this.state.expectedArtifact.matchArtifact.type!==e.type){n=this.accountsForExpectedArtifact(t)[0]}this.props.onArtifactChange&&this.props.onArtifactChange({artifactAccount:n?n.name:"",id:e.id,reference:e.name,type:e.type}),this.setState({expectedArtifact:t,account:n})},this.availableKinds=()=>{const e=this.props.kinds||[],t=this.props.accounts||[];return this.props.showAccounts?e.filter((e=>e.customKind||t.find((t=>t.types.includes(e.type))))):e.slice(0)},this.onArtifactDisplayNameEdit=e=>{const t=e.target.value,{expectedArtifact:n}=this.state,a={...n,displayName:t};this.setState({expectedArtifact:a})};const t=e.default?p(e.default):dm.createEmptyArtifact();this.state={expectedArtifact:t,source:e.sources[0],account:this.accountsForExpectedArtifact(t)[0]}}accountsForExpectedArtifact(e){const t=dm.artifactFromExpected(e);return t&&this.props.accounts?this.props.accounts.filter((e=>e.types.includes(t.type))):[]}render(){const{sources:e,showIcons:t,showAccounts:n,hidePipelineFields:a}=this.props,{expectedArtifact:i,source:r,account:s}=this.state,o=this.accountsForExpectedArtifact(i),l=dm.artifactFromExpected(i),c=this.availableKinds().sort(((e,t)=>e.label.localeCompare(t.label))),p=dm.getKindConfig(l,!1),d=p&&p.editCmp;return ot.createElement(ot.Fragment,null,!a&&ot.createElement(zp,{label:"Display Name"},ot.createElement("input",{className:"form-control",value:i.displayName,onChange:this.onArtifactDisplayNameEdit})),e.length>1&&ot.createElement(zp,{label:"Artifact Source"},ot.createElement(Sm,{sources:e,selected:r,onChange:this.onSourceChange})),ot.createElement(zp,{label:"Artifact Kind"},ot.createElement(Bm,{kinds:c,selected:p,onChange:this.onKindChange,showIcons:t})),n&&ot.createElement(zp,{label:"Artifact Account"},ot.createElement(xm,{accounts:o,selected:s,onChange:this.onAccountChange})),d&&ot.createElement(d,{account:s,artifact:l,onChange:this.onArtifactEdit,pipeline:this.props.pipeline}),!a&&ot.createElement(zp,{label:""},ot.createElement("button",{onClick:this.onSave,type:"button",className:"btn btn-block btn-primary btn-sm"},"Confirm")))}}Im.defaultProps={showIcons:!0,showAccounts:!0,fieldColumns:8,singleColumn:!1};const Fm="spinnaker.core.artifacts.expected.editor.react";n(Fm,["spinnaker.core.artifacts.expected.kind.selector.react",Mm]).component("expectedArtifactEditorReact",yn(jl(Im,"expectedArtifactEditorReact"),["default","kinds","sources","accounts","onSave","showIcons","showAccounts","className","pipeline"]));class Tm extends ot.Component{constructor(){super(...arguments),this.onArtifactAccountChanged=e=>{const t=!this.props.artifact||this.props.artifact.type&&!e.types.includes(this.props.artifact.type)&&"custom-artifact"!==e.name?{id:pr.generateUuid()}:p(this.props.artifact);t.artifactAccount=e.name,t.type&&"custom-artifact"===e.name||(t.type=e.types&&e.types.length>0?e.types[0]:""),this.props.onArtifactEdit(t)}}defaultArtifactAccountIfNecessary(){const{artifact:e,artifactAccounts:t}=this.props;!e.artifactAccount&&t.length>0&&this.onArtifactAccountChanged(de(t.filter((t=>t.types.includes(e.type))))||de(t.filter((e=>e.types.includes(hu))))||de(t))}componentDidMount(){this.defaultArtifactAccountIfNecessary()}componentDidUpdate(){this.defaultArtifactAccountIfNecessary()}render(){const{pipeline:e,artifact:t,artifactAccounts:n,onArtifactEdit:a,isDefault:i}=this.props,r=n.find((e=>e.name===t.artifactAccount))||n[0],s=r?r.types:void 0,o=i?$m.pipeline.getDefaultArtifactKinds():$m.pipeline.getMatchArtifactKinds(),l=s?o.find((e=>s.some((t=>e.typePattern.test(t))))):void 0,c=l&&l.editCmp;return ot.createElement(ot.Fragment,null,ot.createElement(zp,{label:"Account",fieldColumns:8},ot.createElement(xm,{accounts:n,selected:r,onChange:this.onArtifactAccountChanged})),c&&ot.createElement(c,{account:r,artifact:t,onChange:a,pipeline:e}))}}const Qm=class extends ot.Component{constructor(e){super(e),this.editArtifact=(e,t,n)=>{e.setFieldValue(t,n),e.setFieldValue(`${t}.artifactAccount`,n.artifactAccount)},this.state={matchArtifactAccounts:[],defaultArtifactAccounts:[],taskMonitor:new qc({title:"I'm never used"})}}componentDidMount(){const{excludedArtifactTypePatterns:e,excludedDefaultArtifactTypePatterns:t}=this.props;Di.getArtifactAccounts().then((n=>{this.setState({matchArtifactAccounts:e?n.filter((t=>!t.types.some((t=>e.some((e=>e.test(t))))))):n,defaultArtifactAccounts:t?n.filter((e=>!e.types.some((e=>t.some((t=>t.test(e))))))):n})}))}static show(e){return si.show(Qm,e,{dialogClassName:"wizard-modal modal-lg"})}render(){const{matchArtifactAccounts:e,defaultArtifactAccounts:t}=this.state;return ot.createElement(Lc,{heading:"Expected Artifact",initialValues:this.props.expectedArtifact||dm.createEmptyArtifact(),taskMonitor:this.state.taskMonitor,dismissModal:this.props.dismissModal,closeModal:this.props.closeModal,submitButtonLabel:"Save Artifact",render:({formik:n,nextIdx:a,wizard:i})=>ot.createElement(ot.Fragment,null,ot.createElement(Fc,{label:"General",wizard:i,order:a(),render:()=>ot.createElement(kl,{name:"displayName",label:"Display Name",input:e=>ot.createElement(go,{...e}),required:!0})}),ot.createElement(Fc,{label:"Match Artifact",wizard:i,order:a(),render:()=>ot.createElement(Tm,{pipeline:this.props.pipeline,artifact:n.values.matchArtifact,artifactAccounts:e,onArtifactEdit:e=>this.editArtifact(n,"matchArtifact",e),isDefault:!1})}),ot.createElement(Fc,{label:"If Missing",wizard:i,order:a(),render:()=>ot.createElement(ot.Fragment,null,ot.createElement(kl,{name:"usePriorArtifact",label:"Use prior execution",input:e=>ot.createElement(xo,{...e}),help:ot.createElement(_s,{id:"pipeline.config.expectedArtifact.usePriorExecution"})}),ot.createElement(kl,{name:"useDefaultArtifact",label:"Use default artifact",input:e=>ot.createElement(xo,{...e}),help:ot.createElement(_s,{id:"pipeline.config.expectedArtifact.defaultArtifact"})}),n.values.useDefaultArtifact&&ot.createElement(Tm,{pipeline:this.props.pipeline,artifact:n.values.defaultArtifact,artifactAccounts:t,onArtifactEdit:e=>this.editArtifact(n,"defaultArtifact",e),isDefault:!0}))}))})}};let Pm=Qm;Pm.defaultProps={closeModal:qi,dismissModal:qi};class Rm extends ot.Component{constructor(e){super(e),this.defineNewArtifactOption={...dm.createEmptyArtifact(),displayName:"Define a new artifact...",id:"__inline.artifact__"},this.destroy$=new At,this.renderArtifact=e=>ot.createElement("span",null,"__inline.artifact__"!==e.id&&ot.createElement(wm,{type:e.matchArtifact&&e.matchArtifact.type||e.defaultArtifact&&e.defaultArtifact.type,width:"16",height:"16"}),e&&e.displayName),this.onExpectedArtifactSelected=e=>{"__inline.artifact__"!==e.id?this.props.onExpectedArtifactSelected(e):this.props.onArtifactEdited(e.defaultArtifact)},this.onInlineArtifactChanged=e=>{this.props.onArtifactEdited(e)},this.state={artifactAccounts:[]}}componentWillUnmount(){this.destroy$.next()}componentDidMount(){const e=this.props.excludedArtifactTypePatterns;vt(Di.getArtifactAccounts()).pipe(It(this.destroy$)).subscribe((t=>{this.setState({artifactAccounts:e?t.filter((t=>!t.types.some((t=>e.some((e=>e.test(t))))))):t})}))}render(){const{pipeline:e,stage:t,expectedArtifactId:n,artifact:a,excludedArtifactIds:i,renderLabel:r}=this.props,s=dm.getExpectedArtifactsAvailableToStage(t,e),o=n?s.find((e=>e.id===n)):a?{id:"__inline.artifact__",displayName:"Artifact from execution context",defaultArtifact:a}:void 0,l=[this.defineNewArtifactOption,...s.filter((e=>!i||!i.includes(e.id)))],c=ot.createElement(cn,{clearable:!1,options:l,value:o,optionRenderer:this.renderArtifact,valueRenderer:this.renderArtifact,onChange:this.onExpectedArtifactSelected,placeholder:"Select an artifact..."});return ot.createElement(ot.Fragment,null,ot.createElement("div",{className:"sp-margin-m-bottom","data-test-id":"Stage.artifactSelector"},r?r(c):c),!!a&&ot.createElement(Tm,{pipeline:e,artifact:a,artifactAccounts:this.state.artifactAccounts,onArtifactEdit:e=>this.onInlineArtifactChanged(e),isDefault:!0}))}}const Um="spinnaker.core.artifacts.stage.artifact.selector.react";n(Um,[]).component("stageArtifactSelectorReact",yn(jl(Rm,"stageArtifactSelectorReact"),["pipeline","stage","expectedArtifactId","artifact","onExpectedArtifactSelected","onArtifactEdited","excludedArtifactIds","excludedArtifactTypePatterns"]));const zm=e=>ot.createElement(zp,{label:e.label,helpKey:e.helpKey,fieldColumns:e.fieldColumns},ot.createElement(Rm,{...e}));oi(".TriggerArtifactConstraintSelector_Selects > * + * {\n margin-top: 4px;\n}\n");class Gm extends ot.Component{constructor(){super(...arguments),this.defaultExcludedArtifactTypePatterns=[vp.KUBERNETES,vp.FRONT50_PIPELINE_TEMPLATE],this.excludedArtifactTypes=()=>{const e=$m.pipeline.getTriggerConfig(this.props.triggerType);return this.defaultExcludedArtifactTypePatterns.concat(e&&e.excludedArtifactTypePatterns||[])},this.handleChange=(e,t)=>{if("__create.new.artifact"===t.id)return void Pm.show({pipeline:this.props.pipeline,excludedArtifactTypePatterns:this.excludedArtifactTypes(),excludedDefaultArtifactTypePatterns:this.defaultExcludedArtifactTypePatterns}).then((e=>{this.props.addExpectedArtifact(e),this.props.onChange(fr({name:this.props.name,value:(this.props.value||[]).concat([e.id])}))}),(()=>null));const n=(this.props.value||[]).slice(0);n[e]=t.id,this.props.onChange(fr({name:this.props.name,value:n}))},this.removeExpectedArtifact=e=>{const t=(this.props.value||[]).slice();this.props.removeExpectedArtifact(e),this.props.onChange(fr({name:this.props.name,value:t.filter((t=>t!==e.id))}))},this.editExpectedArtifact=e=>{Pm.show({expectedArtifact:e,pipeline:this.props.pipeline,excludedArtifactTypePatterns:this.excludedArtifactTypes(),excludedDefaultArtifactTypePatterns:this.defaultExcludedArtifactTypePatterns}).then((e=>this.props.updateExpectedArtifact(e)),(()=>null))},this.renderArtifact=e=>ot.createElement("span",null,e&&e.displayName)}render(){const{pipeline:e}=this.props,t=this.props.value||[],n=e.expectedArtifacts||[],[a,i]=ue(n,(e=>t.includes(e.id))),r=dm.createEmptyArtifact();r.id="__create.new.artifact",r.displayName="Define a new artifact...",i.push(r);const s=(e,t)=>{const n=ot.createElement(ot.Fragment,null,ot.createElement("a",{className:"clickable glyphicon glyphicon-edit",onClick:()=>this.editExpectedArtifact(t)}),ot.createElement("a",{className:"clickable glyphicon glyphicon-trash",onClick:()=>this.removeExpectedArtifact(t)}));return ot.createElement("div",{key:t&&t.id||"new",className:"flex-container-h baseline margin-between-md"},ot.createElement(cn,{className:"flex-grow",clearable:!1,value:t,onChange:t=>this.handleChange(e,t),options:i,optionRenderer:this.renderArtifact,valueRenderer:this.renderArtifact,placeholder:"Select or define an artifact..."}),ot.createElement("div",{style:{minWidth:"50px"},className:"flex-container-h baseline margin-between-md"},t&&n))};return ot.createElement("div",{className:"TriggerArtifactConstraintSelector_Selects flex-container-v margin-between-md"},a.map(((e,t)=>s(t,e))),s(t.length))}}const jm=[pu,du,mu,gu,vu,Au,bu,yu,wu,xu,Bu,Su,Fu,Tu,Nu,Du,Uu,zu,Gu,ju,Lu,Ou,Ju,Wu,Zu,_u,nm,am,em,tm,qu,Xu];class Lm{constructor(){this.triggerTypes=[],this.stageTypes=[],this.transformers=[],this.notificationTypes=[],this.artifactKinds=jm,this.getStageConfig=me(this.getStageConfig.bind(this),(e=>[e?e.type:"",e?Lm.resolveCloudProvider(e):""].join(":")))}normalizeStageTypes(){this.stageTypes.filter((e=>e.provides)).forEach((e=>{const t=this.stageTypes.find((t=>t.key===e.provides&&!t.provides));t&&(e.label=e.label||t.label,e.description=e.description||t.description,e.key=e.key||t.key,e.manualExecutionComponent=e.manualExecutionComponent||t.manualExecutionComponent,t.executionDetailsUrl&&!e.executionDetailsUrl&&(e.executionDetailsUrl=t.executionDetailsUrl),t.executionConfigSections&&!e.executionConfigSections&&(e.executionConfigSections=t.executionConfigSections),t.executionDetailsSections&&!e.executionDetailsSections&&(e.executionDetailsSections=t.executionDetailsSections))}))}registerNotification(e){this.notificationTypes.push(e)}registerTrigger(e){di.triggerTypes?di.triggerTypes.indexOf(e.key)>=0&&this.triggerTypes.push(e):this.triggerTypes.push(e)}registerTransformer(e){this.transformers.push(e)}registerStage(e){(di.hiddenStages||[]).includes(e.key)||(this.stageTypes.push(e),this.normalizeStageTypes())}async registerPreconfiguredJobStage(e){var t;const n=(await fp.list()).find((t=>t.type===e.key));if(!n)throw new Error(`Preconfigured Job of type '${e.key}' not found in /jobs/preconfigured from gate. Is the preconfigured job registered in orca?`);const a=null!=(t=null==n?void 0:n.parameters)?t:[],i=a.filter((e=>!u(e.defaultValue))),r=ge(i.map((e=>[e.name,e.defaultValue]))),{label:s,description:o,waitForCompletion:l,producesArtifacts:c}=n,p={...e,configuration:{...e.configuration,parameters:a,waitForCompletion:l},defaults:{parameters:r},description:o,label:s,producesArtifacts:c};return this.registerStage(p),p}registerArtifactKind(e){return this.artifactKinds.push(e),e.editCmp}getExecutionTransformers(){return this.transformers}getNotificationTypes(){return p(this.notificationTypes)}getTriggerTypes(){return p(this.triggerTypes)}getStageTypes(){return p(this.stageTypes)}getMatchArtifactKinds(){return p(this.artifactKinds.filter((e=>e.isMatch)))}getDefaultArtifactKinds(){return p(this.artifactKinds.filter((e=>e.isDefault)))}getCustomArtifactKind(){return p(this.artifactKinds.find((e=>"custom"===e.key)))}getCloudProvidersForStage(e,t,n){const a=f(n.map((e=>e.cloudProvider)));let i=[];if(e.providesFor)i=e.providesFor;else if(e.cloudProvider)i=[e.cloudProvider];else if(e.useBaseProvider){t.filter((t=>t.provides===e.key)).forEach((e=>{e.providesFor?i=i.concat(e.providesFor):i.push(e.cloudProvider)}))}else i=a.slice(0);return i=i.filter((t=>!!n.filter((e=>e.cloudProvider===t)).find((t=>{const n=Ni.getProvider(t.cloudProvider);return!Om(e,n)})))),di.feature.dockerBake&&"bake"===e.key&&a.push("docker"),h(a,i)}getConfigurableStageTypes(e){const t=u(e)?[]:Array.from(new Set(e.map((e=>e.cloudProvider)))),n=this.getStageTypes();let a=n.filter((e=>!e.synthetic&&!e.provides));return 0===t.length?a:(a.forEach((t=>t.cloudProviders=this.getCloudProvidersForStage(t,n,e))),a=a.filter((t=>!e.every((e=>{const n=Ni.getProvider(e.cloudProvider);return Om(t,n)})))),a.filter((e=>e.cloudProviders.length)).sort(((e,t)=>e.label.localeCompare(t.label))))}getProvidersFor(e){let t=e;const n=this.getStageTypes().filter((t=>t.provides&&(t.provides===e||t.key===e||t.alias===e)));return n.length&&(t=n[0].provides),this.getStageTypes().filter((e=>e.provides&&e.provides===t))}getNotificationConfig(e){return this.getNotificationTypes().find((t=>t.key===e))}getTriggerConfig(e){return this.getTriggerTypes().find((t=>t.key===e))}overrideManualExecutionComponent(e,t){const n=this.triggerTypes.find((t=>t.key===e));n&&(n.manualExecutionComponent=t)}checkAliasedStageTypes(e){const t=this.getStageTypes().filter((t=>t.alias===e.type));return 1===t.length?t[0]:null}checkAliasFallback(e){if(e.alias){const t=this.getStageTypes().filter((t=>t.key===e.alias));if(1===t.length)return t[0]}return null}getStageConfig(e){var t;if(!e||!e.type)return null;const n=this.getStageTypes().filter((t=>t.key===e.type||t.provides===e.type));switch(n.length){case 0:{const t=this.checkAliasedStageTypes(e)||this.checkAliasFallback(e),n=this.getStageTypes().find((e=>"unmatched"===e.key));return null!=t?t:n}case 1:return n[0];default:{const a=Lm.resolveCloudProvider(e),i=n.find((e=>e.cloudProvider===a)),r=n.find((e=>!!e.cloudProvider));return null!=(t=null!=i?i:r)?t:n[0]}}}static resolveCloudProvider(e){var t,n,a,i,r,s;return null!=(s=null!=(r=null!=(a=null!=(t=e.cloudProvider)?t:e.cloudProviderType)?a:null==(n=e.context)?void 0:n.cloudProvider)?r:null==(i=e.context)?void 0:i.cloudProviderType)?s:"aws"}getManualExecutionComponent(e){return e&&e.manualExecutionComponent?e.manualExecutionComponent:null}getManualExecutionComponentForTriggerType(e){return this.getManualExecutionComponent(this.getTriggerConfig(e))}hasManualExecutionComponentForTriggerType(e){return null!==this.getManualExecutionComponent(this.getTriggerConfig(e))}getManualExecutionComponentForStage(e){return this.getStageConfig(e).manualExecutionComponent}}function Om(e,t){return!(!t||!t.unsupportedStageTypes)&&t.unsupportedStageTypes.indexOf(e.key)>-1}const Ym=class{};let $m=Ym;$m.pipeline=new Lm,$m.urlBuilder=new cp,$m.reinitialize=()=>{Ym.pipeline=new Lm,Ym.urlBuilder=new cp},_c.Registry=$m;class Hm{constructor(e,t,n,a){this.$scope=e,this.$stateParams=t,this.$state=n,this.executionService=a,this.parser=new wn,this.renderer=new xn}$onInit(){this.updateScope()}$onChanges(){this.updateScope()}updateScope(){this.$scope.application=this.application,this.$scope.execution=this.execution,this.$scope.stage=this.stage,this.$scope.stageSummary=this.stageSummary}getStepLabel(e){const t=$m.pipeline.getStageConfig(e);return t&&t.executionStepLabelUrl?t.executionStepLabelUrl:"core/src/pipeline/config/stages/common/stepLabel.html"}getComments(){const e=this.parser.parse(this.stageSummary.comments+"");return this.renderer.render(e)}getCurrentStep(){return parseInt(this.$stateParams.step,10)}isStepCurrent(e){return e===this.getCurrentStep()}isRestartable(e){if(e.isRunning||e.isCompleted)return!1;const t=$m.pipeline.getStageConfig(e);if(!t||!0===e.isRestarting)return!1;const n=this.application.attributes.enableRestartRunningExecutions||!1;return!(this.execution.isRunning&&!n)&&(t.restartable||!1)}canManuallySkip(){const e=this.getTopLevelStage();return this.stage.isRunning&&e&&e.context.canManuallySkip}getTopLevelStage(){let e=this.stage.parentStageId,t=this.stage;for(;e;)t=this.execution.stages.find((t=>t.id===e)),e=t.parentStageId;return t}openManualSkipStageModal(){const e=this.getTopLevelStage();lp.confirm({header:"Really skip this stage?",buttonText:"Skip",askForReason:!0,submitJustWithReason:!0,body:'<div class="alert alert-warning">\n <b>Warning:</b> Skipping this stage may have unpredictable results.\n <ul>\n <li>Mutating changes initiated by this stage will continue and will need to be cleaned up manually.</li>\n <li>Downstream stages that depend on the outputs of this stage may fail or behave unexpectedly.</li>\n </ul>\n </div>\n ',submitMethod:t=>this.executionService.patchExecution(this.execution.id,e.id,{manualSkip:!0,reason:t}).then((()=>this.executionService.waitUntilExecutionMatches(this.execution.id,(t=>{const n=t.stages.find((t=>t.id===e.id));return n&&"SKIPPED"===n.status})))).then((e=>this.executionService.updateExecution(this.application,e)))})}toggleDetails(e){const t=this.getCurrentStep()===e?null:e;if(null!==t){const e={step:t},n=parseInt(this.$stateParams.stage,10);n&&(e.stage=n);const a=parseInt(this.$stateParams.subStage,10);a&&(e.subStage=a),this.$state.go(".",e)}}}Hm.$inject=["$scope","$stateParams","$state","executionService"];const Vm={bindings:{application:"<",execution:"<",sourceUrl:"<",stage:"<",stageSummary:"<"},controller:Hm,template:'<div className="stage-summary-wrapper" ng-include="$ctrl.sourceUrl"></div>'};n("spinnaker.core.pipeline.stageSummary.component",[]).component("stageSummary",Vm),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/pipeline/config/stages/common/stepLabel.html",'<span class="task-label">{{ step.name | robotToHuman }}</span>\n')}]);class Jm{constructor(e){this.$scope=e}$onInit(){this.updateScope()}$onChanges(){this.updateScope()}updateScope(){this.$scope.application=this.application,this.$scope.config=this.config,this.$scope.configSections=this.configSections,this.$scope.execution=this.execution,this.$scope.stage=this.stage}}Jm.$inject=["$scope"];const Wm={bindings:{application:"<",config:"<",configSections:"<",execution:"<",sourceUrl:"<",stage:"<"},controller:Jm,template:'<div ng-include="$ctrl.sourceUrl"></div>'};n("spinnaker.core.pipeline.stepExecutionDetails.component",[]).component("stepExecutionDetails",Wm);oi("instance-type-selector tr.unavailable {\n opacity: 0.5;\n}\n");class Km{constructor(e,t){this.$scope=e,this.instanceTypeService=t,this.selectInstanceType=e=>{e.unavailable||(this.command.instanceType=e.name,this.command.viewState.dirty&&this.command.viewState.dirty.instanceType&&delete this.command.viewState.dirty.instanceType,this.instanceTypeService.getInstanceTypeDetails(this.command.selectedProvider,e.name).then((e=>{this.command.viewState.instanceTypeDetails=e})),this.onTypeChanged&&this.onTypeChanged(this.command.instanceType))},this.getStorageDescription=e=>this.command.instanceType===e.name&&this.command.viewState.overriddenStorageDescription?this.command.viewState.overriddenStorageDescription:e.storage.count+"x"+e.storage.size,this.getStorageDescriptionHelpKey=e=>this.command.instanceType===e.name&&this.command.viewState.overriddenStorageDescription?"instanceType.storageOverridden":null}$onInit(){this.instanceProfile=this.command.viewState.instanceProfile,this.instanceTypes=this.command.backingData&&this.command.backingData.filtered?this.command.backingData.filtered.instanceTypes:[],this.updateFamilies()}$doCheck(){let e=!1;this.command.viewState.instanceProfile!==this.instanceProfile&&(this.instanceProfile=this.command.viewState.instanceProfile,e=!0);this.command.backingData&&this.command.backingData.filtered&&this.command.backingData.filtered.instanceTypes!==this.instanceTypes&&(this.instanceTypes=this.command.backingData.filtered.instanceTypes,e=!0),e&&this.updateFamilies()}updateFamilies(){let e=[];this.command.backingData&&this.command.backingData.filtered&&(e=this.command.backingData.filtered.instanceTypes||[]),this.instanceTypeService.getCategories(this.command.selectedProvider).then((t=>{t.forEach((t=>{t.type===this.command.viewState.instanceProfile&&(this.command.viewState.disableImageSelection||t.families.forEach((t=>{t.instanceTypes.forEach((t=>{t.unavailable=e.every((e=>e!==t.name))}))})),this.$scope.selectedInstanceProfile=t)}))}))}}Km.$inject=["$scope","instanceTypeService"];const qm={bindings:{command:"<",onTypeChanged:"="},controller:Km,controllerAs:"instanceTypeCtrl",templateUrl:"core/src/serverGroup/configure/common/instanceTypeDirective.html"};n("spinnaker.core.serverGroup.configure.common.v2instanceTypeSelector",[]).component("v2InstanceTypeSelector",qm),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/serverGroup/configure/common/instanceTypeDirective.html",'<dirty-instance-type-notification command="command"></dirty-instance-type-notification>\n<div class="row" ng-repeat="family in selectedInstanceProfile.families">\n <div class="col-md-12">\n <h4>{{selectedInstanceProfile.label}}: {{family.type}}</h4>\n <p>{{family.description}}</p>\n <table class="table table-hover">\n <thead>\n <tr>\n <th></th>\n <th>Size</th>\n <th>vCPU</th>\n <th>Mem (GiB)</th>\n <th>\n {{family.storageType || \'SSD\'}} Storage (GB)\n <help-field ng-if="family.storageHelpFieldKey" key="{{family.storageHelpFieldKey}}"></help-field>\n </th>\n <th>Cost</th>\n </tr>\n </thead>\n <tbody>\n <tr\n ng-repeat="instanceType in family.instanceTypes"\n ng-class="{info: instanceTypeCtrl.command.instanceType === instanceType.name, clickable: !instanceType.unavailable, unavailable: instanceType.unavailable}"\n ng-click="instanceTypeCtrl.selectInstanceType(instanceType)"\n >\n <td>\n <help-field ng-if="instanceType.unavailable" key="instanceType.unavailable"></help-field>\n <help-field ng-if="instanceType.helpFieldKey" key="{{instanceType.helpFieldKey}}"></help-field>\n <input\n type="radio"\n ng-value="instanceType.name"\n ng-model="instanceTypeCtrl.command.instanceType"\n ng-disabled="instanceType.unavailable"\n />\n </td>\n <td>{{instanceType.label}}</td>\n <td>{{instanceType.cpu}}</td>\n <td>{{instanceType.memory}}</td>\n <td ng-if="instanceType.storage.type === \'EBS\'">EBS Only</td>\n <td ng-if="instanceType.storage.type === \'SSD\' || family.storageType">\n <help-field\n ng-if="instanceTypeCtrl.getStorageDescriptionHelpKey(instanceType)"\n key="{{instanceTypeCtrl.getStorageDescriptionHelpKey(instanceType)}}"\n ></help-field>\n {{instanceTypeCtrl.getStorageDescription(instanceType)}}\n </td>\n <td><cost-factor factor="instanceType.costFactor"></cost-factor></td>\n </tr>\n </tbody>\n </table>\n </div>\n</div>\n')}]);n("spinnaker.core.serverGroup.configure.common.costFactor",[]).directive("costFactor",(function(){return{restrict:"E",scope:{factor:"=",range:"="},templateUrl:"core/src/serverGroup/configure/common/costFactor.html",link:function(e){function t(e){return{used:new Array(e+1).join("$"),unused:new Array(5-e).join("$")}}function n(){if(e.range)e.min=t(e.range.min),e.max=t(e.range.max);else{const n=t(e.factor);e.used=n.used,e.unused=n.unused}}n(),e.$watch("range",n)}}})),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/serverGroup/configure/common/costFactor.html",'<span class="cost-factor" ng-if="!range"> <span class="cost">{{used}}</span>{{unused}} </span>\n<span class="cost-factor" ng-if="range">\n <span class="cost">{{min.used}}</span>{{min.unused}} – <span class="cost">{{max.used}}</span>{{max.unused}}\n</span>\n')}]);n("spinnaker.core.presentation.isVisible.directive",[]).directive("isVisible",(function(){return function(e,t,n){e.$watch(n.isVisible,(function(e){t.css("visibility",e?"visible":"hidden")}))}}));class Xm{constructor(e,t){this.$scope=e,this.instanceTypeService=t,this.selectInstanceType=e=>{const{$scope:t}=this;t.selectedInstanceProfile&&t.selectedInstanceProfile.type===e&&(e=null,t.selectedInstanceProfile=null),this.command.viewState.instanceProfile=e,t.instanceProfiles.forEach((n=>{if(n.type===e){t.selectedInstanceProfile=n;const e=this.command.instanceType;if(e&&!Z(["custom","buildCustom"],n.type)){n.families.some((t=>t.instanceTypes.some((t=>t.name===e&&!t.unavailable))))||(this.command.instanceType=null)}}})),this.onProfileChanged&&this.onProfileChanged(e)},this.updateInstanceType=()=>{Ic.renderedPages.length>0&&(this.command.instanceType?Ic.markComplete("instance-type"):Ic.markIncomplete("instance-type"))},this.updateInstanceTypeDetails=()=>{this.instanceTypeService.getInstanceTypeDetails(this.command.selectedProvider,this.command.instanceType).then((e=>{this.command.viewState.instanceTypeDetails=e})),this.onTypeChanged&&this.onTypeChanged(this.command.instanceType)}}$onInit(){const{$scope:e}=this;this.instanceTypeService.getCategories(this.command.selectedProvider).then((t=>{e.instanceProfiles=t,e.instanceProfiles.length%3==0&&(e.columns=3),e.instanceProfiles.length%4==0&&(e.columns=4),e.instanceProfiles.length%5!=0&&7!==e.instanceProfiles.length||(e.columns=5),this.selectInstanceType(this.command.viewState.instanceProfile)})),this.command.region&&this.command.instanceType&&!this.command.viewState.instanceProfile&&this.selectInstanceType("custom"),this.getInstanceBuilderTemplate=Ni.getValue.bind(Ni,this.command.cloudProvider,"instance.customInstanceBuilderTemplateUrl"),e.$watch("$ctrl.command.instanceType",(()=>this.updateInstanceType()))}}Xm.$inject=["$scope","instanceTypeService"];const Zm={bindings:{command:"<",onProfileChanged:"=",onTypeChanged:"="},controller:Xm,controllerAs:"instanceArchetypeCtrl",templateUrl:"core/src/serverGroup/configure/common/v2instanceArchetype.directive.html"};n("spinnaker.core.serverGroup.configure.common.v2instanceArchetypeSelector",["spinnaker.core.serverGroup.configure.common.costFactor","spinnaker.core.presentation.isVisible.directive"]).component("v2InstanceArchetypeSelector",Zm),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/serverGroup/configure/common/v2instanceArchetype.directive.html",'<h4 class="col-md-12" style="margin-top: 10px">This application is:</h4>\n<div class="archetype-columns archetype-columns-{{columns}}" ng-repeat="instanceProfile in instanceProfiles">\n <button\n class="instance-profile"\n type="button"\n ng-class="{active: instanceArchetypeCtrl.command.viewState.instanceProfile === instanceProfile.type}"\n ng-click="instanceArchetypeCtrl.selectInstanceType(instanceProfile.type)"\n >\n <span\n is-visible="instanceArchetypeCtrl.command.viewState.instanceProfile === instanceProfile.type"\n class="far fa-check-circle selected-indicator"\n ></span>\n <div class="panel-heading">\n <h4>\n <span class="glyphicon glyphicon-{{instanceProfile.icon}}"></span>\n <div>{{instanceProfile.label}}</div>\n </h4>\n </div>\n </button>\n</div>\n<div class="clearfix" ng-if="instanceArchetypeCtrl.command.viewState.instanceProfile === \'custom\'">\n <dirty-instance-type-notification command="instanceArchetypeCtrl.command"></dirty-instance-type-notification>\n <div class="col-md-8">\n <select\n class="form-control input-sm"\n ng-model="instanceArchetypeCtrl.command.instanceType"\n ng-options="customType for customType in instanceArchetypeCtrl.command.backingData.filtered.instanceTypes"\n ng-change="instanceArchetypeCtrl.updateInstanceTypeDetails()"\n required\n >\n <option value="">Select an instance type...</option>\n </select>\n </div>\n</div>\n<ng-include\n src="instanceArchetypeCtrl.getInstanceBuilderTemplate()"\n ng-if="instanceArchetypeCtrl.command.viewState.instanceProfile === \'buildCustom\'"\n>\n</ng-include>\n')}]);const _m={bindings:{application:"<",component:"<",accounts:"<",clusterField:"<",singleRegion:"<",showAllRegions:"<?",onAccountUpdate:"<?",disableRegionSelect:"<?"},template:'\n <account-region-cluster-selector\n application="$ctrl.application"\n component="$ctrl.component"\n accounts="$ctrl.accounts"\n cluster-field="{{::$ctrl.clusterField}}"\n single-region="$ctrl.singleRegion"\n show-all-regions="$ctrl.showAllRegions"\n on-account-update="$ctrl.onAccountUpdate"\n disable-region-select="$ctrl.disableRegionSelect">\n </account-region-cluster-selector>\n '};n("spinnaker.core.accountRegionClusterSelectorWrapper.component",[]).component("accountRegionClusterSelectorWrapper",_m);class eg extends mi{constructor(){super(...arguments),this.$injectorProxy={},this.AccountRegionClusterSelector=la("accountRegionClusterSelectorWrapper",_m,this.$injectorProxy),this.InstanceArchetypeSelector=la("v2InstanceArchetypeSelector",Zm,this.$injectorProxy),this.InstanceTypeSelector=la("v2InstanceTypeSelector",qm,this.$injectorProxy),this.StageSummaryWrapper=la("stageSummary",Vm,this.$injectorProxy),this.StepExecutionDetailsWrapper=la("stepExecutionDetails",Wm,this.$injectorProxy),this.TargetSelect=la("targetSelect",Bc,this.$injectorProxy)}initialize(e){const t=e,n=this.$injectorProxy;Object.keys(e).filter((e=>"function"==typeof t[e])).forEach((e=>n[e]=t[e].bind(t)))}}const tg=new eg;class ng{constructor(e){this.$rootScope=e,this.stateChangeSuccess=new At,this.locationChangeSuccess=new At;this.$rootScope.$on("$stateChangeSuccess",((e,t,n,a,i)=>{this.stateChangeSuccess.next({to:t,toParams:n,from:a,fromParams:i})})),this.$rootScope.$on("$locationChangeSuccess",((e,t)=>this.locationChangeSuccess.next(t)))}}ng.$inject=["$rootScope"];const ag="spinnaker.core.state.events";n(ag,[]).service("stateEvents",ng);oi("react-ui-view-adapter {\n flex: 1 1 auto;\n display: flex;\n height: 100%;\n}\n");const ig="spinnaker.core.react";function rg(e,t,n,a=((e,t)=>e===t)){return n.every((n=>a(e[n],t[n])))}n(ig,["bcherny/ngimport","ui.router",ag]).run(["$injector",function(e){hi.initialize(e),vi.initialize(e),tg.initialize(e)}]);class sg{static deleteSecurityGroup(e,t,n){n.type="deleteSecurityGroup",n.securityGroupName=e.name,n.regions=[e.region],n.credentials=e.accountId;const a=tp.executeTask({job:[n],application:t,description:`Delete ${Js.get("Firewall")}: ${e.name}`});return dd.clearCache("securityGroups"),a}static upsertSecurityGroup(e,t,n,a={}){a.type="upsertSecurityGroup",a.securityGroupName=e.name,a.credentials=e.credentials||e.accountName;const i={...e,...a},r=tp.executeTask({job:[i],application:t,description:`${n} ${Js.get("Firewall")}: ${e.name}`});return dd.clearCache("securityGroups"),r}}oi(".search-result {\n display: inline-block;\n width: calc(100% - 20px);\n}\n.search-result > span + span {\n margin-left: 6px;\n}\n");class og extends ot.Component{render(){const{displayName:e,account:t}=this.props;return ot.createElement("span",{className:"search-result"},t&&ot.createElement(ns,{account:t}),ot.createElement(Sr,{tag:"span",message:e}))}}const lg=({categories:e,onItemKeyDown:t,onResultClick:n,resultRef:a})=>e.length?ot.createElement("ul",{className:"dropdown-menu",role:"menu"},e.map(((e,i)=>[ot.createElement("li",{key:e.category,className:"category-heading"},ot.createElement("div",{className:"category-heading"},"Recent ",e.category)),...e.results.map(((r,s)=>{const o=r.params||{},l=r.account||o.account||o.accountId||o.accountName;return ot.createElement("li",{key:r.id,className:"result",onClick:()=>n(e.category)},ot.createElement(Dn,{to:r.state,params:r.params},ot.createElement("a",{ref:e=>a(i,s,e),onKeyDown:t},ot.createElement(og,{displayName:r.displayName,account:l}))))}))]))):null,cg=(e,t)=>{if(e)for(const n of e)if("applications"===n.type.id){const e=n.results.find((e=>e.application.toLowerCase()===t.toLowerCase()));if(e)return{category:n,result:e}}},pg=(e,t)=>2===di.searchVersion?{key:e,tab:t}:{q:e},dg=({categories:e,query:t,onItemKeyDown:n,onResultClick:a,onSeeMoreClick:i,resultRef:r})=>{if(!e.length)return ot.createElement("ul",{className:"dropdown-menu",role:"menu"},ot.createElement("li",{className:"result"},ot.createElement("a",null,"No matches")));const s=cg(e,t);return ot.createElement("ul",{className:"dropdown-menu",role:"menu"},e.map(((e,o)=>{const l=pg(t,e.type.id);return[ot.createElement("li",{key:e.type.id,className:"category-heading flex-container-h no-wrap space-between baseline"},ot.createElement("span",null,e.type.displayName),ot.createElement(Dn,{to:"home.search",params:l},ot.createElement("a",{target:"_self",className:"expand-results",ref:e=>r(o,0,e),onClick:i,onKeyDown:n},"show all"))),e.results.map(((e,t)=>ot.createElement("li",{key:e.href,className:"result"},ot.createElement("a",{onKeyDown:n,onClick:()=>a(e),ref:e=>r(o,t+1,e),href:e.href,className:e===(null==s?void 0:s.result)?"query-match":void 0},ot.createElement(og,{displayName:e.displayName,account:e.account})))))]})))};oi(".infrastructure-project {\n display: block;\n border: 1px solid var(--color-mineshaft);\n background-color: var(--color-white);\n margin-bottom: 15px;\n}\n.infrastructure-project a {\n color: var(--color-mineshaft);\n display: block;\n}\n.infrastructure-project a:active,\n.infrastructure-project a:hover {\n font-weight: 600;\n}\n.infrastructure-project .project-summary {\n padding: 10px;\n background-color: var(--color-primary);\n color: var(--color-alabaster);\n}\n.infrastructure-project .project-summary .remove-result-link {\n opacity: 0;\n}\n.infrastructure-project .project-summary:hover .remove-result-link {\n opacity: 1;\n transition: opacity 0.25s ease-in;\n color: var(--color-concrete);\n}\n.infrastructure-project .project-summary:hover .remove-result-link:hover,\n.infrastructure-project .project-summary:hover .remove-result-link:active {\n color: var(--color-accent);\n}\n.infrastructure-project .project-summary .project-name {\n text-transform: uppercase;\n font-weight: 600;\n font-size: 120%;\n}\n.infrastructure-project .project-summary .project-name a {\n color: var(--color-accessory-light);\n display: inline-block;\n width: calc(100% - 20px);\n}\n.infrastructure-project .application-list {\n padding: 10px 15px;\n margin-bottom: 0;\n border-top: 1px solid var(--color-mineshaft);\n background-color: var(--color-cirrus);\n}\n.infrastructure-project .application-list li {\n list-style-type: none;\n}\n.infrastructure-project .application-list li a {\n color: var(--color-mineshaft);\n}\n");var ug=Object.defineProperty,mg=Object.getOwnPropertyDescriptor;let gg=class extends ot.Component{constructor(){super(...arguments),this.handleRemoveClicked=e=>{e.preventDefault(),this.props.onRemoveProject(this.props.id)},this.handleResultClick=()=>{this.props.onResultClick&&this.props.onResultClick("projects")}}render(){const{projectName:e,applications:t,onRemoveProject:n}=this.props,a=!!n;return ot.createElement("div",{className:"infrastructure-project",onClick:this.handleResultClick},ot.createElement("div",{className:"project-summary"},ot.createElement("div",{className:"project-name"},ot.createElement(Dn,{to:"home.project.dashboard",params:{project:e}},ot.createElement("a",null,e)),a&&ot.createElement("span",{className:"small clickable remove-result-link",onClick:this.handleRemoveClicked},ot.createElement(Ps,{value:"remove from history",placement:"left",delayShow:300},ot.createElement("span",{className:"glyphicon glyphicon-remove"})))),ot.createElement("div",{className:"application-count"},t.length||0," Application",1!==t.length?"s":"")),ot.createElement("ul",{className:"application-list"},t.map((t=>ot.createElement("li",{key:t},ot.createElement(Dn,{to:"home.project.application.insight.clusters",params:{project:e,application:t}},ot.createElement("a",null,t)))))))}};gg=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?mg(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&ug(t,n,r),r})([na],gg);var hg=Object.defineProperty,fg=Object.getOwnPropertyDescriptor;let vg=class extends ot.Component{constructor(){super(...arguments),this.handleResultClick=()=>{this.props.onResultClick&&this.props.onResultClick(this.props.categoryName)}}handleRemoveClicked(e,t,n){e.preventDefault(),this.props.onRemoveItem(t,n)}render(){const{categoryName:e,result:t,onRemoveItem:n}=this.props,a=!!n,i=t.params||{},r=t.account||i.account||i.accountId||i.accountName;return ot.createElement(Dn,{to:t.state,params:t.params},ot.createElement("a",{target:"_self",className:"list-group-item"},ot.createElement("span",{onClick:this.handleResultClick},ot.createElement(og,{displayName:t.displayName,account:r}),a&&ot.createElement("span",{className:"small clickable remove-result-link",onClick:n=>this.handleRemoveClicked(n,e,t.id)},ot.createElement(Ps,{value:"remove from history",placement:"left",delayShow:300},ot.createElement("span",{className:"glyphicon glyphicon-remove"}))))))}};vg=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?fg(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&hg(t,n,r),r})([na],vg);class Ag extends ot.Component{render(){const{podData:e}=this.props,{category:t}=e;return ot.createElement("div",{className:"col-md-4 category-container",key:t},ot.createElement("div",{className:"panel category row"},ot.createElement("div",{className:"summary"},ot.createElement("span",{className:"category-icon"},e.config.iconClass&&ot.createElement("span",{className:e.config.iconClass})),yr(t)," (",e.results.length,")"),ot.createElement("div",{className:"details-container list-group"},e.results.map((e=>ot.createElement(vg,{key:e.id,categoryName:t,result:e,onResultClick:this.props.onResultClick,onRemoveItem:this.props.onRemoveItem}))))))}}class Eg extends ot.Component{render(){const{results:e}=this.props;if(!e.length)return null;const t=e.find((e=>"projects"===e.category)),n=e.filter((e=>"projects"!==e.category)).sort(((e,t)=>e.category.localeCompare(t.category)));return ot.createElement("div",{className:"infrastructure-section container"},ot.createElement("div",{className:"recent-items"},ot.createElement("h3",null,"Recently viewed"),ot.createElement("div",{className:"row"},t&&ot.createElement("div",{className:"col-md-3"},ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-12"},t.results.map((e=>ot.createElement(gg,{key:e.id,id:e.id,projectName:m(e,"params.project"),applications:m(e,"extraData.config.applications",[]),onRemoveProject:this.props.onRemoveProject,onResultClick:this.props.onResultClick})))))),ot.createElement("div",{className:"col-md-"+(t?9:12)},ot.createElement("div",{className:"row"},n.map((e=>ot.createElement(Ag,{key:e.category,podData:e,onRemoveItem:this.props.onRemoveItem,onResultClick:()=>this.props.onResultClick(e.category)}))))))))}}class bg{static getItems(e){const t=[{state:"securityGroup",replacement:"firewall"},{state:"securityGroupDetails",replacement:"firewallDetails"}],n=this.cache.get(e)||[];return n.forEach((e=>{t.forEach((t=>{e.state&&e.state.includes(t.state)&&(e.state=e.state.replace(t.state,t.replacement))}))})),Y(n,"accessTime").reverse()}static addItem(e,t,n,a=[]){const i=this.getItems(e).slice(0,5),r=this.getExisting(i,n,a),s={params:n,state:t,accessTime:(new Date).getTime(),extraData:{},id:pr.generateUuid()};r&&i.splice(i.indexOf(r),1),5===i.length&&i.pop(),i.push(s),this.cache.put(e,i)}static removeItem(e,t){const n=this.getItems(e),a=n.find((e=>e.id===t));a&&(n.splice(n.indexOf(a),1),this.cache.put(e,n))}static removeLastItem(e){const t=this.getItems(e);t.length&&(t.splice(0,1),this.cache.put(e,t))}static addExtraDataToLatest(e,t){const n=this.getItems(e);n.length&&(n[0].extraData=t,this.cache.put(e,n))}static removeByAppName(e){const t="applications",n=this.getItems(t).filter((t=>t.params.application!==e));n&&this.cache.put(t,n)}static getExisting(e,t,n){return n&&n.length?e.find((e=>n.every((n=>e.params[n]===t[n])))):V(e,{params:fe(t,B)})}}bg.cache=Vp.createCache("history","user",{version:3,maxAge:bn.fromObject({days:90}).as("milliseconds")});const yg="spinnaker.core.history.recentHistory.service";function Cg(e){const{Component:t}=e,n=["projects","applications","loadBalancers","serverGroups","instances","securityGroups"],a=ot.useMemo((()=>hi.infrastructureSearchService.getSearcher()),[]);const{result:i,refresh:r}=Jo((async()=>{const e=async e=>{const t=a.getCategoryConfig(e),n=bg.getItems(e),i=await Promise.all(n.map((t=>function(e,t){const n={...t.params,...t.extraData};return a.formatRouteResult(e,n).then((e=>({...t,displayName:e})))}(e,t))));return{category:e,config:t,results:i}};return(await Promise.all(n.map((t=>e(t))))).filter((e=>e.results.length))}),[],[]),s=(e,t)=>{bg.removeItem(e,t),r()},o=e=>{Ui.log({category:"Primary Search",action:`Recent item selected from ${e}`})};return t?ot.createElement(t,{results:i,onRemoveItem:s,onRemoveProject:e=>s("projects",e),onResultClick:o}):ot.createElement(Eg,{results:i,onRemoveItem:s,onRemoveProject:e=>s("projects",e),onResultClick:o})}n(yg,[]).run(["$rootScope",e=>{e.$on("$stateChangeSuccess",((e,t,n)=>{var a;const i=null==(a=t.data)?void 0:a.history;if(i){const e=he(n||{},["debug","vis","trace"]),a=i.state||t.name;bg.addItem(i.type,a,e,i.keyParams)}}))}]);const wg=(e,t="")=>{if(!e||!e.length)return[];const n=t.toLowerCase();return e.slice().sort(((e,t)=>{if(e.displayName&&t.displayName){const a=e.displayName.toLowerCase().indexOf(n),i=t.displayName.toLowerCase().indexOf(n);return a===i?e.displayName.localeCompare(t.displayName):a-i}return 0}))};n("spinnaker.core.search.searchResult.searchRank.filter",[]).filter("searchRank",(()=>wg));var xg=Object.defineProperty,kg=Object.getOwnPropertyDescriptor,Bg=(e,t,n,a)=>{for(var i,r=a>1?void 0:a?kg(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&xg(t,n,r),r};let Sg=class extends ot.Component{constructor(e){super(e),this.query$=new At,this.destroy$=new At,this.handleWindowKeyup=e=>{const{target:t,key:n}=e;t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement||(({key:e,shiftKey:t})=>"/"===e&&t)(e)||"/"!==n||this.searchField.focus()},this.handleWindowClick=e=>{this.container.contains(e.target)||this.hideDropdown()},this.searchFieldBlurred=({relatedTarget:e})=>{this.container.contains(e)||this.hideDropdown()},this.searchFieldKeyUp=e=>{if(!this.state.showDropdown)return;const{key:t,shiftKey:n}=e;if("Escape"===t)Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"escape (from input)"}}),this.searchField.blur();else if("ArrowDown"===t)Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"arrow down (from input)"}}),e.preventDefault(),this.focusFirstSearchResult();else if("ArrowUp"===t)Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"arrow up (from input)"}}),e.preventDefault(),this.focusLastSearchResult();else if("Tab"===t)n||(Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"tab (from input)"}}),e.preventDefault(),this.focusFirstSearchResult());else if("Enter"===t){const{$state:t}=hi;if(this.state.categories){const e=cg(this.state.categories,this.state.query);e?(t.go("home.applications.application",{application:e.result.application}),this.hideDropdown()):t.go("home.search",pg(this.state.query))}e.preventDefault()}},this.focusFirstSearchResult=()=>{const e=this.resultRefs[0]&&this.resultRefs[0][0];e&&e.focus()},this.focusLastSearchResult=()=>{const e=T(this.resultRefs),t=e[e.length-1];t&&t.focus()},this.navigateResult=e=>{const{key:t,target:n}=e;if("Escape"===t)Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"escape (from result)"}}),this.setState({showDropdown:!1,showMinLengthWarning:!1,query:"",querying:!1,categories:null});else if("Tab"===t){const e=T(this.resultRefs);if(n===e[e.length-1])return Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"tab (from result)"}}),void this.hideDropdown()}else if("ArrowDown"===t){Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"down (from result)"}});const t=T(this.resultRefs),a=t.indexOf(n),i=t[a+1];i&&i.focus(),e.preventDefault()}else if("ArrowUp"===t){Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"up (from result)"}});const t=T(this.resultRefs),a=t.indexOf(n),i=t[a-1];i&&i.focus(),e.preventDefault()}else"Enter"===t&&(Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"enter (from result)"}}),setTimeout((()=>this.hideDropdown()),100))},this.queryChanged=({target:e})=>{const t=e.value,{showMinLengthWarning:n}=this.state,a=!!t&&t.length<3&&n;this.setState({query:t,querying:!1,showMinLengthWarning:a,categories:null},(()=>{t.length>=3?this.query$.next(t.trim()):a||this.considerMinLengthWarning()}))},this.showDropdown=()=>{this.setState({showDropdown:!0})},this.hideDropdown=()=>{this.setState({showDropdown:!1})},this.clearFilters=e=>{Wd.filterService.overrideFiltersForUrl(e)},this.SpinnerDropdown=()=>ot.createElement("ul",{className:"dropdown-menu",role:"menu"},ot.createElement("li",{className:"horizontal middle center spinner-section"},ot.createElement(bs,{size:"small"}))),this.MinLengthWarning=()=>ot.createElement("ul",{className:"dropdown-menu",role:"menu"},ot.createElement("li",{className:"horizontal middle center spinner-section"},ot.createElement("span",{className:"error-message"},"Please enter at least ",3," characters"))),this.RecentlyViewed=()=>ot.createElement(Cg,{limit:5,Component:({results:e})=>(this.resultRefs=e.map((()=>[])),ot.createElement(lg,{categories:e,onItemKeyDown:this.navigateResult,onResultClick:e=>{this.hideDropdown(),Ui.log({category:"Global Search",action:`Recent item selected from ${e}`})},resultRef:(e,t,n)=>{this.resultRefs[e]&&(this.resultRefs[e][t]=n)}}))}),this.SearchResults=()=>{const{query:e,categories:t}=this.state;return ot.createElement(dg,{categories:t,query:e,onItemKeyDown:this.navigateResult,onResultClick:e=>{Ui.log({category:"Global Search",action:"Result Selected"}),this.hideDropdown(),this.clearFilters(e)},onSeeMoreClick:()=>{Ui.log({category:"Global Search",action:"See all results selected"}),this.hideDropdown()},resultRef:(e,t,n)=>{this.resultRefs[e]&&(this.resultRefs[e][t]=n)}})},this.state={showDropdown:!1,showMinLengthWarning:!1,query:"",querying:!1,categories:null}}componentDidMount(){window.addEventListener("keyup",this.handleWindowKeyup),window.addEventListener("click",this.handleWindowClick);const{infrastructureSearchService:e}=hi,t=e.getSearcher();this.query$.pipe(Qt(300),Pt((e=>{Ui.log({category:"Global Search",action:"Query",data:{label:e}}),this.setState({querying:!0})})),Dt((e=>vt(t.query(e)))),St((e=>e.filter((({results:e})=>e.length)).map((e=>({...e,results:wg(e.results,e.query).slice(0,5)}))).sort(((e,t)=>e.type.order-t.type.order)))),It(this.destroy$)).subscribe((e=>{this.resultRefs=e.map((()=>[])),this.setState({querying:!1,categories:e})}))}componentWillUnmount(){window.removeEventListener("keyup",this.handleWindowKeyup),window.removeEventListener("click",this.handleWindowClick),this.destroy$.next()}considerMinLengthWarning(){const{query:e}=this.state;this.setState({showMinLengthWarning:!!e&&e.length<3})}renderDropdown(){const{query:e,querying:t,showMinLengthWarning:n,categories:a}=this.state,{SpinnerDropdown:i,MinLengthWarning:r,SearchResults:s,RecentlyViewed:o}=this;return e?t?ot.createElement(i,null):e.length<3&&n?ot.createElement(r,null):a?ot.createElement(s,null):null:ot.createElement(o,null)}render(){const{showDropdown:e,query:t}=this.state;return ot.createElement("li",{ref:e=>this.container=e,className:"global-search open"},ot.createElement("form",{className:"right global-search",onSubmit:e=>e.preventDefault()},ot.createElement("div",{className:"form-group has-feedback"},ot.createElement("div",{className:"input-group"},ot.createElement("input",{ref:e=>this.searchField=e,type:"search",className:"form-control flat input-sm no-border",placeholder:"Search",value:t,onBlur:this.searchFieldBlurred,onFocus:this.showDropdown,onChange:this.queryChanged,onKeyUp:this.searchFieldKeyUp}),ot.createElement(Ps,{placement:"right",template:ot.createElement("span",null,"Keyboard shortcut: ",ot.createElement("span",{className:"keyboard-key"},"/"))},ot.createElement("i",{className:"glyphicon glyphicon-search form-control-feedback"}))))),e&&this.renderDropdown())}};Bg([da(300)],Sg.prototype,"considerMinLengthWarning",1),Sg=Bg([na],Sg);class Mg{constructor(e){this.$stateRegistryProvider=e,this.registeredStates=[]}setNestedState(e,t=!1){const n=r(e);t||(this.fixStateName(n),this.fixStateViews(n),n.parent=null),this.registeredStates.includes(n.name)||(this.registeredStates.push(n.name),this.$stateRegistryProvider.register(n)),n.children&&n.children.length&&n.children.forEach((e=>{e.parent=n.name,this.setNestedState(e,t)}))}fixStateName(e){e.parent&&(e.name=`${e.parent}.${e.name}`)}fixStateViews(e){const t=e.views||{},n=[];Object.keys(t).forEach((a=>{const i=a.match("../");if(i&&i.length&&"string"==typeof e.parent){const r=e.parent.split(".").slice(0,-1-i.length).join(".")+".";t[a.replace(/(..\/)+/,r)]=t[a],n.push(a)}})),n.forEach((e=>delete t[e]))}$get(){return this}}Mg.$inject=["$stateRegistryProvider"];const Ng="spinnaker.core.navigation.stateHelper.provider";n(Ng,[]).provider("stateHelper",Mg);oi(".secondary-panel > div {\n flex: 1 1 auto;\n overflow-y: auto;\n overflow-x: hidden;\n}\n.secondary-panel .nav {\n margin: 52px 24px 32px 4px;\n}\n.secondary-panel .nav h3 {\n margin-right: 10px;\n font-weight: 600;\n}\n.secondary-panel .nav h4 {\n font-weight: 600;\n text-transform: uppercase;\n margin-bottom: 0;\n font-size: 16px;\n}\n.secondary-panel .nav .list-group-item.active {\n font-weight: 700;\n}\n.secondary-panel .nav .nav-search {\n margin-top: 10px;\n}\n.secondary-panel .nav-content .header {\n border-bottom: none;\n padding: 0;\n position: relative;\n z-index: 10;\n background-color: var(--color-alabaster);\n}\n.secondary-panel .nav-content .header h3 {\n display: inline-block;\n font-weight: 600;\n}\n.secondary-panel .nav-content .header .actions {\n display: inline-block;\n}\n.secondary-panel .nav-content .header .filters {\n display: inline-block;\n}\n.secondary-panel .nav-content .header .filters label {\n font-weight: normal;\n margin-bottom: 0;\n margin-left: 10px;\n}\n.secondary-panel .nav-content .header.header-clusters {\n padding-top: 0;\n}\n.secondary-panel .nav-content .header.header-clusters h3 {\n padding-bottom: 5px;\n}\n@media (min-width: 708px) and (max-width: 992px) {\n .secondary-panel .nav-content .header.header-clusters h3 {\n font-size: 110%;\n }\n}\n.secondary-panel .nav-content .header.header-clusters .filters {\n height: 40px;\n line-height: 40px;\n vertical-align: top;\n font-size: 90%;\n}\n.secondary-panel .nav-content .content {\n padding: 0 0 10px;\n}\n@media (min-width: 708px) and (max-width: 992px) {\n .secondary-panel .nav-content .content {\n padding: 0 5px;\n }\n}\n.nav.navbar-nav .remove-border-top:hover,\n.nav.navbar-nav .remove-border-top:active {\n border-top-color: transparent;\n transition: none;\n}\n.nav.navbar-nav .glyphicon {\n padding-right: 4px;\n}\n");class Dg{constructor(e,t){this.$urlRouterProvider=e,this.stateHelperProvider=t,this.root={name:"home",abstract:!0,params:{allowModalToStayOpen:{dynamic:!0,value:null}},url:"?{debug:boolean}&{vis:query}&{trace:query}",dynamic:!0,children:[]}}addToRootState(e){this.root.children.find((t=>t.name===e.name))||this.root.children.push(e),this.setStates()}setStates(){this.stateHelperProvider.setNestedState(this.root)}addRewriteRule(e,t){this.$urlRouterProvider.when(e,t)}buildDynamicParams(e){return e.reduce(((e,t)=>{const n=t.param||t.model;return e[n]={type:t.type||"string",dynamic:!0},t.array&&(e[n].array=!0),e}),{})}paramsToQuery(e){return e.map((e=>e.param||e.model)).join("&")}$get(){return this}}Dg.$inject=["$urlRouterProvider","stateHelperProvider"];const Ig={decode:e=>{if(e){const t={};return e.split(",").map((e=>e.replace(/%2c/g,","))).forEach((e=>t[e]=!0)),t}return{}},encode:e=>{if(e){const t=Object.keys(e).filter((t=>e[t]));return t.length?t.sort().map((e=>e.replace(/,/g,"%2c"))).join(","):null}return null},equals:(e,t)=>E(e,t),is:e=>w(e)},Fg={decode:e=>!e||"true"!==e,encode:e=>e?null:"true",equals:(e,t)=>e===t,is:()=>!0},Tg={decode:e=>!!e&&"true"===e,encode:e=>e?"true":null,equals:(e,t)=>e===t,is:()=>!0},Qg={decode:e=>({key:e}),encode:e=>e?e.key:null,equals:(e,t)=>E(e,t),is:e=>w(e)},Pg="spinnaker.core.navigation.state.config.provider";n(Pg,[ca,Ng]).provider("stateConfig",Dg).config(["$urlRouterProvider",e=>{e.otherwise("/"),e.when("/{path:.*}/",["$match",e=>"/"+e.path])}]).config(["$urlServiceProvider",e=>{e.config.type("trueKeyObject",Ig),e.config.type("inverse-boolean",Fg),e.config.type("boolean",Tg),e.config.type("sortKey",Qg)}]);class Rg{static forEachSorted(e,t,n){Object.keys(e).sort().forEach((a=>{t.call(n,e[a],a)}))}static encodeUriQuery(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}static buildUrl(e,t={}){if(!t)return e;const n=[];return Rg.forEachSorted(t,((e,t)=>{if(null===e||B(e))return;let a;a=Array.isArray(e)?e:[e],a.forEach((e=>{j(e)&&(e=ve(e)?e.toISOString():JSON.stringify(e)),n.push(`${Rg.encodeUriQuery(t)}=${Rg.encodeUriQuery(e)}`)}))})),n.length>0&&e&&(e+=(e.includes("?")?"&":"?")+n.join("&")),e}}class Ug{constructor(e){this.$state=e}createCloneTask(e){const t=e.getValueFor("deploy.server.groups"),n=e.getValueFor("deploy.account.name");let a;if(t&&Object.keys(t)[0]){const e=Object.keys(t),i=t[e[0]][0];a=!!i&&(!!i.match(gd.VERSION_PATTERN)&&this.$state.href("home.applications.application.insight.clusters.serverGroup",{application:i.split("-")[0],cluster:i.replace(gd.VERSION_PATTERN,""),account:n,accountId:n,region:e,serverGroup:i,q:i}))}else a=!1;return a}asgTask(e){const t=e.getValueFor("asgName"),n=e.getValueFor("credentials");let a;return a=!!t&&(t.match(gd.VERSION_PATTERN)?this.$state.href("home.applications.application.insight.clusters.serverGroup",{application:t.split("-")[0],cluster:t.replace(gd.VERSION_PATTERN,""),account:n,accountId:n,region:e.getValueFor("regions")[0],serverGroup:t}):"/"),a}static buildFromMetadata(e){const t=$m.urlBuilder.getBuilder(e.type);let n;return n=t?t.build(e,hi.$state):"/",n}buildFromTask(e){const t=e.name||"";function n(e){return t.includes(e)}let a;switch(!0){case n("Destroy Server Group"):a=!1;break;case n("Disable Server Group"):case n("Enable Server Group"):case n("Resize Server Group"):a=this.asgTask(e);break;case n("Create Cloned Server Group"):case n("Create New Server Group"):a=this.createCloneTask(e);break;default:a=!1}return a}}$m.urlBuilder.register("applications",new class{build(e,t){let n;return n=e.project?t.href("home.project.application",{application:e.application,project:e.project},{inherit:!1}):t.href("home.applications.application",{application:e.application},{inherit:!1}),n}}),$m.urlBuilder.register("clusters",new class{build(e,t){const n={acct:e.account};let a;return e.cluster&&(n.q=`cluster:${e.cluster}`),e.stack&&(n.stack=e.stack),e.detail&&(n.q=`detail:${e.detail}`),e.region&&(n.reg=e.region),a=e.project?t.href("home.project.application.insight.clusters",{application:e.application,project:e.project},{inherit:!1}):t.href("home.applications.application.insight.clusters",{application:e.application},{inherit:!1}),Rg.buildUrl(a,n)}}),$m.urlBuilder.register("instances",new class{build(e,t){let n;if(e.application){const a=t.href("home.applications.application.insight.clusters.instanceDetails",{application:e.application,instanceId:e.instanceId,provider:e.provider},{inherit:!1});n=Rg.buildUrl(a,{q:e.serverGroup,acct:e.account,reg:e.region})}else n=t.href("home.instanceDetails",{account:e.account,region:e.region,instanceId:e.instanceId,provider:e.provider});return n}}),$m.urlBuilder.register("loadBalancers",new class{build(e,t){const n=t.href("home.applications.application.insight.loadBalancers.loadBalancerDetails",{application:e.application,name:e.loadBalancer,region:e.region||e.namespace,accountId:e.account,vpcId:e.vpcId,provider:e.provider},{inherit:!1});return Rg.buildUrl(n,{q:e.loadBalancer,reg:e.region,acct:e.account})}}),$m.urlBuilder.register("projects",new class{build(e,t){return t.href("home.project.dashboard",{project:e.name},{inherit:!1})}}),$m.urlBuilder.register("securityGroups",new class{build(e,t){const n=t.href("home.firewallDetails",{accountId:e.account,region:e.region,name:e.name,vpcId:e.vpcId,provider:e.provider});return Rg.buildUrl(n)}}),$m.urlBuilder.register("serverGroups",new class{build(e,t){const n=e.project?"project":"applications",a=t.href(`home.${n}.application.insight.clusters.serverGroup`,{application:e.application,accountId:e.account,region:e.region,serverGroup:e.serverGroup,provider:e.provider,project:e.project},{inherit:!1});return Rg.buildUrl(a,{q:e.serverGroup,acct:e.account,reg:e.region})}}),$m.urlBuilder.register("task",new class{build(e,t){return t.href("home.applications.application.tasks.taskDetails",{application:e.application,taskId:e.taskId},{inherit:!1})}}),$m.urlBuilder.register("tasks",new class{build(e,t){return t.href("home.applications.application.tasks",{application:e.application},{inherit:!1})}});class zg{static parseQueryString(e=""){const t={};return e.split("&").forEach((e=>{let n,a,i;e&&(a=e=e.replace(/\+/g,"%20"),n=e.indexOf("="),-1!==n&&(a=e.substring(0,n),i=e.substring(n+1)),a=this.tryDecodeURIComponent(a),null!==a&&(i=!(i&&i.length>0)||this.tryDecodeURIComponent(i),void 0===t[a]?t[a]=i:Array.isArray(t[a])?t[a].push(i):t[a]=[t[a],i]))})),t}static tryDecodeURIComponent(e){try{return decodeURIComponent(e)}catch(e){return null}}}var Gg,jg;(jg=Gg||(Gg={}))[jg.INITIAL=0]="INITIAL",jg[jg.SEARCHING=1]="SEARCHING",jg[jg.FINISHED=2]="FINISHED",jg[jg.NO_RESULTS=3]="NO_RESULTS",jg[jg.ERROR=4]="ERROR";class Lg{constructor(){this.types=[]}register(e){this.types.push(e)}get(e){return this.types.find((t=>t.id===e))}getAll(){return this.types.slice().sort(((e,t)=>e.order-t.order))}getSearchCategories(){return this.types.map((e=>e.id))}}const Og=new Lg;class Yg{static search(e){if(re(e))return vt(this.EMPTY_RESULTS);const t={...e},n=Og.getAll(),a=new At,i=(t,n)=>{const a=Ae(t.results.map((e=>((e,t)=>({...e,href:Ug.buildFromMetadata(e),displayName:t.displayFormatter(e)}))(e,n))).filter((e=>e.href)),(e=>e.href)),i=e.key;return{type:n,results:a,status:Gg.FINISHED,query:i}};return vt(n).pipe(Rt((e=>e.search(t,a).pipe(St((t=>i(t,e))),Ut((t=>((e,t)=>Et({error:e,type:t,results:[],status:Gg.ERROR}))(t,e)))))),Pt((e=>a.next(e))),zt((()=>a.complete())))}}Yg.EMPTY_RESULTS=Og.getAll().map((e=>({type:e,results:[],status:Gg.FINISHED})));oi(".glyphicon.healthy,\n.fa.healthy {\n color: var(--color-success);\n}\n.glyphicon.unhealthy,\n.fa.unhealthy {\n color: var(--color-danger);\n}\n.glyphicon.unknown,\n.fa.unknown {\n color: var(--color-dovegray);\n}\nhealth-counts {\n display: inherit;\n}\n.health-counts .instance-health-counts .glyphicon {\n top: 0;\n}\n.health-counts .instance-health-counts .healthy {\n color: var(--color-success);\n}\n.health-counts .instance-health-counts .unhealthy {\n color: var(--color-alert);\n}\n.health-counts .instance-health-counts .dead {\n color: var(--color-danger);\n}\n");class $g extends ot.Component{constructor(e){super(e),this.state=this.calculatePercent(e.container)}calculatePercent(e){const t=(e=e||{}).up||0,n=e.down||0,a=e.succeeded||0,i=e.failed||0,r=e.unknown||0,s=e.starting||0,o=e.total||t+n+r+s+a+i,l=o?Math.floor(100*(t+a)/o):void 0;return{percentLabel:void 0===l?"n/a":l+"%",statusClass:void 0===l?"disabled":100===l?"healthy":l<100&&l>0?"unhealthy":0===l?"dead":"disabled",total:o}}componentWillReceiveProps(e){E(e.container,this.props.container)||this.setState(this.calculatePercent(e.container))}render(){const e=ot.createElement("span",null,ot.createElement("table",{className:"tooltip-table"},ot.createElement("tbody",null,ot.createElement("tr",null,ot.createElement("td",null,ot.createElement("span",{className:"glyphicon glyphicon-Up-triangle healthy"})),ot.createElement("td",null,"Up")),ot.createElement("tr",null,ot.createElement("td",null,ot.createElement("span",{className:"glyphicon glyphicon-Down-triangle dead"})),ot.createElement("td",null,"Down")),ot.createElement("tr",null,ot.createElement("td",null,ot.createElement("span",{className:"glyphicon glyphicon-Unknown-triangle unknown"})),ot.createElement("td",null,"In transition or no status reported")),ot.createElement("tr",null,ot.createElement("td",null,ot.createElement("span",{className:"glyphicon glyphicon-minus disabled small"})),ot.createElement("td",null,"Out of Service")),ot.createElement("tr",null,ot.createElement("td",null,ot.createElement("span",{className:"glyphicon glyphicon-Succeeded-triangle small"})),ot.createElement("td",null,"Terminated successfully")),ot.createElement("tr",null,ot.createElement("td",null,ot.createElement("span",{className:"glyphicon glyphicon-Failed-triangle small"})),ot.createElement("td",null,"Terminated unsuccessfully")))),ot.createElement("span",null,this.props.additionalLegendText)),t=this.props.container,n=this.state.percentLabel;let a=!1;const i=[];t.up&&(i.push(ot.createElement("span",{key:"up"}," ",t.up," ",ot.createElement("span",{className:"glyphicon glyphicon-Up-triangle healthy"}))),a=!0),t.down&&t.down!==t.missingHealthCount&&(a&&i.push(ot.createElement("span",{key:"downslash"}," / ")),i.push(ot.createElement("span",{key:"down"}," ",t.down," ",ot.createElement("span",{className:"glyphicon glyphicon-Down-triangle dead"}))),a=!0),(t.unknown||t.starting)&&(a&&i.push(ot.createElement("span",{key:"unknownslash"}," / ")),i.push(ot.createElement("span",{key:"unknown"}," ",t.unknown+t.starting," ",ot.createElement("span",{className:"glyphicon glyphicon-Unknown-triangle unknown"}))),a=!0),t.outOfService&&(a&&i.push(ot.createElement("span",{key:"outOfServiceslash"}," / ")),i.push(ot.createElement("span",{key:"outOfService"}," ",t.outOfService," ",ot.createElement("span",{className:"glyphicon glyphicon-OutOfService-triangle disabled small"}))),a=!0),t.succeeded&&(a&&i.push(ot.createElement("span",{key:"succeededslash"}," / ")),i.push(ot.createElement("span",{key:"succeeded"}," ",t.succeeded," ",ot.createElement("span",{className:"glyphicon glyphicon-Succeeded-triangle disabled small"}))),a=!0),t.failed&&(a&&i.push(ot.createElement("span",{key:"failedslash"}," / ")),i.push(ot.createElement("span",{key:"failed"}," ",t.failed," ",ot.createElement("span",{className:"glyphicon glyphicon-Failed-triangle disabled small"}))));const r=this.props.className||"";return"n/a"!==n?ot.createElement("span",{className:`health-counts ${r}`},ot.createElement(Ps,{template:e,placement:this.props.legendPlacement},ot.createElement("span",{className:"counter instance-health-counts"},i,t.unknown!==this.state.total&&ot.createElement("span",null," ",": ",ot.createElement("span",{className:this.state.statusClass},n))))):t.outOfService?ot.createElement("span",{className:`health-counts ${r}`},ot.createElement(Ps,{template:e},ot.createElement("span",{className:"counter instance-health-counts"},ot.createElement("span",null,t.outOfService," ",ot.createElement("span",{className:"glyphicon glyphicon-minus disabled small"}))))):null}}$g.defaultProps={legendPlacement:"top",container:{}};class Hg{static setDataSourceOrder(e){this.dataSourceOrder=e,this.sortDataSources()}static sortDataSources(){let e=this.defaultDataSourceOrder;this.dataSourceOrder.length&&(e=this.dataSourceOrder),this.dataSources.forEach((t=>{e.includes(t.key)||e.push(t.key)})),this.dataSources.sort(((t,n)=>e.indexOf(t.key)-e.indexOf(n.key)))}static registerDataSource(e){this.dataSources.push(e),this.sortDataSources()}static getDataSources(){return p(this.dataSources)}static removeDataSource(e){this.dataSources=this.dataSources.filter((t=>t.key!==e))}static clearDataSources(){this.dataSources.length=0}}Hg.defaultDataSourceOrder=["environments","serverGroups","executions","loadBalancers","securityGroups","tasks","config"],Hg.dataSources=[],Hg.dataSourceOrder=[];class Vg{static resetViewedApplications(){this.viewedApplications.length=0}static isInferredApplication(e){return!e.attributes||!e.attributes.email}static checkIfInferredAndWarn(e){this.check(e)&&this.warn(e.name)}static check(e){const{name:t}=e,n=this.viewedApplications.includes(t);return this.viewedApplications.push(t),!n&&this.isInferredApplication(e)}static warn(e){to.publish({key:"inferredApplicationWarning",action:"create",content:ot.createElement("div",null,"The application ",ot.createElement("b",null,e)," has not been ",ot.createElement("a",{href:`#/applications/${e}/config`},"configured"),".")})}}Vg.viewedApplications=[];class Jg{static listApplications(){return Si("/applications").useCache().get()}static getApplicationAttributes(e){return Si("/applications").path(e).query({expand:!1}).get().then((e=>(this.splitAttributes(e.attributes,["accounts","cloudProviders"]),e.attributes)))}static getApplicationPermissions(e){return Si("/applications").path(e).query({expand:!1}).get().then((e=>e.attributes.permissions))}static getApplication(e,t=!0){return Si("/applications").path(e).query({expand:t}).get().then((e=>{const t=Hg.getDataSources(),n=new Qh(e.name,eo.createScheduler(),t);return n.attributes=e.attributes,this.splitAttributes(n.attributes,["accounts","cloudProviders"]),this.setDisabledDataSources(n),n.refresh(),n}))}static splitAttributes(e,t){t.forEach((t=>{e[t]?Array.isArray(e[t])||(e[t]=e[t].split(",").map((e=>e.trim()))):e[t]=[]}))}static setDisabledDataSources(e){const t=e.dataSources,n=e.attributes.dataSources;n?t.forEach((t=>{t.optional&&(t.optIn?this.setDataSourceDisabled(t,e,!n.enabled.includes(t.key)):this.setDataSourceDisabled(t,e,n.disabled.includes(t.key)))})):(t.filter((e=>e.optIn)).forEach((t=>this.setDataSourceDisabled(t,e,!0))),Vg.isInferredApplication(e)&&t.filter((e=>e.requireConfiguredApp)).forEach((t=>this.setDataSourceDisabled(t,e,!0)))),t.filter((e=>e.requiresDataSource)).forEach((n=>{const a=t.find((e=>e.key===n.requiresDataSource));a&&this.setDataSourceDisabled(n,e,a.disabled)}))}static setDataSourceDisabled(e,t,n){e.disabled=n,e.badge&&(t.dataSources.find((t=>t.key===e.badge)).disabled=n)}}function Wg(e){const{result:t,status:n}=Jo((()=>Jg.listApplications().then((e=>e.map((e=>e.name)).sort()))),[],[]),a=pt((()=>t.map((e=>({label:e,value:e})))),[t]),i=qo((e=>{if("PENDING"===n)return Ur("Loading apps...");const a=(e?"string"==typeof e?[e]:e:[]).find((e=>!t.includes(e)));return a?zr(`Application ${a} does not exist.`):void 0}));return Do(e.validation,i,[t,n]),ot.createElement(qr,{...e,mode:"VIRTUALIZED",options:a,isLoading:"PENDING"===n})}class Kg{static get BACKSPACE(){return"Backspace"}static get DOWN_ARROW(){return"ArrowDown"}static get DELETE(){return"Delete"}static get ENTER(){return"Enter"}static get ESCAPE(){return"Escape"}static get LEFT_ARROW(){return"ArrowLeft"}static get RIGHT_ARROW(){return"ArrowRight"}static get UP_ARROW(){return"ArrowUp"}}class qg extends ot.Component{constructor(e){super(e),this.handleClusterChange=e=>{this.props.onChange&&this.props.onChange({clusterName:e.currentTarget.value})},this.toggleFreeFormClusterField=()=>this.setState({freeFormClusterField:!this.state.freeFormClusterField});const{clusters:t,model:n}=this.props,a=!(Array.isArray(t)&&t.some((e=>e===n))),i=null!=n||""!==(n||"").trim();this.state={freeFormClusterField:!!i&&a}}render(){return ot.createElement("div",null,ot.createElement("div",null,!this.state.freeFormClusterField&&ot.createElement("select",{className:"form-control input-sm",onChange:this.handleClusterChange,required:this.props.required,value:this.props.model||""},ot.createElement("option",{value:""},"-- select cluster --"),(this.props.clusters||[]).map((e=>ot.createElement("option",{key:e,value:e},e)))),this.state.freeFormClusterField&&ot.createElement("input",{type:"text",className:"form-control input-sm",required:this.props.required,value:this.props.model||"",onChange:this.handleClusterChange,onBlur:this.handleClusterChange})),ot.createElement("div",{className:"pull-right"},!this.state.freeFormClusterField&&ot.createElement("a",{className:"clickable",onClick:this.toggleFreeFormClusterField},"Toggle for text input"),this.state.freeFormClusterField&&ot.createElement("a",{className:"clickable",onClick:this.toggleFreeFormClusterField},"Toggle for list of existing clusters")))}}class Xg extends ot.Component{render(){const{matches:e}=this.props;return e&&e.length?ot.createElement("ul",{className:"nostyle"},e.map(((e,t)=>ot.createElement("li",{key:t},ot.createElement(ns,{account:e.account}),ot.createElement("span",{className:"break-word"},e.name),e.regions&&e.regions.length&&ot.createElement("i",null," in ",e.regions.join(", ")))))):ot.createElement("div",null,"(no matches)")}}const Zg="spinnaker.core.widget.cluster.clusterMatches.component";n(Zg,[]).component("clusterMatches",yn(jl(Xg,"clusterMatches"),["matches"]));class _g extends ot.Component{constructor(e){super(e),this.valueChanged=({target:{value:e}})=>{const t=parseInt(e,10);this.props.onChange(isNaN(t)?e:t)},this.state={expressionActive:C(e.value),glowing:!1}}componentWillReceiveProps(e){const t=C(e.value);this.state.expressionActive!==t&&this.setState({expressionActive:t})}setExpressionActive(e){this.setState({expressionActive:e})}setGlow(e){this.setState({glowing:e})}render(){const{expressionActive:e,glowing:t}=this.state,{value:n,min:a,max:i,required:r=!1,error:s,disabled:o}=this.props;return ot.createElement("div",{className:"navbar-form",style:{padding:0,margin:0,display:"inline-block"}},ot.createElement(Ps,{value:s,placement:"right"},ot.createElement("div",{className:`button-input${t&&!s?" focus":""}${s?" invalid":""}`},ot.createElement("span",{className:"btn-group btn-group-xs",role:"group"},ot.createElement("button",{type:"button",disabled:o,className:"btn btn-default "+(e?"":"active"),onClick:()=>this.setExpressionActive(!1),onFocus:()=>this.setGlow(!0),onBlur:()=>this.setGlow(!1)},ot.createElement(Ps,{value:"Toggle to enter number"},ot.createElement("span",null,"Num"))),ot.createElement("button",{type:"button",disabled:o,className:"btn btn-default "+(e?"active":""),onClick:()=>this.setExpressionActive(!0),onFocus:()=>this.setGlow(!0),onBlur:()=>this.setGlow(!1)},ot.createElement(Ps,{value:"Toggle to enter expression"},ot.createElement("span",null,"${","β¦","}")))),ot.createElement("input",{type:e?"text":"number",disabled:o,className:"form-control borderless inline-"+(e?"text":"number"),value:n,min:a,max:i,onChange:this.valueChanged,onFocus:()=>this.setGlow(!0),onBlur:()=>this.setGlow(!1),required:r}))))}}var eh,th;(th=eh||(eh={}))[th.BACKSPACE=0]="BACKSPACE",th[th.REMOVE=1]="REMOVE";class nh extends ot.Component{constructor(){super(...arguments),this.refCallback=e=>{e&&this.props.onCreate(e)},this.handleFocus=()=>{this.props.onFocus()},this.handleBlur=()=>{this.props.onBlur()},this.handleKeyUp=e=>{switch(e.key){case Kg.BACKSPACE:case Kg.DELETE:this.props.onDelete(this.props.tag,0);break;case Kg.LEFT_ARROW:case Kg.RIGHT_ARROW:this.props.onKeyUp(this.props.tag,e.key)}},this.handleRemoveClick=()=>{this.props.onDelete(this.props.tag,1)}}render(){const{key:e,text:t}=this.props.tag;return ot.createElement("div",{ref:this.refCallback,className:"tag",onBlur:this.handleBlur,onFocus:this.handleFocus,onKeyUp:this.handleKeyUp,tabIndex:-1},ot.createElement("div",{className:"tag__category"},e.toLocaleUpperCase()),ot.createElement("div",{className:"tag__label"},t),ot.createElement("div",{className:"tag__remove"},ot.createElement("i",{className:"fa fa-times-circle",onClick:this.handleRemoveClick})))}}nh.defaultProps={onBlur:()=>{},onCreate:()=>{},onDelete:()=>{},onFocus:()=>{},onKeyUp:()=>{}};oi(".tag-list {\n align-items: center;\n display: flex;\n}\n.tag-list .tag {\n align-items: center;\n cursor: default;\n display: flex;\n font-size: 14px;\n margin-right: 10px;\n}\n.tag-list .tag .tag__category {\n background-color: var(--color-primary);\n border-radius: 4px 0 0 4px;\n color: var(--color-white);\n padding: 8px;\n}\n.tag-list .tag .tag__label {\n background-color: var(--color-accent-g2);\n color: var(--color-primary);\n flex: 1 0 auto;\n padding: 8px;\n}\n.tag-list .tag .tag__remove {\n background-color: var(--color-accent-g2);\n border-radius: 0 4px 4px 0;\n color: var(--color-primary);\n padding: 8px;\n}\n.tag-list .tag .tag__remove .fa.fa-times-circle {\n cursor: pointer;\n}\n");class ah extends ot.Component{constructor(){super(...arguments),this.tagElements=[],this.handleBlur=()=>{this.props.onBlur()},this.handleCreate=e=>{this.tagElements.push(e),this.props.onUpdate(this.tagElements)},this.handleDelete=(e,t)=>{const n=this.findIndex(e);switch(this.tagElements.splice(n,1),this.props.onUpdate(this.tagElements),t){case eh.BACKSPACE:this.tagElements.length?(0===n?this.tagElements[0].focus():n<=this.tagElements.length-1?this.tagElements[n].focus():this.tagElements[n-1].focus(),this.props.onDelete(e,!1)):this.props.onDelete(e,!0);break;case eh.REMOVE:this.props.onDelete(e,!0)}Ui.log({category:"Infrastructure Search Tags",action:"Individual tag removed"})},this.handleFocus=()=>{this.props.onFocus()},this.handleKeyUp=(e,t)=>{const n=this.findIndex(e);switch(t){case Kg.LEFT_ARROW:0===n?this.props.onKeyUp():this.tagElements[n-1].focus();break;case Kg.RIGHT_ARROW:n===this.tagElements.length-1?this.props.onKeyUp():this.tagElements[n+1].focus()}}}findIndex(e){return this.props.tags.findIndex((t=>e===t))}render(){const e=this.props.tags||[];return ot.createElement("div",{className:"tag-list"},e.map((e=>ot.createElement(nh,{key:[e.key,e.text].join("|"),tag:e,onBlur:this.handleBlur,onCreate:this.handleCreate,onDelete:this.handleDelete,onFocus:this.handleFocus,onKeyUp:this.handleKeyUp}))))}}ah.defaultProps={onBlur:()=>{},onDelete:()=>{},onFocus:()=>{},onKeyUp:()=>{},onUpdate:()=>{}};class ih extends ot.Component{render(){return ot.createElement("div",{className:"table-header"},this.props.children)}}class rh extends ot.Component{render(){return ot.createElement("div",{className:"table-row small"},this.props.children)}}class sh extends ot.Component{render(){return ot.createElement("div",{className:"table-contents flex-fill"},this.props.children)}}const oh=e=>`col-${Ee(e)}`;class lh extends ot.Component{render(){const{col:e}=this.props;return ot.createElement("div",{className:oh(e.key)},e.label||N(e.key))}}class ch extends ot.Component{render(){const{item:e,col:t,defaultValue:n,children:a}=this.props;return ot.createElement("div",{className:oh(t.key)},a||e[t.key]||n)}}class ph extends ot.Component{render(){const{item:e,col:t}=this.props;return ot.createElement("div",{className:oh(t.key)},ot.createElement("a",{href:e.href},e[t.key]))}}class dh extends ot.Component{render(){const{item:e,col:t}=this.props,n=e[t.key];if(!n)return ot.createElement("div",{className:oh(t.key)},"-");const a=(Array.isArray(n)?n:n.split(",")).sort();return ot.createElement("div",{className:oh(t.key)},a.map((e=>ot.createElement(ns,{key:e,account:e}))))}}class uh extends ot.Component{cellContent(e){switch(e){case void 0:return ot.createElement(bs,{size:"small"});case null:return ot.createElement("span",null,"?");default:return ot.createElement($g,{container:e})}}render(){const{item:e,col:t}=this.props;return ot.createElement("div",{className:oh(t.key)},this.cellContent(e[t.key]))}}class mh extends ot.Component{render(){const{isActive:e,resultSet:t}=this.props,{type:n,results:a,status:i,error:r}=t,s=n.iconClass,o=a.length,l=o<hd.DEFAULT_PAGE_SIZE?`${o}`:`${o}+`,c=()=>{switch(i){case Gg.SEARCHING:return ot.createElement(bs,{size:"small"});case Gg.ERROR:return ot.createElement(Ps,{value:r&&r.toString()},ot.createElement("i",{className:"fa fa-exclamation-triangle"}));default:return a.length?ot.createElement("div",{className:"badge"},l):ot.createElement("div",{className:"badge faded"},l)}},p=e?"search-group--focus":"search-group--blur";return ot.createElement("div",{className:`flex-container-h baseline search-group ${p}`},ot.createElement("span",{className:`flex-nogrow search-group-icon ${s}`}),ot.createElement("div",{className:"flex-grow search-group-name"},n.displayName),ot.createElement("div",{className:"flex-nogrow"},ot.createElement(c,null)))}}class gh{constructor(){this.fieldsRequired=[],this.TabComponent=mh}search(e,t){const{cloudProvider:n,key:a,...i}=e,r={...i,q:a,cloudProvider:n,type:this.id};return Object.keys(i).length>0&&(r.allowShortQuery="true"),vt(hd.search(r))}}const hh=()=>ot.createElement("div",{className:"flex-grow vertical center middle"},ot.createElement(bs,{size:"large",message:"Fetching search results ..."})),fh=({resultSet:e})=>ot.createElement("div",{className:"flex-grow vertical center middle"},ot.createElement("h3",null,"No ",e.type.displayName," found for the specified search query")),vh=({resultSet:e})=>{const{type:t}=e,{HeaderComponent:n,DataComponent:a}=t;return ot.createElement("div",{className:"search-result-grid flex-fill",style:{height:"initial"}},ot.createElement("div",{className:`table table-search-results table-search-results-${Ee(t.id)}`},ot.createElement(n,{resultSet:e}),ot.createElement(a,{resultSet:e})))},Ah=({resultSet:e})=>ot.createElement("div",{className:"flex-grow vertical center middle"},ot.createElement("h4",{className:"error-message"},"Could not fetch ",e.type.displayName),ot.createElement("div",{className:"error-message"},e&&e.error&&e.error.toString()));class Eh extends ot.Component{render(){const e=this.props.resultSet||{},{status:t,results:n}=e;switch(t){case Gg.INITIAL:case void 0:return null;case Gg.ERROR:return ot.createElement(Ah,{resultSet:e});case Gg.SEARCHING:return ot.createElement(hh,null);case Gg.FINISHED:return n.length?ot.createElement(vh,{resultSet:e}):ot.createElement(fh,{resultSet:e});default:return null}}}var bh=Object.defineProperty,yh=Object.getOwnPropertyDescriptor;let Ch=class extends ot.Component{render(){const{activeSearchResultType:e}=this.props,t=this.props.resultSets.slice().sort(((e,t)=>e.type.order-t.type.order));return ot.createElement("ul",{className:"search-groups nostyle"},t.map((t=>{const{type:n}=t,{TabComponent:a}=n,i=n===e;return ot.createElement(Dn,{key:n.id,to:".",params:{tab:n.id}},ot.createElement("li",null,ot.createElement(a,{resultSet:t,isActive:i})))})))}};Ch=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?yh(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&bh(t,n,r),r})([na],Ch);oi(".table-search-results {\n width: auto;\n overflow-x: auto;\n white-space: nowrap;\n word-break: break-all;\n}\n.table-search-results .table-header {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n font-weight: 600;\n background-color: var(--color-alabaster);\n z-index: 2;\n}\n.table-search-results .table-header .fa {\n padding-left: 2px;\n}\n.table-search-results .table-header .fa.disabled {\n color: var(--color-alto);\n}\n.table-search-results .table-header .table-header {\n background-color: var(--color-alabaster);\n}\n.table-search-results .table-header,\n.table-search-results .table-row {\n display: flex;\n flex: 1 1 auto;\n}\n.table-search-results .table-header > div,\n.table-search-results .table-row > div {\n flex: 1 1 auto;\n padding: 10px;\n display: inline-block;\n width: 150px;\n word-break: break-all;\n white-space: normal;\n border-bottom: 1px solid var(--color-alto);\n}\n.table-search-results .table-row > div {\n background-color: var(--color-alabaster);\n flex: 1 1 auto;\n}\n.table-search-results .table-row:nth-child(even) > div {\n background-color: var(--color-white);\n}\n.table-search-results .table-row:hover > div {\n background-color: var(--color-cirrus);\n}\n.table-search-results .table-row.active > div {\n background-color: var(--color-accent-g2);\n}\n.search-results {\n display: flex;\n margin-top: 10px;\n height: 100%;\n overflow: hidden;\n}\n.search-results .faded {\n opacity: 0.2;\n}\n.search-results .search-groups {\n background-color: var(--color-alabaster);\n cursor: default;\n min-width: 275px;\n width: 275px;\n}\n.search-results .search-groups .search-group {\n cursor: pointer;\n padding: 10px;\n margin-bottom: 1px;\n}\n.search-results .search-groups .search-group .search-group-icon {\n background-color: var(--color-primary);\n border: 2px solid var(--color-white);\n border-radius: 50%;\n color: var(--color-white);\n display: inline-block;\n height: 32px;\n line-height: 29px;\n margin-right: 10px;\n text-align: center;\n width: 32px;\n}\n.search-results .search-groups .search-group .search-group-name {\n color: var(--color-primary);\n font-size: 110%;\n font-weight: 600;\n text-transform: uppercase;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.search-results .search-groups .search-group .badge {\n background-color: var(--color-primary);\n border-radius: 3px;\n}\n.search-results .search-groups .search-group.search-group--focus {\n background-color: var(--color-accent-g2);\n}\n.search-results .search-groups .search-group.search-group--blur {\n background-color: var(--color-alabaster);\n}\n.search-results .search-groups .search-group:hover {\n background-color: var(--color-accent-g2);\n transition: all 0.15s ease-in-out;\n}\n.search-results .search-groups .search-group:hover.faded {\n background-color: var(--color-alabaster);\n}\n.search-results .search-result-grid {\n padding-left: 15px;\n}\n.search-results .search-result-grid .small {\n font-size: 90%;\n}\n.search-results .search-result-grid .table-contents.flex-fill {\n height: inherit;\n}\n");const wh=()=>ot.createElement("div",{className:"flex-grow vertical center middle"},ot.createElement("h3",null,"No results found for the specified search query"));class xh extends ot.Component{constructor(){super(...arguments),this.state={active:null}}componentWillReceiveProps(e){const{resultSets:t,selectedTab:n}=e,a=t.map((e=>e.type)).find((e=>e.id===n));this.setState({active:a})}render(){const{resultSets:e,isSearching:t}=this.props,{active:n}=this.state,a=n&&e.find((e=>e.type===n)),i=e.every((e=>e.status===Gg.FINISHED&&0===e.results.length));return ot.createElement("div",{className:"search-results"},ot.createElement(Ch,{resultSets:e,activeSearchResultType:n}),a&&ot.createElement(Eh,{resultSet:a}),!a&&t&&ot.createElement(hh,null),i&&!n&&ot.createElement(wh,null))}}class kh{constructor(e,t){this.$q=e,this.providerServiceDelegate=t,this.querySubject=new At,this.querySubject.pipe(Dt((e=>{if(!e||""===e.trim()){const e=Og.getAll().map((e=>({type:e,results:[],status:Gg.INITIAL})));return Et(e)}return Yg.search({key:e}).pipe(Gt())}))).subscribe((e=>{this.deferred.resolve(e)}))}query(e){return this.deferred=this.$q.defer(),this.querySubject.next(e),this.deferred.promise}getCategoryConfig(e){return Og.get(e)}formatRouteResult(e,t){return this.formatResult(e,t,!0)}formatResult(e,t,n=!1){const a=Og.get(e);if(!a)return this.$q.when("");let i=a.displayFormatter;if(this.providerServiceDelegate.hasDelegate(t.provider,"search.resultFormatter")){const n=this.providerServiceDelegate.getDelegate(t.provider,"search.resultFormatter");n[e]&&(i=n[e])}return this.$q.when(i(t,n))}}class Bh{constructor(e,t){this.$q=e,this.providerServiceDelegate=t}getSearcher(){return new kh(this.$q,this.providerServiceDelegate)}}Bh.$inject=["$q","providerServiceDelegate"];const Sh="spinnaker.infrastructure.search.service";n(Sh,[hp]).service("infrastructureSearchService",Bh);class Mh extends ot.Component{constructor(){super(...arguments),this.handleClick=()=>{const{filterType:e,onClick:t}=this.props,{name:n,key:a}=e;t([n,a].join("|"))},this.handleKeyUp=e=>{this.props.onKeyUp(e)},this.handleMouseDown=e=>{this.props.onMouseDown(e)}}render(){const{isActive:e}=this.props,t=Cn({filter:!0,"filter--focus":e,"filter--blur":!e}),{key:n,name:a}=this.props.filterType;return ot.createElement("div",{role:"option",className:t,onClick:this.handleClick,onKeyUp:this.handleKeyUp,onMouseDown:this.handleMouseDown},ot.createElement("div",{className:"filter__text"},a),ot.createElement("div",{className:"filter__modifier"},"[",n.toLocaleUpperCase(),":]"))}}Mh.defaultProps={onClick:()=>{},onKeyUp:()=>{},onMouseDown:()=>{}};oi(".filter-list {\n background-color: var(--color-white);\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n cursor: default;\n margin-top: 40px;\n position: absolute;\n white-space: pre;\n width: 200px;\n z-index: 1000;\n}\n.filter-list.filter-list__open {\n display: block;\n}\n.filter-list.filter-list__closed {\n display: none;\n}\n.filter-list .filter-list__header {\n color: var(--color-concrete);\n margin-left: 5px;\n margin-top: 10px;\n margin-left: 10px;\n}\n.filter-list .filter {\n align-items: center;\n cursor: pointer;\n display: flex;\n padding: 5px 5px 5px 10px;\n}\n.filter-list .filter .filter__text {\n font-size: 14px;\n color: var(--color-mineshaft);\n}\n.filter-list .filter .filter__modifier {\n font-size: 14px;\n color: var(--color-concrete);\n margin-left: 5px;\n}\n.filter-list .filter.filter--focus {\n border-color: var(--color-accent-g1);\n background-color: var(--color-accent-g2);\n}\n.filter-list .filter.filter--blur {\n background-color: var(--color-white);\n}\n.filter-list .filter:hover {\n background-color: var(--color-accent-g2);\n border-color: var(--color-accent-g1);\n}\n");class Nh extends ot.Component{constructor(){super(...arguments),this.filters=[],this.refCallback=e=>{this.filters.push(e)},this.handleClick=e=>{const t=this.filters.find((t=>{const{name:n,key:a}=t.props.filterType;return e===[n,a].join("|")}));this.props.filterClicked(t)},this.handleKeyUp=e=>{switch(e.key){case Kg.UP_ARROW:case Kg.DOWN_ARROW:this.props.onKeyUp(e.key)}},this.handleMouseDown=()=>{this.props.onMouseDown()}}generateFilterElement(e){const{name:t,key:n}=e;return ot.createElement(Mh,{key:[t,n].join("|"),ref:this.refCallback,filterType:e,isActive:this.props.activeFilter.key===n,onClick:this.handleClick,onKeyUp:this.handleKeyUp,onMouseDown:this.handleMouseDown})}renderFilterLayout(e){const{header:t,filterTypes:n}=e,a=(n||[]).map((e=>this.generateFilterElement(e)));return ot.createElement("div",{key:[t,n.length].join("|")},ot.createElement("div",{className:"filter-list__header"},t),ot.createElement("div",{role:"listbox"},a))}render(){const{layouts:e,isOpen:t}=this.props,n=Cn({"filter-list":!0,"filter-list__open":t,"filter-list__closed":!t}),a=(e||[]).map((e=>this.renderFilterLayout(e)));return ot.createElement("div",{className:n},a)}}Nh.defaultProps={filterClicked:()=>{},onKeyUp:()=>{},onMouseDown:()=>{}};class Dh{constructor(){this.KEYWORD_FILTER=Object.freeze({key:"key",name:"Keyword"}),this.NAME_FILTER=Object.freeze({key:"name",name:"Name"}),this.registry=new Map,this.register(this.KEYWORD_FILTER),this.register(this.NAME_FILTER)}register(e){this.registry.set(e.key,e)}getFilterType(e){return this.registry.get(e)}getFilterByModifier(e){return[...this.registry.values()].find((t=>e===t.key))}getRegisteredFilterKeys(){return[...this.registry.keys()]}getValues(){const e=Array.from(this.registry.values());return e.sort(((e,t)=>e.name.localeCompare(t.name))),e}}const Ih=new Dh;oi(".search {\n align-items: center;\n display: flex;\n}\n.search .search__icon {\n flex: 1 0 auto;\n}\n.search .search__input {\n display: flex;\n align-items: center;\n width: 100%;\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n color: var(--color-mineshaft);\n background: var(--color-white) none;\n border: 1px solid;\n border-radius: 4px;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.search .search__input .search__input-wrapper {\n align-items: baseline;\n display: flex;\n flex: 1 1;\n width: 100%;\n}\n.search .search__input .search__input-wrapper .search__input-control {\n border: none;\n max-width: 100%;\n outline: 0;\n padding-right: 10px;\n width: 100%;\n}\n.search .search__input .search__input-wrapper .search__input-control::-moz-placeholder {\n color: var(--color-concrete);\n opacity: 1;\n}\n.search .search__input .search__input-wrapper .search__input-control:-ms-input-placeholder {\n color: var(--color-concrete);\n}\n.search .search__input .search__input-wrapper .search__input-control::-webkit-input-placeholder {\n color: var(--color-concrete);\n}\n.search .search__input .search__input-wrapper .fa.fa-times {\n cursor: pointer;\n}\n.search .search__input.search__input--focus {\n border-color: var(--color-accent);\n outline: 0;\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px -2px var(--color-accent);\n}\n.search .search__input.search__input--blur {\n border-color: var(--color-alto);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n");class Fh extends ot.Component{constructor(e){super(e),this.filterTypes=[],this.tagElements=[],this.mouseDownFired=!1,this.handleTagListUpdate=e=>{this.tagElements=e},this.refCallback=e=>{this.inputElement=e},this.handleBlur=()=>{this.mouseDownFired||this.setState({isFocused:!1,isOpen:!1})},this.handleChange=()=>{let e;const t=this.inputElement.value.trim();if(this.hasModifier(t)){const n=this.getModifier(t);e={activeFilter:this.filterTypes.find((e=>e.key===n)),isOpen:!0}}else e={isOpen:!!t};this.setState(e)},this.handleDelete=(e,t)=>{const n=this.state.tags.filter((t=>e!==t));this.setState({isFocused:!0,tags:n}),this.props.onChange(n),t&&this.inputElement.focus()},this.handleFocus=()=>{this.setState({isFocused:!0})},this.handleKeyUpFromInput=e=>{const t=this.tagElements.length;switch(e.key){case Kg.LEFT_ARROW:!this.inputElement.value&&t>=1&&this.tagElements[t-1].focus();break;case Kg.RIGHT_ARROW:this.inputElement.value||0===t||this.tagElements[0].focus();break;case Kg.UP_ARROW:this.navigateUp();break;case Kg.DOWN_ARROW:this.navigateDown();break;case Kg.ENTER:this.handleFilterSelection();break;case Kg.ESCAPE:{const e=this.inputElement.value;this.hasModifier(e)&&!this.getSearchText(e)&&(this.inputElement.value=""),this.setState({activeFilter:Ih.KEYWORD_FILTER,isOpen:!1});break}}},this.handleKeyUpFromTag=()=>{this.inputElement.focus()},this.filterClicked=e=>{this.handleFilterSelection(e.props.filterType),this.mouseDownFired=!1},this.handleKeyUp=e=>{switch(e){case Kg.UP_ARROW:this.navigateUp();break;case Kg.DOWN_ARROW:this.navigateDown()}},this.handleMouseDown=()=>{this.mouseDownFired=!0},this.handleClearClick=()=>{this.setState({isOpen:!1,tags:[]}),this.inputElement.value="",this.inputElement.focus(),this.props.onChange([])};const t=[];t.push({header:"SEARCH",filterTypes:[Ih.KEYWORD_FILTER]}),this.filterTypes=this.reorderFilterTypesForSearch(Ih.getValues()),t.push({header:"FILTER ON",filterTypes:this.filterTypes.filter((e=>e.key!==Ih.KEYWORD_FILTER.key))}),this.keys=new Set(Ih.getValues().map((e=>e.key))),this.state={activeFilter:Ih.KEYWORD_FILTER,isFocused:!0,isOpen:!1,layouts:t,tags:this.buildTagsFromParams(e.params,[])}}componentWillReceiveProps(e){const t=this.buildTagsFromParams(e.params,this.state.tags);this.setState({tags:t})}reorderFilterTypesForSearch(e){const t=new Set([Ih.KEYWORD_FILTER.key,Ih.NAME_FILTER.key]),n=e.filter((e=>!t.has(e.key)));return n.unshift(Ih.NAME_FILTER),n.unshift(Ih.KEYWORD_FILTER),n}buildTagsFromParams(e,t){const n=t.filter((t=>e[t.key])).map((t=>({key:t.key,text:e[t.key]}))),a=Object.keys(e).filter((t=>!!e[t]&&!n.some((e=>e.key===t)))).map((t=>({key:t,text:e[t]})));return n.concat(a)}isLongEnoughIfKeyword(e){return e.key!==Ih.KEYWORD_FILTER.key||e.key===Ih.KEYWORD_FILTER.key&&e.text.length>2}hasModifier(e){const t=e.indexOf(":");return this.keys.has(e.substring(0,t).toLocaleLowerCase())&&t!==e.length}getModifier(e){return e.substring(0,e.indexOf(":")).toLocaleLowerCase()}getSearchText(e){const t=e.trim(),n=t.split(":")[1]||"";return this.hasModifier(t)?n.trim():t}buildTagFromInputString(e=this.state.activeFilter){const t=this.inputElement.value.trim(),n=this.getSearchText(t).trim();if(!t||!n)return null;return{key:this.hasModifier(t)?this.getModifier(t):e.key,text:n}}getActiveFilterIndex(){return this.filterTypes.findIndex((e=>e===this.state.activeFilter))}getActiveFilterText(e){let t;const n=this.inputElement.value.trim();if(this.hasModifier(n)){const a=this.getModifier(n),i=new RegExp(a,"i");t=`${n.replace(i,e.key)}`}else t=`${e.key}:${n}`;return t}navigateUp(){const{filterTypes:e}=this,t=this.getActiveFilterIndex(),n=0===t?e[e.length-1]:e[t-1];this.navigate(n)}navigateDown(){const{filterTypes:e}=this,t=this.getActiveFilterIndex(),n=t===e.length-1?e[0]:e[t+1];this.navigate(n)}navigate(e){const t=this.state.isOpen?e:Ih.KEYWORD_FILTER,n={activeFilter:t};this.inputElement.value=this.getActiveFilterText(t),this.setState({...n,isOpen:!0})}handleFilterSelection(e){const t=this.buildTagFromInputString(e);if(t&&this.isLongEnoughIfKeyword(t)){const e=this.state.tags.filter((e=>e.key!==t.key)).concat(t);this.setState({activeFilter:Ih.KEYWORD_FILTER,isOpen:!1,tags:e}),this.inputElement.value="",this.props.onChange(e)}}render(){const{activeFilter:e,isFocused:t,isOpen:n,layouts:a,tags:i}=this.state,r=Cn({search__input:!0,"search__input--focus":t,"search__input--blur":!t});return ot.createElement("div",{className:"search"},ot.createElement("i",{className:"fa fa-search search__icon"}),ot.createElement("span",{className:"search-label"},"Search"),ot.createElement("div",{className:r},ot.createElement(ah,{tags:i,onBlur:this.handleBlur,onDelete:this.handleDelete,onFocus:this.handleFocus,onKeyUp:this.handleKeyUpFromTag,onUpdate:this.handleTagListUpdate}),ot.createElement("div",{className:"search__input-wrapper"},ot.createElement("input",{type:"text",ref:this.refCallback,autoFocus:!0,className:"search__input-control",placeholder:`projects, applications, clusters, load balancers, server groups, ${Js.get("firewalls")}`,onBlur:this.handleBlur,onChange:this.handleChange,onFocus:this.handleFocus,onKeyUp:this.handleKeyUpFromInput}),ot.createElement("i",{className:"fa fa-times",onClick:this.handleClearClick}),ot.createElement(Nh,{activeFilter:e,isOpen:n,layouts:a,filterClicked:this.filterClicked,onKeyUp:this.handleKeyUp,onMouseDown:this.handleMouseDown}))))}}Og.register(new class extends gh{constructor(){super(...arguments),this.id="securityGroups",this.order=6,this.displayName=Js.get("Firewalls"),this.iconClass="fa fa-exchange-alt",this.cols={NAME:{key:"name"},ACCOUNT:{key:"account"},REGION:{key:"region"}},this.TabComponent=mh,this.HeaderComponent=()=>ot.createElement(ih,null,ot.createElement(lh,{col:this.cols.NAME}),ot.createElement(lh,{col:this.cols.ACCOUNT}),ot.createElement(lh,{col:this.cols.REGION})),this.DataComponent=({resultSet:e})=>{const t=e=>[e.id,e.name,e.account,e.region].join("|"),n=(e,t)=>{const n=e.name.localeCompare(t.name);return 0!==n?n:e.region.localeCompare(t.region)},a=e.results.slice().sort(n);return ot.createElement(sh,null,a.slice().sort(n).map((e=>ot.createElement(rh,{key:t(e)},ot.createElement(ph,{item:e,col:this.cols.NAME}),ot.createElement(dh,{item:e,col:this.cols.ACCOUNT}),ot.createElement(ch,{item:e,col:this.cols.REGION})))))}}displayFormatter(e){return`${e.name} (${e.region})`}});class Th{constructor(e,t){if(this.application=t,this.autoActivate=!1,this.lazy=!1,this.optIn=!1,this.optional=!1,this.primary=!1,this.requireConfiguredApp=!1,this.visible=!0,this.hidden=!1,this.loaded=!1,this.loading=!1,this.disabled=!1,this.loadFailure=!1,this.active=!1,this.debugEnabled=!1,Object.assign(this,e),!e.hasOwnProperty("defaultData"))throw new Error("The defaultData field is required when registering a data source.\n\ndefaultData accepts the initial default value that will be used before data has been fetched.\nFor example, if your data source holds an array of objects, you should set defaultData to an empty array.");this.data=this.data||this.defaultData,this.label=Js.get(e.label||yr(e.key)),!e.activeState&&this.sref&&(this.activeState="**"+this.sref+".**"),e.autoActivate&&(hi.$uiRouter.transitionService.onSuccess({entering:this.activeState},(()=>this.activate())),hi.$uiRouter.transitionService.onSuccess({exiting:this.activeState},(()=>this.deactivate()))),this.destroy$=new At,this.fetchRequest$=new At,this.status$=new Ct({status:"NOT_INITIALIZED",loaded:this.loaded,lastRefresh:0,error:null,data:this.data}),this.data$=new Ct(this.data),this.refresh$=this.data$.pipe(jt(1)),this.refreshFailure$=this.status$.pipe(jt(1),Tt((({status:e})=>"ERROR"===e))),this.throwFailures$=this.refreshFailure$.pipe(St((({error:e})=>{throw e}))),this.nextRefresh$=bt(this.data$.pipe(jt(1)),this.throwFailures$).pipe(Lt(1));const n=this.fetchRequest$.pipe(Pt((()=>this.debug("fetch requested..."))),Dt((()=>vt(this.loader(this.application)).pipe(Rt((e=>this.onLoad(this.application,e))),St((e=>({status:"FETCHED",lastRefresh:Date.now(),data:e}))),Ut((e=>Et({status:"ERROR",lastRefresh:this.lastRefresh,data:this.data,error:e}))),Ot({status:"FETCHING",lastRefresh:this.lastRefresh,data:this.data})))),Ot(this.status$.value),It(this.destroy$)),a=vt(Ze.resolve());n.pipe(Yt(a)).subscribe((([e,t])=>{this.statusUpdated(e),e.loaded=this.loaded,"FETCHED"===e.status&&(this.updateData(e.data),this.afterLoad&&this.afterLoad(this.application),this.addAlerts()),this.status$.next(e)}))}dataUpdated(e){if(this.loaded){this.updateData(void 0!==e?e:this.data);const t={data:this.data,...this.status$.value};this.status$.next(t)}}statusUpdated(e){const{status:t}=e;this.status=e,this.loaded="FETCHED"===t||this.loaded,this.loading="FETCHING"===t,this.loadFailure="ERROR"===t,this.lastRefresh=e.lastRefresh,this.debug(`status: ${e.status}`)}destroy(){this.destroy$.next()}onNextRefresh(e,t,n){const a=this.nextRefresh$.subscribe((e=>t(e)),(e=>n&&n(e)));return e&&e.$on("$destroy",(()=>a.unsubscribe())),()=>a.unsubscribe()}onRefresh(e,t,n){const a=this.refreshFailure$.pipe(Rt((({error:e})=>(n&&n(e),wt())))),i=bt(this.data$.pipe(jt(1)),a).subscribe((e=>t(e)));return e&&e.$on("$destroy",(()=>i.unsubscribe())),()=>i.unsubscribe()}ready(){return this.disabled||this.loaded||this.lazy&&!this.active?Ze.resolve(this.data):Xi(this.nextRefresh$)}activate(){this.active||(this.active=!0,this.loaded||this.refresh())}deactivate(){this.active=!1}updateData(e){this.data=e||this.defaultData,this.data$.next(this.data),this.debug("this.data:",this.data)}refresh(e){if(this.debug(`refresh(${e})`),!this.loader||this.disabled||this.lazy&&!this.active)return this.loaded=!1,this.updateData(this.defaultData),Ze.resolve(this.data);const t=Xi(this.data$.pipe(jt(1),Lt(1)));return this.loading&&!e?Xe.info(`${this.key} still loading, skipping refresh`):this.fetchRequest$.next(),t}addAlerts(){this.alerts=[],Array.isArray(this.data)&&this.data.length&&(this.alerts=this.data.filter((e=>{var t,n,a;return null!=(a=null==(n=null==(t=e.entityTags)?void 0:t.alerts)?void 0:n.length)?a:0})).map((e=>e.entityTags)))}debug(e,t){this.debugEnabled&&console.log(`DEBUG ${this.application.name}.${this.key}: ${e}`,t)}}class Qh{constructor(e,t,n){this.applicationName=e,this.scheduler=t,this.dataSources=[],this.accounts=[],this.clusters=[],this.defaultCredentials={},this.defaultRegions={},this.attributes={},this.notFound=!1,this.hasError=!1,this.isStandalone=!1,this.isManagementPaused=!1,this.activeState=null,this.refreshListeners=[],this.activeDataSource$=new xt(1),this.activeStateChangeStream=new At,this.refreshStream=new At,this.refreshFailureStream=new At,n.forEach((e=>this.addDataSource(e))),this.status$=kt(this.dataSources.map((e=>e.status$))).pipe(St((e=>this.getDerivedApplicationStatus(e))))}get name(){return this.applicationName}getDerivedApplicationStatus(e){const t=e.some((({status:e})=>"ERROR"===e))?"ERROR":void 0,n=e.some((({status:e})=>"FETCHING"===e))?"FETCHING":void 0,a=e.some((({status:e})=>"FETCHED"===e))?"FETCHED":void 0,i=t||n||a||"NOT_INITIALIZED",r=e.every((({status:e})=>["FETCHED","NOT_INITIALIZED"].includes(e))),s=e.reduce(((e,t)=>Math.max(e,t.lastRefresh||0)),0),o=e.every((({loaded:e})=>e));return{status:i,lastRefresh:r?s:this.lastRefresh,loaded:o,data:void 0}}addDataSource(e){const t=new Th(e,this);this.dataSources.push(t),this[e.key]=t}getDataSource(e){return this.dataSources.find((t=>t.key===e))}refresh(e){return this.dataSources.filter((e=>!e.visible)).forEach((t=>t.refresh(e))),this.refreshListeners.forEach((e=>e())),Ze.all(this.dataSources.filter((e=>e.visible)).map((t=>t.refresh(e)))).then((()=>this.applicationLoadSuccess()),(e=>this.applicationLoadError(e)))}ready(){return Ze.all(this.dataSources.filter((e=>void 0!==e.onLoad&&e.visible)).map((e=>e.ready())))}onRefresh(e,t,n){const a=this.refreshStream.subscribe(t);let i=null;n&&(i=this.refreshFailureStream.subscribe(n));const r=()=>{a.unsubscribe(),i&&i.unsubscribe()};return e&&e.$on("$destroy",(()=>r())),r}enableAutoRefresh(){this.dataLoader=this.scheduler.subscribe((()=>this.refresh()))}disableAutoRefresh(){this.dataLoader&&this.dataLoader.unsubscribe(),this.scheduler.unsubscribe()}setActiveState(e=null){this.activeState!==e&&(this.activeState=e,this.activeDataSource$.next(e),this.activeStateChangeStream.next(null))}applicationLoadError(e){Xe.error(e,"Failed to load application, will retry on next scheduler execution."),this.refreshFailureStream.next(e)}applicationLoadSuccess(){this.setApplicationAccounts(),this.setDefaults(),this.lastRefresh=(new Date).getTime(),this.refreshStream.next(null)}setApplicationAccounts(){let e=this.accounts.concat(this.attributes.accounts||[]);this.dataSources.filter((e=>Array.isArray(e.data)&&void 0!==e.credentialsField)).forEach((t=>e=e.concat(t.data.map((e=>e[t.credentialsField]))))),this.accounts=f(e)}extractProviderDefault(e){const t=new Map,n=this.dataSources.filter((t=>void 0!==t[e]&&Array.isArray(t.data)&&void 0!==t.providerField)),a=n.map((e=>e.data.map((t=>t[e.providerField])))).filter((e=>e.length>0));return be(...a).forEach((a=>{const i=n.map((t=>F(t.data.filter((e=>"object"==typeof e&&e[t.providerField]===a)),t[e]))).filter((e=>e.length>0)),r=be(...i);1===r.length&&(t[a]=r[0])})),t}setDefaults(){this.defaultCredentials=this.extractProviderDefault("credentialsField"),this.defaultRegions=this.extractProviderDefault("regionField")}subscribeToRefresh(e){this.refreshListeners.push(e);return()=>{this.refreshListeners.filter((t=>t!==e))}}}const Ph=(e,t)=>new Promise(((n,a)=>{Si(e).post(null==t?void 0:t.body).then((e=>{n({ok:!0,status:200,text:()=>new Promise((t=>{t(JSON.stringify(e))}))})})).catch((e=>a(e)))})),Rh=()=>{const e=new ga({cache:new ha}),t=new fa({uri:"/managed/graphql",fetch:Ph});e.setLink(t);return{client:e,onRefresh:()=>e.reFetchObservableQueries()}};var Uh=Object.defineProperty,zh=Object.getOwnPropertyDescriptor;let Gh=class extends ot.Component{render(){return ot.createElement(Sn,{className:"app-fresh-icon horizontal middle",name:"appSynced"})}};Gh=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?zh(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&Uh(t,n,r),r})([ys("applicationIcon")],Gh);const jh=({appName:e,lastRefresh:t,refresh:n,refreshing:a})=>{const i=eo.createScheduler(2e3),[r,s]=ot.useState(sr(t)),[o,l]=ot.useState(!1);ot.useEffect((()=>(i.subscribe((()=>{s(sr(t))})),()=>i.unsubscribe())),[t]);const c=(new Date).getTime()-t>12e4,p=ot.createElement("span",null,ot.createElement("p",null,ot.createElement("strong",null,e)),ot.createElement("p",null,"app data is "+(a?"refreshing":"up to date (click to refresh)")),ot.createElement("p",null,"Last refresh: ",rr(t)," ",ot.createElement("br",null)," ",r),ot.createElement("p",null,"Note: Due to caching, data may be delayed up to 2 minutes")),d=o||a;return ot.createElement(Ps,{template:p,placement:at.innerWidth<1100?"bottom":"right"},ot.createElement("div",{className:"application-header-icon"+(d?" header-icon-pulsing":""),onClick:()=>{l(!0),setTimeout((()=>{l(!1)}),3e3),n()}},!c&&!d&&ot.createElement(Gh,null),(c||d)&&ot.createElement(Sn,{className:"app-fresh-icon horizontal middle",name:"appUnsynced"})))},Lh=({app:e})=>{const[t,n]=ot.useState(!1),[a,i]=ot.useState(0);Xo(e.status$,(e=>{"FETCHING"===e.status?n(!0):"FETCHED"===e.status?(n(!1),i(e.lastRefresh)):n(!1)}));return ot.createElement(jh,{appName:e.name,lastRefresh:a,refreshing:t,refresh:()=>{e.refresh(!0)}})};class Oh{constructor(){this.queue=[]}setRegistries(e){this.overrideRegistry=e,this.flush()}register(e,t,n){this.queue.push((()=>{n?Ni.overrideValue(n,t,e):this.overrideRegistry.overrideComponent(t,e)})),this.flush()}flush(){if(this.overrideRegistry&&Ni)for(;this.queue.length;)this.queue.splice(0,1)[0]()}}const Yh=new Oh;function $h(e,t){return function(n){Yh.register(n,e,t)}}const Hh=(e,t,n)=>{Yh.register(e,t,n)};class Vh{constructor(){this.templateOverrides=new Map,this.componentOverrides=new Map,this.controllerOverrides=new Map}overrideTemplate(e,t){this.templateOverrides.set(e,t)}overrideComponent(e,t){this.componentOverrides.set(e,t)}overrideController(e,t){this.controllerOverrides.set(e,t)}getTemplate(e,t){return this.templateOverrides.get(e)||t}getComponent(e){return this.componentOverrides.get(e)}getController(e,t=e){return this.controllerOverrides.get(e)||t}}const Jh="spinnaker.core.override.registry";n(Jh,[]).service("overrideRegistry",Vh).run(["overrideRegistry",e=>{Yh.setRegistries(e)}]);var Wh=Object.defineProperty,Kh=Object.getOwnPropertyDescriptor;let qh=class extends ot.Component{render(){return null}};qh=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Kh(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&Wh(t,n,r),r})([ys("core.nav.bottom")],qh);class Xh extends ot.Component{render(){const e=this.props.tag.entityRef;return e.account||e.region?ot.createElement("div",{className:"entityname"},ot.createElement("span",{className:"entityref"},ot.createElement("strong",null,e.entityId)),ot.createElement("span",{className:"account-region"}," ( ",e.account&&ot.createElement(ns,{account:e.account})," ",ot.createElement("span",null,e.region)," ) ")):null}}class Zh extends ot.Component{constructor(e){super(e),this.state={collapsed:!0,alertsByMessage:this.getAlertsByMessage(e.notifications)}}componentWillReceiveProps(e){this.setState({alertsByMessage:this.getAlertsByMessage(e.notifications)})}getAlertsByMessage(e){const t=ie(e,"entityTag.value.message");return Object.keys(t).map((e=>({message:e,tagline:t[e][0].entityTag.value.tagline,title:t[e][0].entityTag.value.title,notifications:t[e]})))}render(){return ot.createElement("div",{className:"notification-list"},this.state.alertsByMessage.map((e=>ot.createElement(_h,{key:e.message,alertsForMessage:e}))))}}Zh.defaultProps={notifications:[]};class _h extends ot.Component{constructor(){super(...arguments),this.state={collapsed:!0},this.toggleCollapsed=()=>{this.setState({collapsed:!this.state.collapsed})},this.renderServerGroupName=e=>{const{entityTags:t}=e,{entityRef:{region:n,entityId:a}}=t,i=`${n}+${a}`;return ot.createElement(Xh,{key:i,tag:t})}}renderServerGroupNames(e){return 1===e.length?this.renderServerGroupName(e[0]):ot.createElement("div",null,ot.createElement("a",{className:"clickable",onClick:this.toggleCollapsed},ot.createElement("strong",null,ot.createElement("span",null," ",this.state.collapsed?"Show":"Hide"," ",e.length," entities"))),ot.createElement("div",{className:"server-group-list"},!this.state.collapsed&&e.map(this.renderServerGroupName)))}render(){const{alertsForMessage:{notifications:e,title:t,message:n,tagline:a}}=this.props;return ot.createElement("div",{className:"notification-message"},t&&ot.createElement("div",{className:"notification-title"},ot.createElement(Sr,{message:t})),this.renderServerGroupNames(e),ot.createElement(Sr,{message:n}),ot.createElement(Sr,{className:"small",message:a}))}}class ef extends ot.Component{constructor(){super(...arguments),this.selectCategory=()=>{this.props.onCategorySelected(this.props.category)}}render(){const{category:e,notifications:t}=this.props,n=`clickable list-group-item flex-container-h baseline alerts-severity-${e.severity} `+(this.props.isSelected?"selected ":" ");return ot.createElement("li",{className:n,onClick:this.selectCategory,key:e.id},ot.createElement("i",{className:`notification-category-icon fa ${e.icon}`}),ot.createElement("span",{className:"notification-category-label flex-grow"},e.label),ot.createElement("span",{className:"badge"},t.length))}}class tf extends ot.Component{render(){const{notifications:e,onEditTag:t,onDeleteTag:n}=this.props;return ot.createElement("div",{className:"notification-list"},e.map(((e,a)=>{const{entityTag:{lastModified:i,value:{title:r,message:s,tagline:o}}}=e;return ot.createElement("div",{className:"notification-message",key:a},r&&ot.createElement("div",{className:"notification-title"},ot.createElement(Sr,{message:r})),ot.createElement(Sr,{message:s}),ot.createElement("div",{className:"notification-tagline flex-container-h baseline"},ot.createElement(Sr,{className:"small",message:o}),ot.createElement("div",{className:"small flex-grow",title:rr(i)},sr(i)),ot.createElement(nf,{notification:e,onEditTag:t,onDeleteTag:n})))})))}}class nf extends ot.Component{constructor(){super(...arguments),this.editTag=()=>{this.props.onEditTag(this.props.notification)},this.deleteTag=()=>{this.props.onDeleteTag(this.props.notification)}}render(){return ot.createElement("div",{className:"flex-nogrow actions actions-popover",style:{position:"relative"}},ot.createElement("a",{onClick:this.editTag},ot.createElement("span",{className:"glyphicon glyphicon-cog clickable"})),ot.createElement("a",{onClick:this.deleteTag},ot.createElement("span",{className:"glyphicon glyphicon-trash clickable"})))}}const af=ye([{id:"urgentissues",label:"Urgent Issues",icon:"fa-exclamation",severity:2},{id:"deprecation",label:"Deprecations",icon:"fa-wrench",severity:1},{id:"default",label:"Uncategorized",icon:"fa-exclamation-circle",severity:0}],"id");class rf{static defineCategory(e,t=e,n=0,a="fa-exclamation-circle"){return af[e]={id:e,label:t,severity:n,icon:a}}static getCategory(e){return e?af[e="blacklist"===e?"urgentissues":e]||rf.defineCategory(e):af.default}}class sf extends ot.Component{constructor(e){super(e),this.handleCategorySelected=e=>{this.setState({selectedCategory:e})};const t=this.categorizeNotifications(e.notifications);this.state={categorizedAlerts:t,selectedCategory:t[0].category}}componentWillReceiveProps(e){const t=this.categorizeNotifications(e.notifications);this.setState({categorizedAlerts:t})}categorizeNotifications(e){const t=e=>rf.getCategory(e.entityTag.category).id;return f(e.map(t)).map((n=>({category:rf.getCategory(n),notifications:e.filter((e=>t(e)===n))}))).sort(((e,t)=>t.category.severity-e.category.severity))}render(){const{categorizedAlerts:e,selectedCategory:t}=this.state,{onEditTag:n,onDeleteTag:a}=this.props;if(!e||!t)return null;const i=e.find((e=>e.category===t)).notifications;return ot.createElement("div",{className:"flex-container-h"},ot.createElement("ul",{className:"list-group notification-categories"},e.map((({category:e,notifications:n})=>ot.createElement(ef,{isSelected:e===t,key:e.id,category:e,notifications:n,onCategorySelected:this.handleCategorySelected})))),this.props.grouped?ot.createElement(Zh,{notifications:i}):ot.createElement(tf,{notifications:i,onEditTag:n,onDeleteTag:a}))}}class of{static upsertEntityTag(e,t,n,a){return tp.executeTask({application:e,description:`${a?"Create":"Update"} entity tag on ${n.entityId}`,job:[{type:"upsertEntityTags",application:e.name,entityId:n.entityId,entityRef:n,tags:[t],isPartial:!0}]})}static deleteEntityTag(e,t,n,a){return tp.executeTask({application:e,description:`Delete entity tag on ${t.name}`,job:[{type:"deleteEntityTags",application:e.name,id:n.id,tags:[a]}]})}}oi(".entity-tag-editor-modal .preview {\n background-color: var(--color-accent-g2);\n}\n.entity-tag-editor-modal .preview .marked,\n.entity-tag-editor-modal .preview [marked] {\n padding-top: 5px;\n}\n.entity-tag-editor-modal label .marked p,\n.entity-tag-editor-modal label [marked] p {\n margin-bottom: 0;\n}\n");const lf=class extends ot.Component{constructor(e){super(e),this.close=e=>{this.props.dismissModal.apply(null,e)},this.upsertTag=e=>{const{application:t,isNew:n,tag:a,onUpdate:i}=this.props,r=e.ownerOption?e.ownerOption.owner:this.props.owner,s=e.ownerOption?e.ownerOption.type:this.props.entityType,o=this.props.entityRef||class{static buildServerGroupRef(e){return{cloudProvider:e.cloudProvider,entityType:"servergroup",entityId:e.name,account:e.account,region:e.region}}static buildServerGroupManagerRef(e){return{cloudProvider:e.cloudProvider,entityType:"servergroupmanager",entityId:e.name,account:e.account,region:e.region}}static buildLoadBalancerRef(e){return{cloudProvider:e.cloudProvider,entityType:"loadbalancer",entityId:e.name,account:e.account,region:e.region}}static buildApplicationRef(e){return{cloudProvider:"*",entityType:"application",entityId:e.name}}static buildRegionalClusterRef(e){return{cloudProvider:e.cloudProvider,entityType:"cluster",entityId:e.name,account:e.account,region:e.region}}static buildSecurityGroupRef(e){return{cloudProvider:e.cloudProvider,entityType:"securitygroup",entityId:e.name,account:e.accountName,region:e.region,vpcId:e.vpcId}}static getBuilder(e){switch(e){case"application":return this.buildApplicationRef;case"serverGroup":return this.buildServerGroupRef;case"serverGroupManager":return this.buildServerGroupManagerRef;case"loadBalancer":return this.buildLoadBalancerRef;case"cluster":return this.buildRegionalClusterRef;case"securityGroup":return this.buildSecurityGroupRef;default:return null}}}.getBuilder(s)(r);o.application||(o.application=t.name),a.value.message=e.message;const l=qc.modalInstanceEmulation((e=>this.props.closeModal(e)),(e=>this.props.dismissModal(e))),c=new qc({application:t,modalInstance:l,title:`${n?"Create":"Update"} ${this.props.tag.value.type} for ${o.entityId}`,onTaskComplete:()=>t.entityTags.refresh().then((()=>i()))});c.submit((()=>{const e=of.upsertEntityTag(t,a,o,n),i=()=>this.setState({isSubmitting:!1});return e.then(i,i),e})),this.setState({taskMonitor:c,isSubmitting:!0})};const{tag:t}=this.props,n=this.props.ownerOptions||[],a=n.find((e=>e.isDefault))||n[0];t.name=t.name||`spinnaker_ui_${t.value.type}:${pr.generateUuid()}`,this.state={taskMonitor:null,initialValues:{message:t.value&&t.value.message||"",ownerOption:a},isSubmitting:!1}}static show(e){return si.show(lf,e)}render(){const{isNew:e,tag:t,ownerOptions:n}=this.props,{initialValues:a,isSubmitting:i}=this.state,r=n||[],s=`${e?" Create":" Update"} ${t.value.type}`;return ot.createElement("div",null,ot.createElement(jc,{monitor:this.state.taskMonitor}),ot.createElement(Gs,{initialValues:a,onSubmit:this.upsertTag,render:({isValid:n,values:a,setFieldValue:o})=>ot.createElement(Vn,{className:"form-horizontal"},ot.createElement(Nc,{dismiss:this.close}),ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,e?"Create":"Update"," ",t.value.type)),ot.createElement(qt.Body,{className:"entity-tag-editor-modal"},ot.createElement("div",{className:""},ot.createElement(kl,{label:"Message",name:"message",required:!0,input:e=>ot.createElement(Po,{...e,rows:5,required:!0})}),ot.createElement("div",{className:"small text-right"},"Markdown is okay ",ot.createElement(_s,{id:"markdown.examples"})),a.message&&ot.createElement("div",{className:"form-group preview"},ot.createElement("div",{className:"col-md-3 sm-label-right"},ot.createElement("strong",null,"Preview")),ot.createElement("div",{className:"col-md-9"},ot.createElement(Sr,{message:a.message})))),!!r.length&&ot.createElement(Dl,{name:"ownerOption",label:"Applies To",required:!0,value:a.ownerOption.label,onChange:e=>{const t=r.find((t=>t.label===e.target.value));o("ownerOption",t)},input:e=>ot.createElement(To,{...e,stringOptions:r.map((e=>e.label))})})),ot.createElement(qt.Footer,null,ot.createElement("button",{className:"btn btn-default",disabled:i,onClick:this.close,type:"button"},"Cancel"),ot.createElement(Dc,{isDisabled:!n||i,submitting:i,isFormSubmit:!0,label:s})))}))}};let cf=lf;cf.defaultProps={onUpdate:qi,ownerOptions:[]};oi(".notices-severity-0,\n.notices-severity-1,\n.notices-severity-2 {\n --color-notice: var(--color-accent);\n --color-notice-light: var(--color-accent-g2);\n}\n.alerts-severity-0 {\n --color-notice: var(--color-warning);\n --color-notice-light: var(--color-warning-light);\n}\n.alerts-severity-1 {\n --color-notice: var(--color-alert);\n --color-notice-light: var(--color-alert-light);\n}\n.alerts-severity-2 {\n --color-notice: var(--color-danger);\n --color-notice-light: var(--color-danger-light);\n}\n.notification.fa,\n.notifications-popover.fa {\n color: var(--color-notice);\n}\n.notification .popover-title,\n.notifications-popover .popover-title,\n.notification.inverse .notification.fa,\n.notifications-popover.inverse .notification.fa {\n background-color: var(--color-notice);\n color: var(--color-white);\n}\n.notification.bottom > div.arrow:after,\n.notifications-popover.bottom > div.arrow:after {\n border-bottom-color: var(--color-notice);\n}\n.notifications-popover .notification-categories li {\n color: var(--color-notice);\n}\n.notifications-popover .notification-categories li .notification-category-label {\n color: var(--color-black);\n}\n.notifications-popover .notification-categories li .badge {\n background-color: var(--color-notice);\n}\n.notifications-popover .notification-categories li.selected {\n background-color: var(--color-notice-light);\n}\n.notifications-popover .notification-categories li:hover {\n background-color: var(--color-notice-light);\n}\n.alert-severity-2 .notification-category-label {\n color: var(--color-danger);\n}\n.notification-category-icon {\n flex: 0 0 1em;\n text-align: center;\n}\n.entity-notifications {\n display: flex;\n}\n.entity-notifications .tag-marker {\n display: inline-block;\n margin-left: 5px;\n font-size: 15px;\n}\n.entity-notifications .tag-marker.inverse .fa {\n border-radius: 3px;\n padding: 2px;\n font-size: 90%;\n}\n.ephemeral.fa,\n.ephemeral-popover.fa {\n color: var(--color-mineshaft);\n}\n.ephemeral .popover-title,\n.ephemeral-popover .popover-title {\n background-color: var(--color-mineshaft);\n color: var(--color-white);\n}\n");oi("@-webkit-keyframes animate-glow {\n 0% {\n opacity: 0.9;\n }\n 50% {\n opacity: 0.4;\n }\n 100% {\n opacity: 0.9;\n }\n}\n@-webkit-keyframes pulse {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.25;\n }\n 100% {\n opacity: 1;\n }\n}\n@keyframes pulse {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.25;\n }\n 100% {\n opacity: 1;\n }\n}\n@-webkit-keyframes spin {\n from {\n -webkit-transform: rotate(0deg);\n }\n to {\n -webkit-transform: rotate(360deg);\n }\n}\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n/* Common mixins extracted from Bootstrap */\n@-webkit-keyframes fadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n@keyframes fadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n@-webkit-keyframes slideDown {\n 0% {\n height: 0;\n opacity: 0;\n }\n 100% {\n height: 100%;\n opacity: 1;\n }\n}\n@keyframes slideDown {\n 0% {\n height: 0;\n opacity: 0;\n }\n 100% {\n height: 100%;\n opacity: 1;\n }\n}\n.popover.notifications-popover {\n padding: 0;\n min-width: 200px;\n max-width: 500px;\n text-align: left;\n}\n.popover.notifications-popover .popover-title {\n padding: 0.6em 0.8em;\n margin: 0;\n border-bottom: none;\n}\n.popover.notifications-popover .list-group-item {\n padding: 0.333em 1em;\n border-radius: 0;\n background-color: var(--color-alabaster);\n border-left: none;\n border-right: none;\n}\n.popover.notifications-popover .notification-categories {\n margin: 0;\n background-color: var(--color-alabaster);\n border-right: 1px solid var(--color-alto);\n}\n.popover.notifications-popover .notification-categories .notification-category-label {\n padding: 0 1em;\n}\n.popover.notifications-popover .notification-categories .badge {\n border-radius: 3px;\n padding: 3px 6px;\n}\n.popover.notifications-popover .notification-list {\n flex: 1 1 auto;\n overflow-y: auto;\n max-height: 15em;\n padding: 1em;\n}\n.popover.notifications-popover .server-group-list {\n margin: 0.75em 0;\n}\n.popover.notifications-popover .entityname {\n display: flex;\n flex-flow: row wrap;\n justify-content: space-between;\n}\n.popover.notifications-popover .entityname .account-region {\n flex: 1 1 auto;\n text-align: end;\n}\n.popover.notifications-popover .entityname span {\n white-space: nowrap;\n}\n.popover.notifications-popover .notification-message {\n min-width: 150px;\n}\n.popover.notifications-popover .notification-message .notification-title {\n font-weight: bold;\n margin-bottom: 0.25em;\n}\n.popover.notifications-popover .notification-message:not(:first-child) {\n padding-top: 10px;\n margin-top: 5px;\n border-top: 1px solid var(--color-alto);\n}\n.popover.notifications-popover .notification-message .notification-tagline > *:not(:first-child) {\n margin-left: 0.5em;\n}\n");const pf={alerts:{title:"Alerts",icon:"fa-exclamation-triangle"},notices:{title:"Notices",icon:"fa-flag"}};class df extends ot.Component{constructor(e){super(e),this.fireGAEvent=()=>{const e=this.props.gaLabelFn(this.props);Ui.log({action:"SPAN",category:"Alerts hovered",data:{label:e}})},this.PopoverContent=({hidePopover:e})=>{const{type:t,categorized:n,grouped:a}=this.props,{notifications:i}=this.state;return ot.createElement(uf,{type:t,categorized:n,grouped:a,notifications:i,hidePopover:e,handleEditNotification:t=>{e(),this.handleEditNotification(t)},handleDeleteNotification:t=>{e(),this.handleDeleteNotification(t)}})},this.state=this.getState(e)}getState(e){const{tags:t,type:n}=e,a=t.filter((e=>!!e)).reduce(((e,t)=>e.concat(t[n].map((e=>({entityTags:t,entityTag:e}))))),[]),i=a.length,r=f(a.map((e=>e.entityTag.category))).map((e=>rf.getCategory(e))).reduce(((e,t)=>Math.max(e,t.severity)),0);return{notifications:a,count:i,severity:r}}componentWillReceiveProps(e){this.setState(this.getState(e))}handleEditNotification(e){const{entity:t,application:n,onUpdate:a}=this.props,{entityTags:i,entityTag:r}=e,s=W(r,"name","namespace","category");s.value={...r.value};const o={tag:s,isNew:!1,owner:t,entityType:i.entityRef.entityType,application:n,onUpdate:a,ownerOptions:null,entityRef:i.entityRef};cf.show(o)}handleDeleteNotification(e){const{application:t,entity:n,onUpdate:a}=this.props,{entityTags:i,entityTag:r}=e,s=r.value.type,o={application:t,title:`Deleting ${s} on ${n.name}`,onTaskComplete:()=>t.entityTags.refresh().then((()=>a()))};lp.confirm({header:`Really delete ${s}?`,buttonText:`Delete ${s}`,account:n.account,taskMonitorConfig:o,submitMethod:()=>of.deleteEntityTag(t,n,i,r.name)})}render(){const{type:e,className:t,placement:n,hOffsetPercent:a}=this.props,{count:i,severity:r}=this.state,{title:s,icon:o}=pf[e];if(i<1)return null;const l=`${e}-severity-${Math.min(Math.max(r,0),2)}`;return ot.createElement("span",{className:`tag-marker small ${t||""}`,onMouseEnter:this.fireGAEvent},ot.createElement(qs,{delayShow:100,placement:n,hOffsetPercent:a,Component:this.PopoverContent,title:s,className:`no-padding notifications-popover ${l}`},ot.createElement("i",{className:`notification fa ${o} ${l}`})))}}df.defaultProps={tags:[],categorized:!0,className:"",entity:null,grouped:!1,onUpdate:qi,placement:"bottom",type:"alerts"};const uf=e=>{const{type:t,grouped:n,categorized:a,notifications:i,handleEditNotification:r,handleDeleteNotification:s}=e,{title:o}=pf[t];return a?ot.createElement(sf,{notifications:i,onEditTag:r,onDeleteTag:s,grouped:n,title:o}):n?ot.createElement(Zh,{notifications:i}):ot.createElement(tf,{notifications:i,onEditTag:r,onDeleteTag:s})};class mf extends ot.Component{constructor(){super(...arguments),this.getDataSourceAnalyticsLabel=()=>{const{tabName:e,application:t,tags:n}=this.props,a=n.map((e=>e.alerts.map((e=>e.name)).join(",")));return[e,t.name,a].join(":")}}render(){const{application:e,tags:t}=this.props;return ot.createElement(df,{tags:t,application:e,type:"alerts",gaLabelFn:this.getDataSourceAnalyticsLabel,grouped:!0,categorized:!0,placement:"right"})}}n("spinnaker.core.entityTag.alerts.datasourcenotifications",[]).component("dataSourceNotifications",yn(jl(mf,"dataSourceNotifications"),["tags","application","tabName"]));const gf=ba({key:"verticalNavExpanded",default:!Ms.isSet("verticalNav")||Ms.isExpanded("verticalNav"),effects:[({setSelf:e,trigger:t})=>("get"===t&&e(!Ms.isSet("verticalNav")||Ms.isExpanded("verticalNav")),Ms.onChange("verticalNav",(t=>{e(t)})),()=>{Ms.onChange("verticalNav",null)})]}),hf=({app:e,dataSource:t,isActive:n})=>{const a=ya(gf),{alerts:i,badge:r,iconName:s,key:o,label:l}=t,{data:c}=_o(e.getDataSource(r||o)),p=r?c.length:0;_o(t);const d=i||[],u=p?"badge-running-count":"badge-none";return ot.createElement(ot.Fragment,null,ot.createElement("span",{className:u},p>0?p:""),ot.createElement("span",{className:"nav-row-item"},s&&(a?ot.createElement(Bn,{className:"nav-icon",name:s||"config",size:"medium",color:n?"primary":"accent"}):ot.createElement(Ps,{value:t.label,placement:"right"},ot.createElement("div",null,ot.createElement(Bn,{className:"nav-icon",name:s,size:"medium",color:n?"primary":"accent"}))))),ot.createElement("span",{className:"nav-row-item nav-name"}," "+t.label),ot.createElement(mf,{tags:d,application:e,tabName:l}))},ff=({app:e,dataSource:t})=>{const n=In(t.sref),a=Fn(t.activeState);return ot.createElement("a",{...n,className:"nav-category flex-container-h middle sp-padding-s-yaxis"+(a?" active":"")},ot.createElement(hf,{app:e,dataSource:t,isActive:a}))},vf=({app:e,dataSources:t})=>ot.createElement("div",{className:"nav-section sp-padding-s-yaxis text-semibold"},t.map((t=>ot.createElement(ff,{key:t.label,dataSource:t,app:e}))));class Af{constructor(){this.categories=[],this.orderOverrides=new Map}register(e){this.categories.push(e)}get(e){return p(this.categories.find((t=>t.key===e)))}has(e){return this.categories.some((t=>t.key===e))}getAll(){return this.categories.slice().sort(((e,t)=>this.getOrder(e)-this.getOrder(t)))}overrideCategoryOrder(e,t){this.orderOverrides.set(e,t)}getHighestOrder(){return Math.max(...this.categories.map((e=>e.order)).concat(Array.from(this.orderOverrides.values())))}getOrder(e){const{key:t,order:n}=e;return this.orderOverrides.has(t)?this.orderOverrides.get(t):n}}const Ef=new Af;class bf{static listServices(){return vt(Si("/pagerDuty/services").get())}static listOnCalls(){return vt(Si("/pagerDuty/oncalls").get())}}class yf{static pageApplicationOwnerModal(e){vi.modalService.open({templateUrl:"core/src/pagerDuty/pageApplicationOwner.html",controller:"PageModalCtrl as ctrl",resolve:{application:()=>e}}).result.catch((()=>{}))}static sendPage(e,t,n,a,i){const r={type:"pageApplicationOwner",message:n,details:i};e&&e.length>0&&(r.applications=e.map((e=>e.name))),t&&t.length>0&&(r.keys=t);const s={application:a,job:[r],description:"Send Page"};return tp.executeTask(s)}static pageApplicationOwner(e,t,n){return this.sendPage([e],void 0,t,e,{details:n})}}window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/pagerDuty/pageApplicationOwner.html",'<div modal-page>\n <task-monitor monitor="ctrl.taskMonitor"></task-monitor>\n <modal-close dismiss="$dismiss()"></modal-close>\n <div class="modal-header">\n <h4 class="modal-title">Page {{ctrl.application.name}} Owner</h4>\n </div>\n\n <form role="form" class="container-fluid" novalidate name="pageApplicationOwnerForm">\n <div class="modal-body">\n <div class="row" style="margin-top: 10px; margin-bottom: 10px">\n <div class="col-md-3 sm-label-right">Reason</div>\n <div class="col-md-7">\n <textarea\n class="form-control required"\n ng-model="ctrl.reason"\n rows="3"\n placeholder="Brief description of incident, severity and expected action."\n ></textarea>\n </div>\n </div>\n </div>\n\n <div class="modal-footer">\n <a href class="btn btn-default" ng-click="$dismiss()">Cancel</a>\n <button type="submit" class="btn btn-primary" ng-click="ctrl.submit()" ng-disabled="!ctrl.reason">\n Page Now\n </button>\n </div>\n </form>\n</div>\n')}]);class Cf{constructor(){this.servicesLoaded=!1}setCurrentService(){this.servicesLoaded=!1,bf.listServices().subscribe((e=>{this.currentService=e.find((e=>e.integration_key===this.apiKey)),this.servicesLoaded=!0}))}$onInit(){this.setCurrentService()}$onChanges(){this.setCurrentService()}}const wf={bindings:{apiKey:"<"},controller:Cf,template:'\n <span>\n <span ng-if="!$ctrl.servicesLoaded">\n <i class="fa fa-asterisk fa-spin fa-fw"></i> Loading...\n </span>\n <span ng-if="$ctrl.servicesLoaded && $ctrl.currentService">\n {{ $ctrl.currentService.name }} ({{ $ctrl.currentService.integration_key }})\n </span>\n <span ng-if="$ctrl.servicesLoaded && !$ctrl.currentService">\n Unable to locate PagerDuty key ({{ $ctrl.apiKey }})\n </span>\n </span>\n '},xf="spinnaker.core.pagerDuty.pagerDutyTag.component";n(xf,[]).component("pagerDutyTag",wf);class kf{constructor(){this.helpContents='<p>Make sure your service exists in Pager Duty and includes the "Generic API"\n integration.</p>\n <h5><b>Setting up a new integration</b></h5>\n <ol>\n <li>Find your service in Pager Duty</li>\n <li>Click "New Integration"</li>\n <li>Select "Use our API directly"</li>\n <li>Make sure to select "Events API v1" (Spinnaker is not compatible with v2)</li>\n </ol>\n <p><b>Note:</b> it can take up to five minutes for the service to appear in Spinnaker</p>',this.required=di.pagerDuty&&di.pagerDuty.required||!1,this.label="PagerDuty"+(this.required?" *":"")}$onInit(){this.scheduler=eo.createScheduler(1e4),this.scheduler.subscribe((()=>this.loadPagerDutyServices())),this.loadPagerDutyServices()}$onDestroy(){this.scheduler.unsubscribe()}loadPagerDutyServices(){bf.listServices().subscribe((e=>{this.pagerDutyServices=e.filter((e=>e.integration_key)),this.servicesLoaded=!0}))}}const Bf={bindings:{component:"="},controller:kf,template:'\n <div class="form-group row">\n <div class="col-sm-3 sm-label-right">{{$ctrl.label}} <help-field content="{{$ctrl.helpContents}}"></help-field></div>\n <div class="col-sm-9">\n <ui-select ng-if="$ctrl.servicesLoaded" ng-model="$ctrl.component.pdApiKey" class="form-control input-sm" ng-required="$ctrl.required">\n <ui-select-match placeholder="Select a PagerDuty Service">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="pagerDuty.integration_key as pagerDuty in $ctrl.pagerDutyServices | filter: $select.search">\n {{pagerDuty.name}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n'},Sf="spinnaker.core.pagerDuty.pagerDutySelectField.component";n(Sf,[]).component("pagerDutySelectField",Bf);oi(".vertical-navigation {\n background-color: var(--color-accent-g2);\n box-shadow: 2px 0 3px 1px var(--color-alto);\n min-width: 226px;\n max-width: 300px;\n display: grid;\n height: 100%;\n grid-template-columns: 1fr;\n grid-template-rows: auto 1fr auto;\n grid-template-areas: 'nav-header' 'nav-content' 'nav-bottom';\n}\n@media (max-width: 1640px) {\n .vertical-navigation {\n max-width: 226px;\n }\n}\n.vertical-navigation .nav-header {\n grid-area: nav-header;\n color: var(--color-primary);\n margin-bottom: unset;\n}\n.vertical-navigation .nav-header .application-header-icon {\n display: flex;\n justify-content: center;\n border-radius: 50%;\n background-color: var(--color-primary);\n color: var(--color-white);\n text-align: center;\n width: 36px;\n height: 36px;\n font-size: 15px;\n cursor: pointer;\n}\n.vertical-navigation .nav-header .app-fresh-icon {\n width: 20px;\n}\n.vertical-navigation .nav-header .header-icon-pulsing {\n -webkit-animation: pulse 4s steps(48) infinite;\n animation: pulse 4s steps(48) infinite;\n}\n.vertical-navigation .nav-header .application-name {\n word-break: break-word;\n}\n.vertical-navigation .nav-content {\n grid-area: nav-content;\n overflow: auto;\n}\n.vertical-navigation .nav-content .nav-section {\n font-size: 16px;\n text-transform: uppercase;\n}\n.vertical-navigation .nav-content .nav-section .nav-category {\n color: var(--color-accent);\n padding-left: 12px;\n align-items: center;\n}\n.vertical-navigation .nav-content .nav-section .nav-category .badge-running-count {\n min-width: 16px;\n height: 16px;\n margin-right: -12px;\n margin-top: 18px;\n border-radius: 3px;\n color: var(--color-white);\n background-color: var(--color-primary);\n line-height: 16px;\n text-align: center;\n font-size: 12px;\n z-index: 100;\n}\n.vertical-navigation .nav-content .nav-section .nav-category .badge-none {\n min-width: 16px;\n margin-right: -12px;\n margin-top: 18px;\n}\n.vertical-navigation .nav-content .nav-section .nav-category .nav-row-item {\n min-width: 16px;\n margin-right: 8px;\n line-height: 10px;\n padding: 0;\n font-size: 16px;\n}\n.vertical-navigation .nav-content .nav-section .nav-category .nav-row-item .bs-tooltip-right {\n display: none;\n}\n.vertical-navigation .nav-content .nav-section a {\n text-decoration: none;\n}\n.vertical-navigation .nav-content .nav-section .active.nav-category {\n background: #bbdee8;\n color: var(--color-primary);\n}\n.vertical-navigation .nav-content .nav-section .active.nav-category .nav-icon {\n color: var(--color-primary);\n}\n.vertical-navigation .nav-content .nav-section .active.nav-category .nav-name {\n color: var(--color-primary);\n}\n.vertical-navigation .nav-content .nav-section .page-category {\n color: var(--color-accent);\n padding-left: 16px;\n margin-top: -4px;\n}\n.vertical-navigation .nav-content .nav-section .page-category .nav-row-item {\n min-width: 16px;\n line-height: 10px;\n padding: 0;\n font-size: 16px;\n}\n.vertical-navigation .nav-content .nav-section:not(:first-of-type) {\n border-top: 1px solid var(--color-white);\n}\n.vertical-navigation .nav-bottom {\n max-height: 100px;\n grid-area: nav-bottom;\n overflow: auto;\n}\n.vertical-nav-collapsed {\n min-width: 60px;\n max-width: 60px;\n}\n.vertical-nav-collapsed .nav-header {\n margin-left: 12px;\n margin-right: 12px;\n}\n.vertical-nav-collapsed .application-name {\n display: none;\n}\n.vertical-nav-collapsed .nav-section .nav-category .nav-name,\n.vertical-nav-collapsed .nav-section .page-category .nav-name,\n.vertical-nav-collapsed .nav-section .nav-category .HoverablePopover,\n.vertical-nav-collapsed .nav-section .page-category .HoverablePopover {\n display: none;\n}\n.vertical-nav-collapsed .nav-section .nav-category .tooltip,\n.vertical-nav-collapsed .nav-section .page-category .tooltip {\n color: red;\n}\n");const Mf=({app:e})=>{const t=jo(e.attributes.dataSources);Tn();const n=cl(),a=ya(gf),i=e=>{const t=e.filter((e=>!1!==e.visible&&!e.disabled&&e.sref)),n=Ef.getAll(),a=n.map((e=>t.filter((t=>t.category===e.key)))),i=t.filter((e=>!e.category||!V(n,(t=>t.key==e.category))));return a.push(i),a},r=i(e.dataSources),[s,o]=ot.useState(r),l=e.onRefresh(null,(()=>{if(!E(e.attributes.dataSources,t)){const t=i(e.dataSources);o(t)}}));ot.useEffect((()=>l()),[]);return!a&&n?null:ot.createElement("div",{className:Cn(["vertical-navigation","layer-high",{"vertical-nav-collapsed":!a}])},ot.createElement("h3",{className:"heading-2 horizontal middle nav-header sp-margin-m-xaxis sp-margin-l-top"},ot.createElement(Lh,{app:e}),ot.createElement("span",{className:"application-name text-semibold heading-2 sp-margin-m-left"},e.name)),ot.createElement("div",{className:"nav-content"},s.filter((e=>e.length)).map(((t,n)=>ot.createElement(vf,{key:`section-${n}`,dataSources:t,app:e}))),di.feature.pagerDuty&&e.attributes.pdApiKey&&ot.createElement("div",{className:"nav-section sp-padding-s-yaxis"},ot.createElement("div",{className:"page-category flex-container-h middle text-semibold sp-padding-s-yaxis clickable",onClick:()=>{yf.pageApplicationOwnerModal(e)}},ot.createElement("div",{className:"nav-row-item sp-margin-s-right"},a?ot.createElement(Bn,{className:"nav-item-icon",name:"spMenuPager",size:"medium",color:"danger"}):ot.createElement(Ps,{value:"Page App Owner",placement:"right"},ot.createElement("div",null,ot.createElement(Bn,{className:"nav-item-icon",name:"spMenuPager",size:"medium",color:"danger"})))),ot.createElement("span",{className:"nav-name"}," Page App Owner")))),ot.createElement("div",{className:"nav-bottom"},ot.createElement(qh,{app:e})))};oi(".application {\n display: flex;\n flex-direction: row;\n flex: 1 1 auto;\n overflow-y: hidden;\n}\n.glyphicon-cloud {\n top: 4px;\n}\n.application-actions {\n margin-bottom: 10px;\n padding-top: 5px;\n display: inline-block;\n float: right !important;\n}\n.filter-tags {\n padding: 5px 15px 0;\n}\n.filter-tags .filter-tag {\n border-radius: 2px;\n display: inline-block;\n padding: 3px 5px;\n margin-right: 10px;\n margin-bottom: 5px;\n background-color: var(--color-cirrus);\n font-size: 90%;\n}\n.filter-tags .filter-tag strong {\n font-weight: 600;\n text-transform: uppercase;\n}\n.filter-tags .filter-tag a {\n font-size: 90%;\n color: var(--color-dovegray);\n}\n.filter-tags .filter-toggle {\n background-color: var(--color-accent);\n border-radius: 2px;\n color: var(--color-white);\n cursor: pointer;\n display: inline-block;\n font-size: 90%;\n font-weight: 600;\n margin-bottom: 5px;\n margin-right: 10px;\n padding: 3px 5px;\n text-transform: uppercase;\n}\n.filter-tags .clear-filters {\n display: inline-block;\n margin-left: 5px;\n color: var(--color-mineshaft);\n font-size: 90%;\n}\n.select2-highlighted .icon {\n color: inherit;\n}\n.glyphicon-none:before {\n content: '\\e113';\n color: transparent !important;\n}\ninput[type='checkbox'],\ninput[type='radio'] {\n cursor: pointer;\n}\n.table-search-results-application .table-header .col-application,\n.table-search-results-application .table-row .col-application {\n width: 200px;\n}\n.table-search-results-application .table-header .col-account,\n.table-search-results-application .table-row .col-account,\n.table-search-results-application .table-header .col-accounts,\n.table-search-results-application .table-row .col-accounts {\n width: 250px;\n}\n.table-search-results-application .table-header .col-email,\n.table-search-results-application .table-row .col-email {\n width: 250px;\n}\n");class Nf extends ot.Component{constructor(e){super(e),this.apolloClient=Rh(),this.mountApplication(e.app)}componentWillUnmount(){this.unmountApplication(this.props.app)}componentWillReceiveProps(e){this.unmountApplication(this.props.app),this.mountApplication(e.app)}mountApplication(e){var t;e.notFound||e.hasError?bg.removeLastItem("applications"):(_c.application=e,(null==(t=e.attributes)?void 0:t.disableAutoRefresh)||(this.unsubscribeAppRefresh=this.props.app.subscribeToRefresh(this.apolloClient.onRefresh),e.enableAutoRefresh()))}unmountApplication(e){var t;e.notFound||e.hasError||(_c.application=void 0,null==(t=this.unsubscribeAppRefresh)||t.call(this),this.unsubscribeAppRefresh=void 0,e.disableAutoRefresh())}render(){const{app:e}=this.props;return ot.createElement("div",{className:"application"},!e.notFound&&!e.hasError&&ot.createElement(Mf,{app:e}),e.notFound&&ot.createElement("div",null,ot.createElement("h2",{className:"text-center"},"Application Not Found"),ot.createElement("p",{className:"text-center",style:{marginBottom:"20px"}},"Please check your URL - we can't find any data for ",ot.createElement("em",null,e.name),".")),e.hasError&&ot.createElement("div",null,ot.createElement("h2",{className:"text-center"},"Something went wrong"),ot.createElement("p",{className:"text-center",style:{marginBottom:"20px"}},"There was a problem loading ",ot.createElement("em",null,e.name),". Try checking your browser console for errors.")),ot.createElement(is,{app:e},ot.createElement(va,{client:this.apolloClient.client},ot.createElement("div",{className:"container scrollable-columns"},ot.createElement(Qn,{className:"secondary-panel",name:"insight"})))))}}class Df{static createApplicationForTests(e,...t){return new Qh(e,eo.createScheduler(),t)}static createStandaloneApplication(e){const t=new Qh(e,eo.createScheduler(),[]);return t.isStandalone=!0,t}static createNotFoundApplication(e){const t=new Qh(e,eo.createScheduler(),[{key:"serverGroups",lazy:!0,defaultData:[]}]);return t.notFound=!0,t}static createApplicationWithError(e){const t=new Qh(e,eo.createScheduler(),[{key:"serverGroups",lazy:!0,defaultData:[]}]);return t.hasError=!0,t}}const If=({app:e})=>{const[t,n]=ot.useState(hi.insightFilterStateModel.filtersExpanded),{filtersHidden:a}=hi.insightFilterStateModel,i=t?"filters-expanded":"filters-collapsed",r=ya(gf)?"nav-expanded":"nav-collapsed",{state:s}=Tn(),o=Boolean(Object.keys(s.views).find((e=>-1!==e.indexOf("detail@")))),l=o?"details-open":"details-closed";return e.notFound||e.hasError?null:ot.createElement("div",{className:`insight ${i} ${r} ${l}`},!a&&ot.createElement("div",{onClick:()=>{hi.insightFilterStateModel.pinFilters(!t),n(!t)}},ot.createElement(od,null)),!a&&t&&ot.createElement("div",null,ot.createElement(Qn,{name:"nav",className:"nav ng-scope"})),ot.createElement("div",{className:"flex-1"},ot.createElement(Qn,{name:"master",className:"nav-content ng-scope","data-scroll-id":"nav-content"}),o&&ot.createElement("div",null,ot.createElement(Qn,{name:"detail",className:"detail-content"}))))};class Ff{constructor(e){this.stateConfigProvider=e,this.childStates=[],this.detailStates=[],this.insightStates=[],this.insightState={name:"insight",abstract:!0,views:{insight:{component:If,$type:"react"}},resolve:{app:["app",e=>e]},children:this.insightStates},this.childStates.push(this.insightState)}addChildState(e){this.childStates.push(e),this.stateConfigProvider.setStates()}addInsightState(e){this.insightStates.push(e),e.children=this.detailStates,this.stateConfigProvider.setStates()}addInsightDetailState(e){this.detailStates.push(e),this.insightState.children.forEach((t=>{t.children=t.children||[],t.children.some((t=>t.name===e.name))||t.children.push(e)})),this.stateConfigProvider.setStates()}addParentState(e,t,n=""){const a={name:"application",url:`${n}/:application`,redirectTo:e=>e.injector().getAsync("app").then((t=>{var n;const a=null==(n=t.dataSources.find((e=>e.sref&&!e.disabled)))?void 0:n.sref,i=e.params(),r={relative:a?e.to().name:void 0};return e.router.stateService.target(a||"home.search",i,r)})),resolve:{app:["$stateParams",e=>Jg.getApplication(e.application,!1).then((t=>(Vg.checkIfInferredAndWarn(t),t||Df.createNotFoundApplication(e.application)))).catch((t=>t.status&&404===t.status?Df.createNotFoundApplication(e.application):(console.error(t),Df.createApplicationWithError(e.application))))]},data:{pageTitleMain:{field:"application"},history:{type:"applications",state:"home.applications.application",keyParams:["application"]}},children:this.childStates,views:{}};a.views[t]={component:Nf,$type:"react"},e.children.push(a),this.stateConfigProvider.setStates()}$get(){return this}}Ff.$inject=["stateConfigProvider"];const Tf="spinnaker.core.application.state.provider";n(Tf,[Pg]).provider("applicationState",Ff);class Qf extends ot.Component{render(){const{isValid:e,isDirty:t,isSaving:n,saveError:a,onRevertClicked:i,onSaveClicked:r}=this.props;if(!t)return ot.createElement("div",{className:"row footer"},ot.createElement("div",{className:"col-md-12 text-right"},ot.createElement("span",{className:"btn btn-link disabled"},ot.createElement("span",{className:"far fa-check-circle"})," In sync with server")));const s=ot.createElement("button",{className:"btn btn-primary "+(e?"":"disabled"),onClick:r},ot.createElement("span",null,ot.createElement("span",{className:"far fa-check-circle"})," Save Changes")),o=ot.createElement("button",{className:"btn btn-primary",disabled:!0},ot.createElement("span",{className:"pulsing"},ot.createElement(bs,{size:"nano"})," Savingβ¦"));return ot.createElement("div",{className:"row footer"},ot.createElement("div",{className:"col-md-3"},ot.createElement("button",{className:"btn btn-default",onClick:i,style:{visibility:"visible"}},ot.createElement("span",{className:"glyphicon glyphicon-flash"})," Revert")),ot.createElement("div",{className:"col-md-9 text-right"},n?o:s,!!a&&ot.createElement("div",{className:"error-message"},"There was an error saving your changes. Please try again.")))}}class Pf{static createApplication(e){const t=this.buildJobs(e,"createApplication",p);return tp.executeTask({job:t,application:e,description:"Create Application: "+e.name})}static updateApplication(e){const t=this.buildJobs(e,"updateApplication",p);return tp.executeTask({job:t,application:e,description:"Update Application: "+e.name})}static deleteApplication(e){const t=this.buildJobs(e,"deleteApplication",(e=>({name:e.name})));return tp.executeTask({job:t,application:e,description:"Deleting Application: "+e.name}).then((t=>(bg.removeByAppName(e.name),t))).catch((e=>e))}static buildJobs(e,t,n){const a=[],i=n(e);return e.cloudProviders&&(i.cloudProviders=e.cloudProviders.join(",")),delete i.accounts,a.push({type:t,application:i}),a}}class Rf{revert(){r(this.viewState.originalConfig,this.config),this.viewState.isDirty=!1}saveSuccess(){this.viewState.originalConfig=p(this.config),this.viewState.originalStringVal=s(this.config),this.viewState.isDirty=!1,this.viewState.saving=!1,this.application.attributes[this.configField]=this.config}saveError(){this.viewState.saving=!1,this.viewState.saveError=!0}save(){this.viewState.saving=!0,this.viewState.saveError=!1;const e={name:this.application.name,accounts:this.application.attributes.accounts};e[this.configField]=this.config,Pf.updateApplication(e).then((()=>this.saveSuccess()),(()=>this.saveError()))}}const Uf={bindings:{application:"=",config:"=",viewState:"=",configField:"@",revert:"&?",afterSave:"&?",saveDisabled:"<"},controller:Rf,templateUrl:"core/src/application/config/footer/configSectionFooter.component.html"},zf="spinnaker.core.application.config.section.footer.component";n(zf,[]).component("configSectionFooter",Uf),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/application/config/footer/configSectionFooter.component.html",'<div class="row footer">\n <div class="col-md-3">\n <button\n class="btn btn-default"\n ng-click="$ctrl.revert()"\n ng-if="$ctrl.viewState.isDirty"\n style="visibility: visible"\n >\n <span class="glyphicon glyphicon-flash"></span> Revert\n </button>\n </div>\n <div class="col-md-9 text-right">\n <button\n class="btn btn-primary"\n ng-if="$ctrl.viewState.isDirty"\n ng-click="$ctrl.save()"\n ng-disabled="$ctrl.saveDisabled"\n >\n <span ng-if="!$ctrl.viewState.saving"> <span class="far fa-check-circle"></span> Save Changes </span>\n <span ng-if="$ctrl.viewState.saving" class="pulsing">\n <span class="fa fa-cog fa-spin"></span> Saving…\n </span>\n </button>\n <div class="error-message" ng-if="$ctrl.viewState.saveError">\n There was an error saving your changes. Please try again.\n </div>\n <span ng-if="!$ctrl.viewState.isDirty" class="btn btn-link disabled"\n ><span class="far fa-check-circle"></span> In sync with server</span\n >\n </div>\n</div>\n')}]);const Gf=()=>!0;class jf{static getMonikers(e,t=Gf){const n=e.map((e=>e.getDataSource("serverGroups").data.filter(t).map((e=>e.moniker))));return ce(T(n))}static getRegions(e,t=Gf){const n=e.map((e=>e.getDataSource("serverGroups").data.filter(t).map((e=>e.region))));return f(ce(T(n))).sort()}static getStacks(e,t=Gf){const n=e.map((e=>e.getDataSource("serverGroups").data.filter(t).map((e=>e.stack))));return f(ce(T(n))).sort()}static getClusters(e,t=Gf){const n=e.map((e=>e.getDataSource("serverGroups").data.filter(t).map((e=>e.cluster))));return f(ce(T(n))).sort()}static getAsgs(e,t=Gf){const n=e.map((e=>e.getDataSource("serverGroups").data.filter(t).map((e=>e.name))));return f(ce(T(n))).sort()}static getZones(e,t=Gf,n=Gf,a=Gf){const i=e.map((e=>e.getDataSource("serverGroups").data.filter(t).filter(n).filter(a).map((e=>e.instances)))),r=T(T(i)).map((e=>e.availabilityZone));return f(ce(r)).sort()}static getInstances(e,t=Gf,n=Gf,a=Gf){const i=e.map((e=>e.getDataSource("serverGroups").data.filter(t).filter(n).map((e=>e.instances))));return f(ce(T(T(i)).filter(a)))}static clusterFilterForCredentials(e){return t=>!e||t.account===e}static monikerClusterNameFilter(e){return t=>t.moniker.cluster===e}static clusterFilterForCredentialsAndRegion(e,t){return n=>{const a=!e||n.account===e,i=n&&Array.isArray(t)&&t.length?t.includes(n.region):!t||n.region===t;return a&&i}}}class Lf{static registerValidator(e,t){this.providerMap.has(e)||this.providerMap.set(e,[]),this.providerMap.get(e).push(t)}static setValidators(e,t){this.providerMap.set(e,t)}static validate(e,t){return Di.listProviders().then((n=>{const a=t&&t.length?t:n,i=[],r=[];return a.forEach((t=>{this.providerMap.has(t)&&this.providerMap.get(t).forEach((n=>{const a=n.validate(e);a.warnings.forEach((e=>r.push({cloudProvider:t,message:e}))),a.errors.forEach((e=>i.push({cloudProvider:t,message:e})))}))})),{errors:i,warnings:r}}))}}Lf.providerMap=new Map;const Of="infrastructure",Yf="delivery";Ef.register({key:Yf,label:"Delivery",icon:"fa fa-fw fa-xs fa-tasks",primary:!0,order:100}),Ef.register({key:Of,label:"Infrastructure",icon:"fa fa-fw fa-xs fa-cloud",primary:!0,order:200});oi(".user-menu .dropdown-toggle {\n background-color: var(--color-primary);\n border: none;\n box-shadow: none;\n color: var(--color-white);\n font-weight: 200;\n padding: var(--padd);\n}\n.user-menu .dropdown-menu {\n top: 80%;\n min-width: 125px;\n border: 0;\n}\n@media (max-width: 480px) {\n .user-menu .dropdown-menu {\n position: static;\n }\n}\n");const $f=()=>{const e=ri.getAuthenticatedUser(),t=e.authenticated;return di.authEnabled?st.createElement("div",{className:"user-menu"},st.createElement(tn,{id:"user-menu-dropdown"},st.createElement(tn.Toggle,null,st.createElement("i",{className:"hidden-lg glyphicon glyphicon-user"}),st.createElement("span",{className:"hidden-xs hidden-sm hidden-md"},e.name)),t&&st.createElement(tn.Menu,null,st.createElement("li",{className:"sp-padding-xs",onClick:()=>Ai.logOut()},"Log Out")))):null},Hf={};var Vf=Object.defineProperty,Jf=Object.getOwnPropertyDescriptor;let Wf=class extends ot.Component{render(){return ot.createElement(ta,null,ot.createElement(Kf,{app:this.props.app}))}};Wf=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Jf(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&Vf(t,n,r),r})([ys("core.insight.banners")],Wf);const Kf=({app:e})=>{const{state:t}=Tn(),n=(di.banners||[]).filter((e=>{const n=e.routes.some((e=>t.name.includes(e)));return e.active&&n&&Boolean(Hf[e.key])})).map((t=>{const n=Hf[t.key];return ot.createElement(n,{key:`banner-${t.key}`,app:e})}));return n.length?ot.createElement("div",{className:"sp-margin-sm vertical"},n):null};class qf{static listCertificates(){return Si("/certificates").get()}static listCertificatesByProvider(e){return Si("/certificates").path(e).get()}}class Xf extends ot.Component{constructor(e){super(e),this.PopoverContent=()=>{const{ttl:e}=this.state,t=!!e&&Date.now()>e,n=sr(e);return ot.createElement("div",null,"This server group ",t?"was scheduled to be":"will be"," automatically destroyed"," ",ot.createElement("strong",null,n),".")},this.state=this.getState(e)}getState(e){const t=e.entity&&e.entity.entityTags;if(t){const e=t.tags.filter((e=>"spinnaker:ttl"===e.name))[0];if(e)return{ttl:e.value.expiry}}return{}}componentWillReceiveProps(e){this.setState(this.getState(e))}render(){const{ttl:e}=this.state;return e?ot.createElement("span",{className:"tag-marker small"},ot.createElement(qs,{Component:this.PopoverContent,title:"Ephemeral Server Group",className:"ephemeral-popover"},ot.createElement("i",{className:"ephemeral fa fa-clock"}))):null}}class Zf extends ot.Component{constructor(){super(...arguments),this.getAlertAnalyticsLabel=()=>{const{entity:e,pageLocation:t,entityType:n}=this.props,a=e.entityTags,{account:i,region:r,entityId:s}=a.entityRef;return[t,n,i,r,s,r,a.alerts.map((e=>e.name)).join(",")].join(":")},this.getNoticeAnalyticsLabel=()=>{const{entity:e,pageLocation:t,entityType:n}=this.props,a=e.entityTags,{account:i,region:r,entityId:s}=a.entityRef;return[t,n,i,r,s,a.notices.map((e=>e.name)).join(",")].join(":")}}render(){const{entity:e,application:t,placement:n,hOffsetPercent:a,className:i,onUpdate:r}=this.props,s=e&&e.entityTags,o=s?[s]:[];return ot.createElement("div",{className:"entity-notifications"},ot.createElement(df,{entity:e,tags:o,application:t,type:"alerts",gaLabelFn:this.getAlertAnalyticsLabel,grouped:!1,categorized:!0,className:i,placement:n,hOffsetPercent:a,onUpdate:r}),ot.createElement(df,{entity:e,tags:o,application:t,type:"notices",gaLabelFn:this.getNoticeAnalyticsLabel,grouped:!1,categorized:!1,className:i,placement:n,hOffsetPercent:a,onUpdate:r}),ot.createElement(Xf,{entity:e}))}}Zf.defaultProps={placement:"bottom",hOffsetPercent:"50%",className:"",onUpdate:qi};class _f{static pauseResourceManagement(e){return Si("/managed/resources").path(e,"pause").post()}static resumeResourceManagement(e){return Si("/managed/resources").path(e,"pause").delete()}}var ev,tv;(tv=ev||(ev={})).ACTUATING="ACTUATING",tv.CREATED="CREATED",tv.DIFF="DIFF",tv.DIFF_NOT_ACTIONABLE="DIFF_NOT_ACTIONABLE",tv.CURRENTLY_UNRESOLVABLE="CURRENTLY_UNRESOLVABLE",tv.MISSING_DEPENDENCY="MISSING_DEPENDENCY",tv.ERROR="ERROR",tv.HAPPY="HAPPY",tv.PAUSED="PAUSED",tv.RESUMED="RESUMED",tv.UNHAPPY="UNHAPPY",tv.UNKNOWN="UNKNOWN",tv.WAITING="WAITING",tv.DELETING="DELETING";const nv=()=>ot.createElement("p",null,ot.createElement("div",{className:"horizontal top sp-padding-m alert alert-warning"},ot.createElement("i",{className:"fa fa-exclamation-triangle sp-margin-m-right sp-margin-xs-top"}),ot.createElement("span",null,"Pausing management will not interrupt the action Spinnaker is currently performing to resolve the difference from desired state."))),av=({isPaused:e,isActuating:t,regions:n})=>e?ot.createElement(ot.Fragment,null,ot.createElement("p",null,"Spinnaker will resume taking action to correct differences from the desired state."),ot.createElement(iv,{isPaused:!0,regions:n})):ot.createElement(ot.Fragment,null,ot.createElement("p",null,"While a resource is paused, Spinnaker will not take action to correct differences from the desired state."),t&&ot.createElement(nv,null),ot.createElement(iv,{isPaused:!0,regions:n})),iv=({isPaused:e,regions:t})=>t.length<2?null:ot.createElement("div",{className:"horizontal top sp-padding-m alert alert-warning"},ot.createElement("i",{className:"fa fa-exclamation-triangle sp-margin-m-right sp-margin-xs-top"}),ot.createElement("span",null,e?"Resuming":"Pausing"," management of this resource will affect the following regions:"," ",ot.createElement("b",null,t.join(", ")),"."));oi(".ManagedResourceStatusIndicator .HoverablePopover {\n display: flex;\n}\n.ManagedResourceStatusIndicator .info {\n background-color: var(--color-status-info);\n}\n.ManagedResourceStatusIndicator .warning {\n background-color: var(--color-status-warning);\n}\n.ManagedResourceStatusIndicator .error {\n background-color: var(--color-status-error);\n}\n.ManagedResourceStatusIndicator .square {\n padding: 0 8px;\n font-size: 20px;\n}\n.ManagedResourceStatusIndicator .circle {\n padding: 4px;\n font-size: 14px;\n border-radius: 50%;\n}\n");const rv=(e,t)=>{const{managedResourceSummary:n,isManaged:a}=e;if(!a||!n||n.isPaused)return Ze.when(!0);return lp.confirm({header:"Pause Management?",bodyContent:ot.createElement(lv,{resourceSummary:n}),account:n.locations.account,buttonText:"Pause management",submitMethod:()=>_f.pauseResourceManagement(n.id).then((()=>t.managedResources.refresh(!0)))}).then((()=>!0),(()=>!1))},sv=(e,t,n)=>{null==n||n();const{id:a,isPaused:i}=e;return lp.confirm({header:`Really ${i?"resume":"pause"} resource management?`,bodyContent:ot.createElement(av,{isActuating:e.status===ev.ACTUATING,isPaused:i,regions:ov(e)}),account:e.locations.account,buttonText:(i?"Resume":"Pause")+" management",submitMethod:()=>(i?_f.resumeResourceManagement(a):_f.pauseResourceManagement(a)).then((()=>t.managedResources.refresh(!0)))})},ov=e=>e.locations.regions.map((e=>e.name)).sort(),lv=({resourceSummary:e})=>{const{status:t}=e;return ot.createElement(ot.Fragment,null,ot.createElement("p",null,"π ",ot.createElement("b",null,"Spinnaker is managing this resource.")),ot.createElement("p",null,"If you need to temporarily stop Spinnaker from managing this resource β for example, if something is wrong and manual intervention is required β you can pause management and resume it later."),t===ev.ACTUATING&&ot.createElement(nv,null),ot.createElement(iv,{isPaused:!0,regions:ov(e)}))},cv=({app:e,formik:t})=>{const[n,a]=ot.useState(!1),i=t.values,r=ot.useCallback((()=>{const{resourceSummary:n,backingData:i}=t.values;n&&sv(n,e).then((()=>{var n,r;i.managedResources=null==(r=null==(n=e.getDataSource("managedResources"))?void 0:n.data)?void 0:r.resources,a(!0),t.setFieldValue("resourceSummary",null)}),(()=>{}))}),[e,t]);return i.resourceSummary||n?n?ot.createElement("div",{className:"alert alert-info"},ot.createElement("div",{className:"horizontal top"},ot.createElement("div",null,ot.createElement("i",{className:"fa fa-check-circle"})),ot.createElement("div",{className:"sp-margin-m-left"},"Resource management has been paused."))):ot.createElement("div",{className:"alert alert-danger"},ot.createElement("p",null,ot.createElement("b",null,"π Spinnaker is managing this resource.")),ot.createElement("p",null,"Any changes you make to this cluster will be overridden in favor of the desired state."),ot.createElement("p",null,"If you need to manually deploy a new version of this server group, you should pause management."),ot.createElement("div",{className:"sp-margin-m-top"},ot.createElement("button",{className:"passive",onClick:r},ot.createElement("i",{className:"fa fa-pause"})," Pause management"))):null},pv=({resource:e,application:t,onClick:n,children:a})=>{if(!e)return null;const i=e.isManaged&&(!e.managedResourceSummary||e.managedResourceSummary.isPaused),r=t.isManagementPaused,s=e.isManaged&&!i&&!r;return ot.createElement(an,{onClick:()=>(s?rv(e,t):Ze.when(!0)).then((e=>{e&&(null==n||n())}))},a)};class dv{constructor(e){this.handlers={};for(const t of e)this.registerHandler(t)}normalizeKind(e){return e.split("@")[0]}getHandler(e){return this.handlers[e]||this.handlers[this.normalizeKind(e)]}isSupported(e){return Boolean(this.getHandler(e))}registerHandler(e){this.handlers[e.kind]=e,this.handlers[this.normalizeKind(e.kind)]=e}}const uv=new class extends dv{getIcon(e){var t,n;return null!=(n=null==(t=this.getHandler(e))?void 0:t.iconName)?n:"placeholder"}getExperimentalDisplayLink(e){var t,n;return null==(n=null==(t=this.getHandler(e.kind))?void 0:t.experimentalDisplayLink)?void 0:n.call(t,e)}getSpinnakerType(e){var t;const n=this.normalizeKind(e);return(null==(t=n.split("/"))?void 0:t[1])||n}getNativeResourceRoutingInfo({kind:e,account:t,stack:n,detail:a,displayName:i}){const r={acct:t,stack:n,detail:a,q:i};switch(this.getSpinnakerType(e)){case"cluster":return{state:"home.applications.application.insight.clusters",params:r};case"security-group":return{state:"home.applications.application.insight.firewalls",params:r};case"classic-load-balancer":case"application-load-balancer":return{state:"home.applications.application.insight.loadBalancers",params:r}}}}([{kind:"titus/cluster",iconName:"cluster"},{kind:"ec2/cluster",iconName:"cluster"},{kind:"ec2/security-group",iconName:"securityGroup"},{kind:"ec2/classic-load-balancer",iconName:"loadBalancer"},{kind:"ec2/application-load-balancer",iconName:"loadBalancer"}]),mv=/^(.*)\[(.*)\]$/i,gv=e=>uv.getSpinnakerType(e),hv=e=>{switch(e){case"classic":return"classic-load-balancer";case"application":return"application-load-balancer";default:return null}};class fv{static decorateResources(e){return e.applicationPaused&&e.resources.forEach((e=>e.status=ev.PAUSED)),e.resources.forEach((e=>e.isPaused=e.status===ev.PAUSED)),e}static getApplicationSummary(e){return Si("/managed/application").path(e).query({entities:"resources"}).get().then(this.decorateResources)}static getResourceHistory(e){return Si("/history").path(e).query({limit:100}).get().then((e=>(e.forEach((e=>{var t;e.delta&&(e.delta=(t=e.delta)?Object.keys(t).reduce(((e,n)=>{const a=t[n],i=`["${Ce(n.split("/").filter(Boolean),(e=>{if(e.startsWith("{")&&e.endsWith("}"))return e.substring(1,e.length-1);const t=e.match(mv);return t?[t[1],t[2]]:e})).join('"]["fields"]["')}"]`,r=m(e,i);return g(e,i,{...r,key:n,diffType:a.state,actual:a.current,desired:a.desired}),e}),{}):{})})),e)))}}const vv=(e,t)=>e&&t&&e.app===t.app&&e.stack===t.stack&&e.detail===t.detail,Av=(e,t)=>e.managedResources.data.resources.filter((({kind:e})=>t.includes(gv(e)))),Ev=e=>{if(!di.feature.managedResources)return;const t=Av(e,["cluster"]);e.serverGroups.data.forEach((e=>{const n=t.find((({moniker:t,locations:{account:n,regions:a}})=>vv(t,e.moniker)&&n===e.account&&a.some((({name:t})=>t===e.region))));e.isManaged=!!n,e.managedResourceSummary=n})),e.serverGroups.dataUpdated()},bv=e=>{if(!di.feature.managedResources)return;const t=Av(e,["classic-load-balancer","application-load-balancer"]);e.loadBalancers.data.forEach((e=>{const n=t.find((({kind:t,moniker:n,locations:{account:a,regions:i}})=>e.loadBalancerType&&gv(t)===hv(e.loadBalancerType)&&vv(n,e.moniker)&&a===e.account&&i.some((({name:t})=>t===e.region))));e.isManaged=!!n,e.managedResourceSummary=n})),e.loadBalancers.dataUpdated()},yv=e=>{if(!di.feature.managedResources)return;const t=Av(e,["security-group"]);e.securityGroups.data.forEach((e=>{const n=t.find((({moniker:t,locations:{account:n,regions:a}})=>vv(t,e.moniker)&&n===e.account&&a.some((({name:t})=>t===e.region))));e.isManaged=!!n,e.managedResourceSummary=n})),e.securityGroups.dataUpdated()};const{memo:Cv}=ot,wv=(e,t,n)=>(Object.keys(e).sort(((e,t)=>e.localeCompare(t))).forEach((a=>{const{key:i,diffType:r,actual:s,desired:o,fields:l}=e[a];n.push({key:i,name:a,depth:t,actual:s,desired:o,type:r,isLeafNode:!l}),l&&wv(l,t+1,n)})),n),xv=Cv((({diff:e})=>{const t=(e=>wv(e,0,[]))(e);return ot.createElement(sc,{layout:mc,columns:["configuration","change","actual","desired"]},t.map((({key:e,name:t,depth:n,isLeafNode:a,type:i,actual:r,desired:s})=>ot.createElement(pc,{key:e},ot.createElement(uc,{indent:n},ot.createElement(yc,null,t)),ot.createElement(uc,null,a&&ot.createElement(yc,{className:"text-italic"},i.toLowerCase())),ot.createElement(uc,null,ot.createElement(bc,null,r)),ot.createElement(uc,null,ot.createElement(bc,null,s))))))})),kv={delayShow:400,delayHide:100},Bv={size:"medium",fullWidth:!0},Sv={root:"https://www.spinnaker.io/guides/user/managed-delivery",pinning:"https://www.spinnaker.io/guides/user/managed-delivery/pinning/",gettingStarted:"https://www.spinnaker.io/guides/user/managed-delivery/getting-started/",markAsBad:"https://www.spinnaker.io/guides/user/managed-delivery/marking-as-bad/",resourceStatus:"https://www.spinnaker.io/guides/user/managed-delivery/resource-status/"},Mv=e=>{var t,n;return(null==(n=null==(t=di.managedDelivery)?void 0:t.urls)?void 0:n[e])||Sv[e]},Nv=di.feature.displayTimestampsInUserLocalTime?void 0:di.defaultTimeZone,Dv=({startedAt:e,completedAt:t})=>{const[,n]=ot.useState(!1);ol((()=>{t||n((e=>!e))}),t?0:1e3);const a=En.fromISO(e),i=t?En.fromISO(t):En.utc();return ot.createElement(ot.Fragment,null,ir(a,i))},Iv=(e,t)=>{const n=Fv(e),a=t?" ago":"";if(n.years||n.months){let t=En.local();return Nv&&(t=t.setZone(Nv)),e.year===t.year?e.toFormat("MMM d"):e.toFormat("MMM d, y")}return n.days?n.toFormat("d")+"d"+a:n.hours?n.toFormat("h")+"h"+a:n.minutes?n.toFormat("m")+"m"+a:n.seconds?n.toFormat("s")+"s"+a:null},Fv=e=>e.diffNow().negate().shiftTo("years","months","days","hours","minutes","seconds"),Tv=mt((({timestamp:e,clickToCopy:t,delayShow:n,removeStyles:a,withSuffix:i=!1})=>{const r=(e=>"number"==typeof e?En.fromMillis(e):"string"==typeof e?En.fromISO(e):e)(e),s=Nv?r.setZone(Nv):r,[o,l]=dt(Iv(s,i)),c=()=>{l(Iv(s,i))};if(ol(c,1e3),lt(c,[s]),!o)return null;const p=s.toFormat("yyyy-MM-dd HH:mm:ss ZZZZ"),d=ot.createElement("span",{className:a?void 0:"text-regular text-italic",style:a?void 0:{fontSize:13,lineHeight:1}},o);return t?ot.createElement(zi,{buttonInnerNode:d,text:p,toolTip:`${p} (click to copy)`}):ot.createElement(Ps,{value:p,delayShow:n},d)})),Qv={WARNING:"event-warning",ERROR:"event-error",SUCCESS:"event-success"},Pv=({level:e,diff:t,tasks:n,dismissModal:a,message:i})=>ot.createElement("div",{className:"flex-container-v left"},i&&ot.createElement("div",{className:Cn("sp-padding-xs-yaxis",Qv[e])},i),n&&ot.createElement("div",{className:"flex-container-v"},n.map((({id:e,name:t})=>ot.createElement(Dn,{key:e,to:"home.applications.application.tasks.taskDetails",params:{taskId:e}},ot.createElement("a",{className:"sp-padding-xs-yaxis",onClick:()=>null==a?void 0:a()},t))))),t&&ot.createElement(xv,{diff:t})),Rv=ot.memo((({event:e,dismissModal:t})=>{const{timestamp:n,delta:a,tasks:i,message:r,reason:s,exceptionMessage:o,level:l}=e,c=ot.useMemo((()=>En.fromISO(n)),[n]),p=a||i||r||s||o;return ot.createElement(pc,{renderExpandedContent:p?()=>ot.createElement(Pv,{level:e.level,diff:a,tasks:i,message:r||s||o,dismissModal:t}):void 0},ot.createElement(uc,null,ot.createElement("span",{className:Cn(Qv[l]||"event-info","event-level")},e.level)),ot.createElement(uc,null,ot.createElement("span",{className:"event-type"},e.displayName)),ot.createElement(uc,null,ot.createElement("div",{className:"flex-container-h middle wrap"},ot.createElement(Tv,{timestamp:c,clickToCopy:!0}))))}),xa);oi(".ManagedResourceHistoryModal {\n width: 100%;\n}\n.ManagedResourceHistoryModal .event-type {\n color: var(--color-charcoal);\n}\n.ManagedResourceHistoryModal .event-level {\n font-size: 12px;\n line-height: 1;\n}\n.ManagedResourceHistoryModal .event-type-icon {\n font-size: 18px;\n}\n.ManagedResourceHistoryModal .event-time {\n white-space: nowrap;\n}\n.ManagedResourceHistoryModal .event-info {\n color: var(--color-charcoal);\n}\n.ManagedResourceHistoryModal .event-success {\n color: var(--color-success);\n}\n.ManagedResourceHistoryModal .event-warning {\n color: var(--color-alert);\n}\n.ManagedResourceHistoryModal .event-error {\n color: var(--color-danger);\n}\n.ManagedResourceHistoryModal .loading-error-message {\n color: var(--color-danger);\n}\n");const Uv=e=>Xl(Gv,e),zv=Ac([{unit:"px",size:70},8,1.5]),Gv=({id:e,displayName:t,dismissModal:n})=>{const{status:a,result:i,refresh:r}=pl((()=>fv.getResourceHistory(e)),null,1e4,[]),s=!i&&["NONE","PENDING"].includes(a),o=!s&&"REJECTED"!==a;return ot.createElement(ot.Fragment,null,ot.createElement(Wl,null,"Resource history - ",t),ot.createElement(Kl,null,ot.createElement("div",{className:Cn("ManagedResourceHistoryModal",{"flex-container-h middle center flex-grow":!o})},s&&ot.createElement(bs,{size:"medium"}),"REJECTED"===a&&ot.createElement("div",{className:"flex-container-v middle center"},ot.createElement("div",{className:"loading-error-message text-semibold sp-margin-m-bottom"},"Something went wrong."),ot.createElement("button",{className:"btn btn-default",onClick:r},ot.createElement("i",{className:"fa fa-xs fa-sync-alt sp-margin-xs-right"})," Try again")),o&&ot.createElement("div",{className:"sp-margin-xl-bottom"},ot.createElement(sc,{layout:zv,columns:["Level","Event","Time"],expandable:null==i?void 0:i.some((({delta:e,tasks:t,message:n,reason:a,exceptionMessage:i})=>e||t||n||a||i))},(i||[]).map((e=>ot.createElement(Rv,{key:e.type+e.timestamp,event:e,dismissModal:n}))))))))};oi(".ManagedResourceDetailsIndicator {\n background-color: var(--color-mineshaft);\n color: var(--color-white);\n}\n\n.ManagedResourceDetailsIndicator .md-logo {\n background-color: var(--color-black);\n padding: 18px;\n}\n\n.ManagedResourceDetailsIndicator .summary-message {\n font-size: 12px;\n font-weight: 300;\n}\n\n.ManagedResourceDetailsIndicator .resource-actions > .dropdown-toggle {\n color: var(--color-white);\n background-color: transparent;\n padding: 3px 10px;\n}\n");const jv=(e,t)=>Ui.log({category:"Managed Resource Menu",action:`${e} clicked`,data:{label:t}}),Lv=({resourceSummary:e,application:t})=>{if(!e)return null;const{id:n,isPaused:a}=e,i=ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker is managing this resource.")),ot.createElement("p",null,"If a difference from the desired state is detected, Spinnaker will act to correct it."," ",ot.createElement("a",{target:"_blank",onClick:()=>jv("Learn More",n),href:Mv("root")},"Learn More"))),r=`\n <p>Resource management is currently disabled for the entire application.\n <a\n href=${hi.$state.href("home.applications.application.config",{section:"managed-resources"})}\n >\n Resume application management\n </a>\n</p>`;return ot.createElement("div",{className:"flex-container-h middle ManagedResourceDetailsIndicator"},ot.createElement(qs,{template:i,placement:"left"},ot.createElement("div",{className:"md-logo flex-container-h middle"},ot.createElement("img",{src:"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%2014.37557%2015.52748%22%3E%20%20%3Cdefs%3E%20%20%20%20%3Cstyle%3E%20%20%20%20%20%20.a%20%7B%20%20%20%20%20%20%20%20fill%3A%20%23de4d53%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.b%20%7B%20%20%20%20%20%20%20%20fill%3A%20%23eeac3c%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.c%20%7B%20%20%20%20%20%20%20%20fill%3A%20%2396c25e%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.d%20%7B%20%20%20%20%20%20%20%20fill%3A%20%2349a9df%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.e%20%7B%20%20%20%20%20%20%20%20fill%3A%20%238f429b%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.f%20%7B%20%20%20%20%20%20%20%20opacity%3A%200.25%3B%20%20%20%20%20%20%20%20fill%3A%20url%28%23a%29%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.g%20%7B%20%20%20%20%20%20%20%20fill%3A%20url%28%23b%29%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.h%20%7B%20%20%20%20%20%20%20%20fill%3A%20url%28%23c%29%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.i%20%7B%20%20%20%20%20%20%20%20fill%3A%20%23fff%3B%20%20%20%20%20%20%7D%20%20%20%20%3C%2Fstyle%3E%20%20%20%20%3ClinearGradient%20id%3D%22a%22%20x1%3D%225.51119%22%20y1%3D%229.27236%22%20x2%3D%225.9233%22%20y2%3D%229.32662%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.26839%22%20stop-color%3D%22%23441b19%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.73261%22%20stop-color%3D%22%23441b19%22%20stop-opacity%3D%220%22%2F%3E%20%20%20%20%3C%2FlinearGradient%3E%20%20%20%20%3ClinearGradient%20id%3D%22b%22%20x1%3D%225.00789%22%20y1%3D%227.58774%22%20x2%3D%227.13963%22%20y2%3D%226.85373%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.21861%22%20stop-color%3D%22%234b0726%22%20stop-opacity%3D%220%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%221%22%20stop-color%3D%22%234b0726%22%20stop-opacity%3D%220.6%22%2F%3E%20%20%20%20%3C%2FlinearGradient%3E%20%20%20%20%3ClinearGradient%20id%3D%22c%22%20x1%3D%224.24719%22%20y1%3D%2215.7319%22%20x2%3D%226.15272%22%20y2%3D%220.21263%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.35048%22%20stop-color%3D%22%23ff0%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.40939%22%20stop-color%3D%22%23ffff1c%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.53687%22%20stop-color%3D%22%23ffff64%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.72174%22%20stop-color%3D%22%23ffffd5%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.7878%22%20stop-color%3D%22%23fff%22%2F%3E%20%20%20%20%3C%2FlinearGradient%3E%20%20%3C%2Fdefs%3E%20%20%3Cpath%20class%3D%22a%22%20d%3D%22M5.7%2C15.16747a.5.5%2C0%2C0%2C0%2C.43.56H6.2a.50007.50007%2C0%2C0%2C0%2C.5-.44L7.91827%2C6.45482%2C7.198%2C4.30693Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpath%20class%3D%22b%22%20d%3D%22M6.58716%2C1.48546%2C4.7%2C15.16747a.5.5%2C0%2C0%2C0%2C.43.56H5.2a.50007.50007%2C0%2C0%2C0%2C.5-.44L7.3075%2C3.63335Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpath%20class%3D%22c%22%20d%3D%22M3.20043%2C15.72258a.557.557%2C0%2C0%2C1-.06885-.00488.49923.49923%2C0%2C0%2C1-.42676-.56348l2-14.50049A.49241.49241%2C0%2C0%2C1%2C5.2683.227a.4995.4995%2C0%2C0%2C1%2C.42676.56348l-2%2C14.50049A.49982.49982%2C0%2C0%2C1%2C3.20043%2C15.72258Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpath%20class%3D%22d%22%20d%3D%22M2.20043%2C15.72258a.557.557%2C0%2C0%2C1-.06885-.00488.49923.49923%2C0%2C0%2C1-.42676-.56348l2-14.50049A.49241.49241%2C0%2C0%2C1%2C4.2683.227a.4995.4995%2C0%2C0%2C1%2C.42676.56348l-2%2C14.50049A.49982.49982%2C0%2C0%2C1%2C2.20043%2C15.72258Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpath%20class%3D%22e%22%20d%3D%22M1.20043%2C15.72258a.557.557%2C0%2C0%2C1-.06885-.00488.49923.49923%2C0%2C0%2C1-.42676-.56348l2-14.50049A.49241.49241%2C0%2C0%2C1%2C3.2683.227a.4995.4995%2C0%2C0%2C1%2C.42676.56348l-2%2C14.50049A.49982.49982%2C0%2C0%2C1%2C1.20043%2C15.72258Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpath%20class%3D%22f%22%20d%3D%22M6.6712%2C3.77776%2C6.397%2C2.95122l-1.68982%2C12.242a.49324.49324%2C0%2C0%2C0%2C.21478.43933.51145.51145%2C0%2C0%2C0%2C.16754-.31134Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpolygon%20class%3D%22g%22%20points%3D%225.692%202.719%205.02%207.591%206.46%2011.721%207.11%207.005%205.692%202.719%22%2F%3E%20%20%3Cpath%20class%3D%22h%22%20d%3D%22M4.20043%2C15.72258a.557.557%2C0%2C0%2C1-.06885-.00488.49923.49923%2C0%2C0%2C1-.42676-.56348l2-14.50049A.49241.49241%2C0%2C0%2C1%2C6.2683.227a.4995.4995%2C0%2C0%2C1%2C.42676.56348l-2%2C14.50049A.49982.49982%2C0%2C0%2C1%2C4.20043%2C15.72258Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpath%20class%3D%22i%22%20d%3D%22M13.07062.66277A.55391.55391%2C0%2C0%2C0%2C12.59216.2a.5261.5261%2C0%2C0%2C0-.53333.4549l-2.513%2C8.61346L6.68512.6278a.48865.48865%2C0%2C0%2C1%2C.00995.16266L6.37059%2C2.86276%2C9.101%2C11.10332a.49483.49483%2C0%2C0%2C0%2C.4834.34277.50023.50023%2C0%2C0%2C0%2C.47119-.35937l2.34375-8.00879%2C1.68115%2C12.18652a.49939.49939%2C0%2C0%2C0%2C.49463.43164.47593.47593%2C0%2C0%2C0%2C.06885-.00488.4995.4995%2C0%2C0%2C0%2C.42676-.56348Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%3C%2Fsvg%3E",width:"36px"}))),ot.createElement("div",{className:"flex-container-v middle flex-1 sp-margin-l-left"},ot.createElement("span",{className:"summary-message sp-margin-s-bottom"},"Managed by Spinnaker"),ot.createElement(tn,{className:"resource-actions sp-margin-xs-bottom flex-pull-left",id:"server-group-managed-resource-dropdown",pullRight:!0},ot.createElement(tn.Toggle,{className:"btn btn-sm btn-default dropdown-toggle"},"Resource Actions"),ot.createElement(tn.Menu,{className:"dropdown-menu"},!t.isManagementPaused&&ot.createElement(an,{onClick:()=>sv(e,t)},a?"Resume ":"Pause "," Management"),t.isManagementPaused&&ot.createElement(an,{disabled:!0,onClick:e=>{const t=e.target,n=null==t?void 0:t.getAttribute("href");n&&(window.location.href=n)}},"Resume Management ",ot.createElement(_s,{content:r})),ot.createElement("li",null,ot.createElement("a",{onClick:()=>{Uv(e),jv("History",n)}},"History")),ot.createElement("li",null,ot.createElement("a",{target:"_blank",onClick:()=>jv("Raw Source",n),href:`${di.gateUrl}/managed/resources/${n}`},"Raw Source"))))))},Ov="spinnaker.core.managed.resourceDetailsIndicator.component";n(Ov,[]).component("managedResourceDetailsIndicator",yn(jl(Lv,"managedResourceDetailsIndicator"),["resourceSummary","application"]));const Yv=({resourceSummary:e})=>ot.createElement("a",{target:"_blank",onClick:()=>((e,t,n)=>Ui.log({category:"Managed Resource Status Indicator",action:`${e} clicked`,data:{label:`${t},${n}`}}))("Status docs link",e.id,e.status),href:`${Mv("resourceStatus")}#${e.status.toLowerCase().replace("_","-")}`},"Learn more"),$v={DELETING:{appearance:"warning",iconName:"mdActuating",popoverContents:()=>ot.createElement("p",null,ot.createElement("b",null,"Spinnaker is deleting this temporary managed resource"))},ACTUATING:{appearance:"info",iconName:"mdActuating",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker is taking action to resolve a difference from this resource's desired state.")),ot.createElement("p",null,"You can click History to see more. ",ot.createElement(Yv,{resourceSummary:e})))},CREATED:{appearance:"info",iconName:"mdCreated",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker has started managing this resource.")),ot.createElement("p",null,"If a difference from the desired state is detected, Spinnaker will act to correct it."," ",ot.createElement(Yv,{resourceSummary:e})))},DIFF:{appearance:"info",iconName:"mdDiff",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker detected a difference from the desired state.")),ot.createElement("p",null,"In a moment, Spinnaker will take action to bring this resource back to its desired state. You can click History to see more. ",ot.createElement(Yv,{resourceSummary:e})))},DIFF_NOT_ACTIONABLE:{appearance:"warning",iconName:"mdDiff",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker detected a difference from the desired state, but can't take action to resolve it.")),ot.createElement("p",null,"Spinnaker doesn't have a way of resolving this kind of difference. Manual action might be required. You can click History to see more. ",ot.createElement(Yv,{resourceSummary:e})))},CURRENTLY_UNRESOLVABLE:{appearance:"warning",iconName:"mdError",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Waiting for a temporary issue to pass.")),ot.createElement("p",null,"Something required for management is temporarily experiencing issues. Spinnaker can't take action right now, but should be able to soon. You can click History to see more."," ",ot.createElement(Yv,{resourceSummary:e})))},MISSING_DEPENDENCY:{appearance:"warning",iconName:"mdError",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Waiting for a missing dependency to become available.")),ot.createElement("p",null,"Something required for management isn't ready yet. Spinnaker can't take action right now, but will resume once the missing dependencies exist. You can click History to see more."," ",ot.createElement(Yv,{resourceSummary:e})))},ERROR:{appearance:"error",iconName:"mdError",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Something went wrong.")),ot.createElement("p",null,"Something went wrong while trying to check this resource's current state. Spinnaker can't take action right now, and manual intervention might be required. You can click History to see more."," ",ot.createElement(Yv,{resourceSummary:e})))},HAPPY:{appearance:"info",iconName:"md",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker is managing this resource.")),ot.createElement("p",null,"If a difference from the desired state is detected, Spinnaker will act to correct it."," ",ot.createElement(Yv,{resourceSummary:e})))},PAUSED:{appearance:"warning",iconName:"mdPaused",popoverContents:(e,t)=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Management is paused.")),t.isManagementPaused&&ot.createElement("p",null,"Spinnaker is configured to manage this resource, but management for the entire application is temporarily paused. ",ot.createElement(Yv,{resourceSummary:e})),!t.isManagementPaused&&ot.createElement("p",null,"Spinnaker is configured to manage this resource, but management has been temporarily paused."," ",ot.createElement(Yv,{resourceSummary:e})))},RESUMED:{appearance:"info",iconName:"mdResumed",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Management was just resumed.")),ot.createElement("p",null,"Management was resumed after being temporarily paused. If Spinnaker detects that a difference from the desired state occurred while paused, it will act to correct it. ",ot.createElement(Yv,{resourceSummary:e})))},UNHAPPY:{appearance:"error",iconName:"mdUnhappy",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker detected a difference from the desired state, but hasn't been able to correct it.")),ot.createElement("p",null,"Spinnaker has been trying to correct a difference, but taking action hasn't helped. Manual intervention might be required. You can click History to see more. ",ot.createElement(Yv,{resourceSummary:e})))},UNKNOWN:{appearance:"warning",iconName:"mdUnknown",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Unable to determine resource status.")),ot.createElement("p",null,"Spinnaker is configured to manage this resource, but can't calculate its current status."," ",ot.createElement(Yv,{resourceSummary:e})))},WAITING:{appearance:"info",iconName:"mdCreated",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Waiting for information.")),ot.createElement("p",null,"This resource is part of a brand new environment. Spinnaker is waiting for an artifact to become available to deploy. It normally takes less than 5 minutes for a newly created artifact to be seen, and after that all constraints need to pass in order for it to start deploying. You can click History to see a more detailed message. ",ot.createElement(Yv,{resourceSummary:e})))}},Hv=({resourceSummary:e,application:t,hidePopover:n})=>{const a=ot.createElement("button",{className:"passive flex-none",onClick:()=>{null==n||n(),Uv(e)}},ot.createElement("i",{className:"fa fa-history"})," History");return ot.createElement("div",{className:"horizontal right"},ot.createElement("p",{className:"flex-container-h middle sp-margin-m-top sp-margin-xs-bottom sp-group-margin-s-xaxis"},a,!e.isPaused&&ot.createElement("button",{className:"passive flex-none",onClick:()=>sv(e,t,n)},ot.createElement("i",{className:"fa fa-pause"})," Pause management of this resource"),e.isPaused&&!t.isManagementPaused&&ot.createElement("button",{className:"passive flex-none",onClick:()=>sv(e,t,n)},ot.createElement("i",{className:"fa fa-play"})," Resume management of this resource"),t.isManagementPaused&&ot.createElement(Dn,{to:"home.applications.application.config",params:{section:"managed-resources"}},ot.createElement("a",null,"Resume application management"))))},Vv=({application:e,children:t,placement:n,resourceSummary:a})=>{const{status:i}=a;return ot.createElement(qs,{Component:({hidePopover:t})=>ot.createElement(ot.Fragment,null,$v[i].popoverContents(a,e),ot.createElement(Hv,{resourceSummary:a,application:e,hidePopover:t})),delayHide:200,delayShow:200,placement:n},t)},Jv=({shape:e,resourceSummary:t,application:n})=>{const{status:a}=t;return ot.createElement("div",{className:"flex-container-h stretch ManagedResourceStatusIndicator"},ot.createElement(Vv,{application:n,placement:"left",resourceSummary:t},ot.createElement("div",{className:Cn("flex-container-h middle",e,$v[a].appearance)},ot.createElement(Bn,{appearance:"light",name:$v[a].iconName,size:"small"}))))},Wv="spinnaker.core.managed.dataSource";n(Wv,[]).run(["$q",e=>{if(!di.feature.managedResources)return;Hg.registerDataSource({key:"managedResources",visible:!1,loader:e=>fv.getApplicationSummary(e.name),onLoad:(t,n)=>(t.isManagementPaused=n.applicationPaused,e.when(n)),afterLoad:e=>{e.serverGroups.ready().then((()=>Ev(e)),qi),e.loadBalancers.ready().then((()=>bv(e)),qi),e.securityGroups.ready().then((()=>yv(e)),qi)},defaultData:{applicationPaused:!1,hasManagedResources:!1,resources:[]}}),Hg.registerDataSource({key:"environments",sref:".environments",category:Yf,optional:!0,optIn:!0,label:"Environments",icon:"fa fa-fw fa-xs fa-code-branch",iconName:"spEnvironments",description:"Artifacts and environments managed by Spinnaker",defaultData:{applicationPaused:!1,hasManagedResources:!1,environments:[],artifacts:[],resources:[]}})}]);const Kv=e=>e.current?{width:e.current.offsetWidth,height:e.current.offsetHeight}:{width:0,height:0},qv=(e,t)=>{const n=Ro();return ot.useCallback((a=>{Ui.log({...a,category:`MD__${e}`,action:(null==a?void 0:a.action)||t||"",data:{label:null==a?void 0:a.label,application:null==n?void 0:n.name,...null==a?void 0:a.data}})}),[null==n?void 0:n.name,e,t])},Xv=["listView","gridView"],Zv=localStorage.getItem("MD_environmentsDirection"),_v=ba({key:"environmentsDisplay",default:(eA=Zv,Boolean(eA&&Xv.includes(eA))?Zv:"gridView")});var eA;const tA=()=>{const[e,t]=Ca(_v);return ot.useEffect((()=>{localStorage.setItem("MD_environmentsDirection",e)}),[e]),{direction:e,setDirection:t}},nA=()=>{const{direction:e,setDirection:t}=tA(),n=qv("environmentsDirection");return ot.useEffect((()=>{n({action:e})}),[e]),ot.createElement("button",{type:"button",className:"btn env-direction-btn",onClick:()=>t((e=>"listView"===e?"gridView":"listView"))},"listView"===e?"Grid view":"List view",ot.createElement("i",{className:Cn("listView"===e?"fas fa-columns":"far fa-list-alt","sp-margin-xs-left")}))},aA=(e,t)=>{const{direction:n}=tA(),{width:a}=((e,{delay:t=100,isActive:n=!0})=>{const[a,i]=ot.useState(Kv(e));return ot.useLayoutEffect((()=>{const a=we((()=>{i(Kv(e))}),t,{leading:!0});if(n&&e.current){const t=new ResizeObserver(a);return t.observe(e.current),()=>t.disconnect()}return()=>{}}),[t,n,e.current]),a})(e,{isActive:"gridView"===n}),i=Math.min(Math.round(a/500),t.length);return{environments:"gridView"===n?xe(t):t,style:"gridView"===n?{gridTemplateColumns:`repeat(${i}, 1fr)`}:{},className:"gridView"===n?"grid-view":void 0}},iA=ot.forwardRef((({className:e,style:t,children:n},a)=>ot.createElement("div",{ref:a,className:Cn(e,"environments-list"),style:t},n)));oi(".HorizontalTabs {\n display: flex;\n flex-direction: row;\n width: 100%;\n border-bottom: 1px solid var(--color-alto);\n margin-bottom: var(--xl-spacing);\n}\n.HorizontalTabs .tab {\n background: none;\n border: none;\n padding: 0;\n min-width: 150px;\n max-width: 33%;\n padding: var(--xs-spacing) var(--m-spacing);\n font-weight: 600;\n letter-spacing: 0.2px;\n border-bottom: 3px solid transparent;\n color: var(--color-concrete);\n text-align: center;\n}\n@media (max-width: 768px) {\n .HorizontalTabs .tab {\n min-width: 80px;\n }\n}\n.HorizontalTabs .tab:focus:active {\n text-decoration: none;\n}\n.HorizontalTabs .tab:hover {\n text-decoration: none;\n color: var(--color-dovegray);\n border-bottom: 3px solid var(--color-accent-g2);\n}\n.HorizontalTabs .tab.selected-tab {\n border-bottom: 3px solid var(--color-accent);\n color: var(--color-black);\n}\n.HorizontalTabs .right-element {\n margin-left: auto;\n align-self: center;\n}\n");const rA=({tabs:e,className:t,onClick:n,rightElement:a})=>ot.createElement("div",{className:Cn(t,"HorizontalTabs")},e.map((e=>ot.createElement(sA,{key:e.path,data:e,onClick:n}))),a&&ot.createElement("div",{className:"right-element"},a)),sA=({data:e,onClick:t})=>{const n=Pn(e.path,{},"selected-tab");return ot.createElement("a",{href:n.href,className:Cn("tab",n.className),onClick:a=>{n.onClick(a),null==t||t(e)}},e.title)},oA="MD_debug",lA="1",cA=()=>localStorage.getItem(oA)===lA,pA=e=>{e?localStorage.setItem(oA,lA):localStorage.removeItem(oA)};oi(".Environments {\n width: 100%;\n padding: 0 var(--l-spacing);\n --base-horizontal-padding: 20px;\n}\n@media (max-width: 768px) {\n .Environments {\n padding: 0;\n --base-horizontal-padding: var(--m-spacing);\n }\n}\n.Environments a,\n.Environments .btn-link {\n color: var(--color-text-link-g1);\n}\n.Environments a:focus,\n.Environments .btn-link:focus,\n.Environments a:active,\n.Environments .btn-link:active {\n outline: none;\n box-shadow: none;\n}\n.Environments a:focus:active,\n.Environments .btn-link:focus:active {\n outline: none;\n box-shadow: none;\n}\n.Environments .env-direction-btn {\n display: flex;\n flex-direction: row;\n align-items: center;\n line-height: 1;\n padding: var(--xs-spacing);\n background-color: transparent;\n color: var(--color-dovegray);\n}\n.Environments .env-direction-btn > i {\n margin-top: 1px;\n font-size: 16px;\n}\n.Environments .env-direction-btn:focus,\n.Environments .env-direction-btn:active:focus {\n outline: none;\n}\n@media (max-width: 768px) {\n .Environments .env-direction-btn {\n display: none;\n }\n}\n.Environments .environments-list {\n width: 100%;\n display: grid;\n gap: var(--m-spacing);\n align-items: flex-start;\n --row-element-icon-width: 32px;\n}\n.Environments .environments-list.grid-view {\n gap: var(--xl-spacing) var(--m-spacing);\n --row-element-icon-width: 26px;\n}\n.ui-switcher {\n background-color: var(--color-white);\n padding: var(--xs-spacing) var(--s-spacing);\n position: absolute;\n border-radius: 4px;\n border: 1px solid var(--color-alto);\n bottom: 4px;\n right: 30px;\n}\n@media (max-width: 768px) {\n .ui-switcher {\n right: 8px;\n }\n}\n");oi(".Environments .environment-row-element,\n.ActionModal .environment-row-element {\n display: grid;\n grid-template-columns: [icon] var(--row-element-icon-width) [details] 1fr;\n position: relative;\n}\n.Environments .environment-row-element.with-padding,\n.ActionModal .environment-row-element.with-padding {\n padding: var(--l-spacing) var(--base-horizontal-padding) var(--s-spacing) var(--base-horizontal-padding);\n}\n@media (max-width: 768px) {\n .Environments .environment-row-element,\n .ActionModal .environment-row-element {\n grid-template-columns: [icon] 30px [details] 1fr;\n }\n}\n.Environments .environment-row-element .no-items-message,\n.ActionModal .environment-row-element .no-items-message {\n grid-column: 1 / 3;\n}\n.Environments .environment-row-element .row-details,\n.ActionModal .environment-row-element .row-details {\n grid-column: details;\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n.Environments .environment-row-element .row-icon,\n.ActionModal .environment-row-element .row-icon {\n grid-column: icon;\n display: flex;\n align-self: flex-start;\n padding-top: var(--2xs-spacing);\n}\n.Environments .environment-row-element .row-icon.small,\n.ActionModal .environment-row-element .row-icon.small {\n padding-top: var(--3xs-spacing);\n}\n.Environments .environment-row-element .row-title,\n.ActionModal .environment-row-element .row-title {\n font-size: 18px;\n font-weight: 600;\n line-height: 1.3;\n color: var(--color-charcoal);\n display: grid;\n grid-template-columns: 1fr auto;\n}\n.Environments .environment-row-element .row-title.small,\n.ActionModal .environment-row-element .row-title.small {\n font-size: 14px;\n}\n.Environments .environment-row-element .row-title > a,\n.ActionModal .environment-row-element .row-title > a {\n color: inherit;\n}\n.Environments .md-icon-success,\n.ActionModal .md-icon-success {\n color: var(--color-status-success);\n}\n.Environments .md-icon-pending,\n.ActionModal .md-icon-pending {\n color: var(--color-titanium);\n}\n.Environments .md-icon-fail,\n.ActionModal .md-icon-fail {\n color: var(--color-status-error);\n}\n.Environments .delimited-element:not(:last-child),\n.ActionModal .delimited-element:not(:last-child) {\n margin-right: 6px;\n}\n.Environments .delimited-element:not(:first-child)::before,\n.ActionModal .delimited-element:not(:first-child)::before {\n content: 'β’';\n margin-right: 6px;\n}\n.Environments .delimited-elements > *:not(:last-child),\n.ActionModal .delimited-elements > *:not(:last-child) {\n margin-right: 6px;\n}\n.Environments .delimited-elements > *:not(:first-child)::before,\n.ActionModal .delimited-elements > *:not(:first-child)::before {\n content: 'β’';\n margin-right: 6px;\n}\n.Environments .truncate,\n.ActionModal .truncate {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.Environments button.md-btn,\n.ActionModal button.md-btn {\n background-color: transparent;\n box-shadow: 1px 2px 2px 0px rgba(0, 0, 0, 0.06), 0px 1px 3px 0px rgba(0, 0, 0, 0.03);\n}\n.Environments button.md-btn:hover,\n.ActionModal button.md-btn:hover {\n background-color: var(--color-cirrus);\n}\n.Environments button.md-btn:active,\n.ActionModal button.md-btn:active,\n.Environments button.md-btn:focus,\n.ActionModal button.md-btn:focus {\n outline: none;\n}\n.Environments button.md-btn-accent,\n.ActionModal button.md-btn-accent,\n.Environments button.md-btn-accent:hover,\n.ActionModal button.md-btn-accent:hover {\n color: var(--color-accent);\n border-color: var(--color-accent);\n}\n.Environments button.md-btn-success,\n.ActionModal button.md-btn-success,\n.Environments button.md-btn-success:hover,\n.ActionModal button.md-btn-success:hover {\n color: var(--color-validation-success);\n border-color: var(--color-validation-success);\n}\n.Environments button.md-btn-danger,\n.ActionModal button.md-btn-danger,\n.Environments button.md-btn-danger:hover,\n.ActionModal button.md-btn-danger:hover {\n color: var(--color-danger);\n border: 1px solid var(--color-danger);\n}\n.Environments .md-action-button,\n.ActionModal .md-action-button {\n padding: 0 var(--xs-spacing);\n text-transform: uppercase;\n color: inherit;\n font-size: 12px;\n font-weight: 500;\n padding: 2px var(--s-spacing);\n color: var(--color-primary-g1);\n letter-spacing: 0.2px;\n}\n.Environments .md-action-button:hover,\n.ActionModal .md-action-button:hover {\n background-color: var(--color-alabaster);\n}\n.Environments .no-underline,\n.ActionModal .no-underline {\n text-decoration: none;\n}\n.Environments .md-actions-gap,\n.ActionModal .md-actions-gap {\n gap: var(--s-spacing);\n}\n.Environments .in-progress-dot,\n.ActionModal .in-progress-dot {\n height: 8px;\n width: 8px;\n border-radius: 999px;\n display: flex;\n -webkit-animation: deployingAnimation 2s infinite;\n animation: deployingAnimation 2s infinite;\n}\n@-webkit-keyframes deployingAnimation {\n 0% {\n background-color: var(--color-status-success);\n }\n 50% {\n background-color: var(--color-status-success-light);\n }\n 100% {\n background-color: var(--color-status-success);\n }\n}\n@keyframes deployingAnimation {\n 0% {\n background-color: var(--color-status-success);\n }\n 50% {\n background-color: var(--color-status-success-light);\n }\n 100% {\n background-color: var(--color-status-success);\n }\n}\n@-webkit-keyframes deletingAnimation {\n 0% {\n background-color: var(--color-danger);\n }\n 50% {\n background-color: var(--color-danger-medium);\n }\n 100% {\n background-color: var(--color-danger);\n }\n}\n@keyframes deletingAnimation {\n 0% {\n background-color: var(--color-danger);\n }\n 50% {\n background-color: var(--color-danger-medium);\n }\n 100% {\n background-color: var(--color-danger);\n }\n}\n");const dA=Object.entries({overview:"Overview",history:"History",config:"Configuration"}).map((([e,t])=>({title:t,path:`.${e}`}))),uA=()=>{var e;const t=qv("EnvironmentsTab"),{state:n,params:a}=Tn();return ot.useEffect((()=>{"enabled"===a.md_debug?pA(!0):"disabled"===a.md_debug&&pA(!1)}),[a]),ot.createElement("div",{className:"vertical Environments"},ot.createElement(rA,{tabs:dA,rightElement:(null==(e=n.name)?void 0:e.endsWith(".config"))?void 0:ot.createElement(nA,null),onClick:({title:e,path:n})=>{t({action:`Open_${e}`,data:{path:n}})}}),ot.createElement(Qn,null),ot.createElement("div",{style:{minHeight:32,minWidth:32}}))},mA=()=>{const e=Mv("gettingStarted");return ot.createElement("div",{style:{width:"100%"}},"Welcome! This application does not have any environments or artifacts. Check out the"," ",ot.createElement("a",{href:e,target:"_blank"},"getting started guide")," ","to set some up!")},gA=({hasApplicationData:e,error:t})=>{const n=qv("Error","AppQuery");return ot.useEffect((()=>{t&&e&&n({level:"ERROR",error:t})}),[t,n,e]),e?ot.createElement("div",{style:{width:"100%"}},"Failed to load application data, please refresh and try again.",ot.createElement("p",null,t.message)):ot.createElement(mA,null)},hA={},fA=Aa`
|
|
1
|
+
import*as e from"angular";import t,{module as n,element as a,noop as i,copy as r,toJson as s,isDefined as o}from"angular";import*as l from"lodash";import c,{cloneDeep as p,merge as d,isNil as u,get as m,set as g,intersection as h,uniq as f,zipObject as v,chain as A,isEqual as E,padStart as b,isNumber as y,isString as C,isPlainObject as w,isArray as x,isNull as k,isUndefined as B,forIn as S,without as M,startCase as N,isBoolean as D,values as I,map as F,flatten as T,xor as Q,isFunction as P,truncate as R,defaults as U,toPath as z,throttle as G,isObject as j,findLast as L,maxBy as O,sortBy as Y,has as H,find as V,cloneDeepWith as J,pick as W,size as K,some as q,reduce as X,includes as Z,forOwn as ee,pickBy as te,filter as ne,identity as ae,groupBy as ie,isEmpty as re,every as se,each as oe,extend as le,compact as ce,noop as pe,head as de,partition as ue,memoize as me,fromPairs as ge,omit as he,omitBy as fe,isDate as ve,uniqBy as Ae,kebabCase as Ee,union as be,keyBy as ye,flatMap as Ce,debounce as we,reverse as xe,orderBy as ke,toNumber as Be,keys as Se,unset as Me,capitalize as Ne,flow as De,clone as Ie,bindAll as Fe,template as Te,trim as Qe,join as Pe,last as Re,max as Ue,sumBy as ze,sum as Ge,assign as je,toPairs as Le,defaultsDeep as Oe,upperFirst as Ye,forEach as $e,first as He,countBy as Ve,range as Je}from"lodash";import{$http as We,$location as Ke,$rootScope as qe,$log as Xe,$q as Ze,$timeout as _e,$templateRequest as et,$compile as tt,$controller as nt,$window as at,$interpolate as it,$templateCache as rt}from"ngimport";import*as st from"react";import ot,{useEffect as lt,useRef as ct,useMemo as pt,useState as dt,useCallback as ut,memo as mt}from"react";import*as gt from"rxjs";import{fromEvent as ht,defer as ft,from as vt,Subject as At,of as Et,merge as bt,timer as yt,BehaviorSubject as Ct,empty as wt,ReplaySubject as xt,combineLatest as kt,forkJoin as Bt}from"rxjs";import{map as St,publishReplay as Mt,refCount as Nt,switchMap as Dt,takeUntil as It,delay as Ft,filter as Tt,debounceTime as Qt,tap as Pt,mergeMap as Rt,catchError as Ut,finalize as zt,toArray as Gt,skip as jt,take as Lt,startWith as Ot,withLatestFrom as Yt,distinctUntilChanged as $t,merge as Ht,first as Vt,bufferCount as Jt,concatMap as Wt,scan as Kt}from"rxjs/operators";import{Modal as qt,OverlayTrigger as Xt,Tooltip as Zt,Overlay as _t,Popover as en,Dropdown as tn,Glyphicon as nn,MenuItem as an,Button as rn,Pagination as sn}from"react-bootstrap";import*as on from"react-dom";import ln from"react-dom";import cn,{Creatable as pn}from"react-select";import dn from"react-virtualized-select";import un from"memoize-one";import mn from"react-tether";import gn from"diff-match-patch";import hn from"jquery";import{formatDistanceToNow as fn,formatDistance as vn,format as An}from"date-fns";import{DateTime as En,Duration as bn}from"luxon";import{react2angular as yn}from"react2angular";import Cn from"classnames";import{Parser as wn,HtmlRenderer as xn}from"commonmark";import kn from"dompurify";import{Icon as Bn,Illustration as Sn}from"@spinnaker/presentation";export{Icon,Illustration}from"@spinnaker/presentation";import{CacheFactory as Mn}from"cachefactory";import*as Nn from"@uirouter/react";import{UISref as Dn,useSref as In,useIsActive as Fn,useCurrentStateAndParams as Tn,UIView as Qn,useSrefActive as Pn,useRouter as Rn,useParentView as Un,UISrefActive as zn,useOnStateChanged as Gn}from"@uirouter/react";import{connect as jn,Formik as Ln,FormikConsumer as On,FastField as Yn,Field as $n,getIn as Hn,Form as Vn,FieldArray as Jn}from"formik";import Wn from"root/version.json";import{toast as Kn,ToastContainer as qn}from"react-toastify";import{SpelExpressionEvaluator as Xn}from"spel2js";import Zn from"react-day-picker/DayPickerInput";import"react-day-picker/lib/style.css";import _n from"react-ace";import"brace/mode/json";import"brace/ext/searchbox";import{CSSTransition as ea}from"react-transition-group";import{UIRouterContextComponent as ta,UIRouterContext as na,UI_ROUTER_REACT_HYBRID as aa}from"@uirouter/react-hybrid";import{dump as ia,loadAll as ra,YAMLException as sa,load as oa}from"js-yaml";import{angular2react as la}from"angular2react";import"jquery-textcomplete";import ca from"@uirouter/angularjs";import{hri as pa}from"human-readable-ids";import{Debounce as da,Throttle as ua}from"lodash-decorators";import*as ma from"@apollo/client";import{ApolloClient as ga,InMemoryCache as ha,HttpLink as fa,ApolloProvider as va,gql as Aa,useApolloClient as Ea}from"@apollo/client";import{atom as ba,useRecoilValue as ya,useRecoilState as Ca,RecoilRoot as wa}from"recoil";import xa from"lodash/isEqual";import ka from"react-content-loader";import Ba from"ansi_up";import*as Sa from"@uirouter/core";import{RejectType as Ma,Category as Na,Glob as Da}from"@uirouter/core";import{SortableHandle as Ia,arrayMove as Fa,SortableElement as Ta,SortableContainer as Qa}from"react-sortable-hoc";import*as Pa from"@uirouter/rx";import{UIRouterRxPlugin as Ra}from"@uirouter/rx";import*as Ua from"prop-types";import"brace/mode/yaml";import"brace/theme/textmate";import"bootstrap/dist/css/bootstrap.css";import"bootstrap/dist/js/bootstrap";import"@fortawesome/fontawesome-free/css/solid.css";import"@fortawesome/fontawesome-free/css/regular.css";import"@fortawesome/fontawesome-free/css/fontawesome.css";import"react-select/dist/react-select.css";import"react-virtualized/styles.css";import"react-virtualized-select/styles.css";import"ui-select/dist/select.css";import"@spinnaker/styleguide/public/styleguide.min.css";import"select2/select2.css";import"select2-bootstrap-css/select2-bootstrap.css";import"source-sans/source-sans-3.css";import"@uirouter/angularjs/release/stateEvents";import za from"angulartics";import Ga from"angulartics-google-analytics";import"react-toastify/dist/ReactToastify.min.css";import{createUltimatePagination as ja,ITEM_TYPES as La}from"react-ultimate-pagination";import Oa from"angular-ui-bootstrap";import{CellMeasurer as Ya,CellMeasurerCache as $a,AutoSizer as Ha,List as Va,SortDirection as Ja,Table as Wa,Column as Ka}from"react-virtualized";import qa from"js-worker-search";import"angular-ui-sortable";import Xa from"react-ga";import Za from"ui-select";import _a from"angular-messages";import ei from"angular-sanitize";import{angularSpinner as ti}from"angular-spinner";var ni=Object.freeze({__proto__:null,get AccountSelectInput(){return es},get AccountService(){return Di},get AccountTag(){return ns},get InvalidAPIResponse(){return Ei},get RequestBuilder(){return Ci},get DeprecatedRequestBuilder(){return wi},get invalidContentMessage(){return xi},get makeRequestBuilderConfig(){return ki},get API(){return Bi},get REST(){return Si},get ApplicationContext(){return as},get ApplicationContextProvider(){return is},get ApplicationIcon(){return ks},get Application(){return Qh},get ApplicationStateProvider(){return Ff},get APPLICATION_STATE_PROVIDER(){return Tf},get ApplicationModelBuilder(){return Df},get ConfigSectionFooter(){return Qf},get ConfigSectionFooterController(){return Rf},get CONFIG_SECTION_FOOTER(){return zf},get AppListExtractor(){return jf},get PlatformHealthOverride(){return Sc},get PlatformHealthOverrideInput(){return Mc},get ApplicationNameValidator(){return Lf},get INFRASTRUCTURE_KEY(){return Of},get DELIVERY_KEY(){return Yf},get verticalNavExpandedAtom(){return gf},get NavigationCategoryRegistry(){return Af},get navigationCategoryRegistry(){return Ef},get ApplicationDataSourceRegistry(){return Hg},get ApplicationReader(){return Jg},get ApplicationWriter(){return Pf},get ApplicationDataSource(){return Th},get ArtifactIconService(){return sm},get ArtifactReferenceService(){return om},get EXECUTION_ARTIFACT_TAB(){return pm},get ExpectedArtifactService(){return dm},get IMAGE_SOURCE_SELECTOR_COMPONENT(){return mm},get ExecutionArtifactTab(){return cm},get ArtifactIconList(){return lm},get ArtifactTypePatterns(){return vp},get excludeAllTypesExcept(){return Ap},get ExpectedArtifactSelectorViewController(){return gm},get defaultExcludedArtifactTypes(){return fm},get NgGenericArtifactDelegate(){return vm},get NgGCEImageArtifactDelegate(){return Em},get NgAppEngineDeployArtifactDelegate(){return bm},get NgBakeManifestArtifactDelegate(){return ym},get NgAppengineConfigArtifactDelegate(){return Cm},get ArtifactAccountSelector(){return xm},get ARTIFACT_ACCOUNT_SELECTOR_COMPONENT_REACT(){return km},get ArtifactIcon(){return wm},get ExpectedArtifactSelector(){return Nm},get EXPECTED_ARTIFACT_SELECTOR_COMPONENT_REACT(){return Dm},get ExpectedArtifactEditor(){return Im},get EXPECTED_ARTIFACT_EDITOR_COMPONENT_REACT(){return Fm},get ExpectedArtifactSourceSelector(){return Sm},get EXPECTED_ARTIFACT_SOURCE_SELECTOR_COMPONENT_REACT(){return Mm},get ExpectedArtifactModal(){return Pm},get StageArtifactSelector(){return Rm},get STAGE_ARTIFACT_SELECTOR_COMPONENT_REACT(){return Um},get StageArtifactSelectorDelegate(){return zm},get AuthenticationService(){return ri},get AuthenticationInitializer(){return Ai},get UserMenu(){return $f},get BannerContainer(){return Wf},get BannerContainerContent(){return Kf},get CacheInitializerService(){return bd},get CACHE_INITIALIZER_SERVICE(){return yd},get CollapsibleSectionStateCacheInternal(){return Ss},get CollapsibleSectionStateCache(){return Ms},get DeckCacheFactory(){return Vp},get InfrastructureCachesInternal(){return pd},get InfrastructureCaches(){return dd},get INFRASTRUCTURE_CACHE_CONFIG(){return ld},get ViewStateCacheInternal(){return Kp},get ViewStateCache(){return qp},get CertificateReader(){return qf},get BuildServiceType(){return Yu},get IgorService(){return Hu},get CloudProviderRegistry(){return Ni},get ProviderSelectionService(){return dp},get CloudProviderLabel(){return up},get CloudProviderLogo(){return mp},get ProviderServiceDelegate(){return gp},get PROVIDER_SERVICE_DELEGATE(){return hp},get ClusterPodTitleWrapper(){return cy},get DefaultClusterMatcher(){return py},get ClusterMatcher(){return dy},get ClusterService(){return Ey},get CLUSTER_SERVICE(){return by},get TaskMatcher(){return uy},get taskMatcher(){return Ay},get ClusterFilterService(){return Id},get FilterSearch(){return yy},get FilterSection(){return Cy},get SETTINGS(){return di},get VersionChecker(){return no},get ConfirmationModalService(){return lp},get CoreRedBlackAdditionalFields(){return By},get DeploymentStrategySelector(){return ky},get DeploymentStrategyRegistrar(){return wy},get DeploymentStrategyRegistry(){return xy},get Key(){return Kg},get ManagedResourceStatus(){return ev},get AddEntityTagLinks(){return Sy},get EntitySource(){return Ny},get EntityTagEditor(){return cf},get ClusterTargetBuilder(){return Dy},get EntityTagsReader(){return ud},get EntityTagWriter(){return of},get CategorizedNotifications(){return sf},get EntityName(){return Xh},get GroupedNotificationList(){return Zh},get NotificationCategory(){return ef},get NotificationList(){return tf},get NotificationCategories(){return rf},get ExecutionMarkerIcon(){return Up},get EntityNotifications(){return Zf},get VIEW_CHANGES_LINK(){return Uy},get ViewChangesLink(){return Ry},get DIFF_MODULE(){return zy},get EventBus(){return Cp},get FilterModelService(){return rd},get FilterCheckbox(){return sd},get FilterCollapse(){return od},get FilterTags(){return Cd},get digestDependentFilters(){return xd},get MapEditor(){return jy},get MapEditorInput(){return Oy},get MapPair(){return Gy},get NumberList(){return $y},get HealthCounts(){return $g},get HelpField(){return _s},get HelpMenu(){return oo},get HelpTextExpandedContext(){return Vs},get HelpContentsRegistry(){return Ks},get RecentHistoryService(){return bg},get RECENT_HISTORY_SERVICE(){return yg},get ImageReader(){return Hy},get IMAGE_READER(){return Vy},get InstanceReader(){return Jy},get ConsoleOutputLink(){return Ky},get InstanceActions(){return qy},get InstanceDetails(){return eC},get InstanceDetailsCmp(){return tC},get InstanceDetailsHeader(){return nC},get InstanceDetailsPane(){return Xy},get InstanceInsights(){return aC},get InstanceLinks(){return iC},get InstanceWriter(){return sC},get InstanceTypeService(){return oC},get INSTANCE_TYPE_SERVICE(){return lC},get InstanceLoadBalancerHealth(){return cC},get LoadBalancerDataUtils(){return pC},get LoadBalancerReader(){return dC},get LOAD_BALANCER_READ_SERVICE(){return uC},get LoadBalancerWriter(){return mC},get CreateLoadBalancerButton(){return gC},get LoadBalancerClusterContainer(){return bC},get LoadBalancerInstances(){return AC},get LoadBalancerServerGroup(){return EC},get LoadBalancersTagWrapper(){return xC},get FunctionDetails(){return SC},get FunctionReader(){return MC},get FUNCTION_READ_SERVICE(){return NC},get FunctionWriter(){return DC},get CreateFunctionButton(){return IC},get V2_MODAL_WIZARD_COMPONENT(){return Vc},get V2ModalWizard(){return $c},get ModalClose(){return Nc},get SubmitButton(){return Dc},get ModalWizard(){return Ic},get WizardModal(){return Lc},get WizardPage(){return Fc},get WizardStepLabel(){return Tc},get DeployingIntoManagedClusterWarning(){return cv},get ManagedMenuItem(){return pv},get addManagedResourceMetadataToServerGroups(){return Ev},get addManagedResourceMetadataToLoadBalancers(){return bv},get addManagedResourceMetadataToSecurityGroups(){return yv},get ManagedResourceDetailsIndicator(){return Lv},get MANAGED_RESOURCE_DETAILS_INDICATOR(){return Ov},get ManagedResourceStatusIndicator(){return Jv},get confirmNotManaged(){return rv},get toggleResourcePause(){return sv},get MANAGED_RESOURCES_DATA_SOURCE(){return Wv},get CORE_MANAGED_MANAGED_MODULE(){return sy},get getKindName(){return gv},get getResourceKindForLoadBalancerType(){return hv},get ManagedReader(){return fv},get ManagedWriter(){return _f},get registerManagedDeliveryPlugin(){return oy},get resourceManager(){return uv},get ManifestWriter(){return FC},get ManifestReader(){return TC},get JobStageExecutionLogs(){return PC},get JobManifestPodLogs(){return QC},get ManifestYaml(){return RC},get DefaultPodNameProvider(){return UC},get JobEventBasedPodNameProvider(){return zC},get NameUtils(){return gd},get StateConfigProvider(){return Dg},get trueKeyObjectParamType(){return Ig},get inverseBooleanParamType(){return Fg},get booleanParamType(){return Tg},get sortKeyParamType(){return Qg},get STATE_CONFIG_PROVIDER(){return Pg},get UrlBuilderRegistry(){return cp},get UrlBuilder(){return Ug},get UrlParser(){return zg},get NetworkReader(){return GC},get NotificationDetails(){return WC},get EditNotificationModal(){return KC},get NotificationTransformer(){return YC},get NotificationSelector(){return $C},get NOTIFICATION_LIST(){return ZC},get NotificationsList(){return XC},get OrchestratedItemTransformer(){return Wc},get OverrideRegistry(){return Vh},get OVERRIDE_REGISTRY(){return Jh},get Overridable(){return ys},get overridableComponent(){return Cs},get RegistrationQueue(){return Oh},get overrideRegistrationQueue(){return Yh},get Overrides(){return $h},get overridesComponent(){return Hh},get PageTitleService(){return _C},get PAGE_TITLE_SERVICE(){return ew},get PagerDutyReader(){return bf},get PagerDutyWriter(){return yf},get PagerDutyTagComponentController(){return Cf},get PAGER_DUTY_TAG_COMPONENT(){return xf},get PagerDutySelectFieldController(){return kf},get PAGER_DUTY_SELECT_FIELD_COMPONENT(){return Sf},get PipelineRegistry(){return Lm},get PipelineConfigService(){return id},get FormikStageConfig(){return nw},get BakeExecutionLabel(){return aw},get BakeryReader(){return iw},get AsgActionExecutionDetailsSection(){return Sp},get ExecutionDetailsSection(){return bp},get ExecutionBarLabel(){return Fp},get ExecutionDetailsTasks(){return Rp},get StageConfigField(){return zp},get applySuspendedStatuses(){return Gp},get ExecutionStepDetails(){return Pp},get PipelineStageExecutionDetails(){return pw},get TitusExecutionLogs(){return dw},get PreconfiguredJobExecutionDetails(){return uw},get PreconfiguredJobStageConfig(){return mw},get PreconfiguredJobReader(){return fp},get makePreconfiguredJobStage(){return gw},get PRECONFIGUREDJOB_STAGE(){return hw},get StageConstants(){return vw},get PipelineTemplates(){return Aw},get PipelineTemplateV2Service(){return nd},get PipelineTemplateReader(){return Ew},get RunAsUserInput(){return yw},get Triggers(){return Vw},get BaseBuildTriggerTemplate(){return Ww},get PipelineConfigValidator(){return Yw},get CreatePipelineModal(){return ex},get ExecutionDetailsSectionService(){return rw},get EXECUTION_DETAILS_SECTION_SERVICE(){return sw},get ExecutionDetailsSectionNav(){return ow},get StageExecutionLogs(){return yp},get StageFailureMessages(){return wp},get StageFailureMessage(){return Bp},get StageSummary(){return cw},get Execution(){return Tx},get filterModelConfig(){return Yd},get ExecutionFilterModel(){return $d},get ManualExecutionModal(){return Hx},get TriggerTemplate(){return jx},get ExecutionsTransformer(){return Yp},get ExecutionService(){return iu},get EXECUTION_SERVICE(){return ru},get ArtifactList(){return Yx},get registerPluginExtensions(){return Vx},get PLUGINS_MODULE(){return Kx},get PluginRegistry(){return Jx},get Icon(){return Bn},get Illustration(){return Sn},get CollapsibleElement(){return Bs},get CollapsibleSection(){return Ds},get CustomLabels(){return Is},get Details(){return Qs},get SpInput(){return Rs},get spelNumberCheck(){return Us},get FormikForm(){return zs},get SpinFormik(){return Gs},get FormField(){return Dl},get FormikExpressionField(){return Fl},get FormikExpressionRegexField(){return Tl},get createFieldValidator(){return xl},get FormikFormField(){return kl},get renderContent(){return uo},get useSaveRestoreMutuallyExclusiveFields(){return Ql},get useFormInputValueMapper(){return Pl},get CheckboxInput(){return xo},get ChecklistInput(){return Bo},get DayPickerInput(){return So},get JsonEditor(){return Mo},get NumberInput(){return Fo},get RadioButtonInput(){return To},get reactSelectValidationErrorStyle(){return Jr},get reactSelectOnChangeAdapter(){return Wr},get reactSelectOnBlurAdapter(){return Kr},get ReactSelectInput(){return qr},get SelectInput(){return Zr},get StringsAsOptions(){return Fi},get TextAreaInput(){return Po},get TextInput(){return go},get ExpressionError(){return mo},get ExpressionInput(){return bo},get ExpressionPreview(){return yo},get evaluateExpression(){return Eo},get parseSpelExpressions(){return Ao},get useInternalValidator(){return Do},get orEmptyString(){return gr},get validationClassName(){return hr},get createFakeReactSyntheticEvent(){return fr},get isStringArray(){return vr},get StandardFieldLayout(){return Os},get LayoutContext(){return Ys},get LayoutProvider(){return $s},get LayoutConsumer(){return Hs},get ResponsiveFieldLayout(){return po},get FormValidator(){return Br},get FormValidatorField(){return Ar},get ValidationMessage(){return Ir},get categoryLabels(){return Fr},get asyncMessage(){return Ur},get errorMessage(){return zr},get infoMessage(){return Gr},get messageMessage(){return jr},get successMessage(){return Lr},get warningMessage(){return Or},get categorizeValidationMessage(){return $r},get categorizeValidationMessages(){return Hr},get useValidationData(){return Vr},get FORM_VALIDATION_VALIDATABLE_FIELD_IS_VALID_SHORT_CIRCUIT(){return Er},get composeValidators(){return br},get Validators(){return kr},get useApplicationContext(){return Ro},get useApplicationContextSafe(){return Uo},get useContainerClassNames(){return $o},get useData(){return Jo},get useDataSource(){return _o},get useDebouncedValue(){return el},get useDeepObjectDiff(){return nl},get useEscapeKeyPressed(){return rl},get useEventListener(){return il},get useForceUpdate(){return sl},get useInterval(){return ol},get useIsMobile(){return cl},get useIsMountedRef(){return No},get useLatestCallback(){return qo},get useLatestPromise(){return Vo},get useMountStatusRef(){return Ls},get useObservable(){return Xo},get useObservableValue(){return Zo},get usePollingData(){return pl},get usePrevious(){return jo},get HoverablePopover(){return qs},get LabelComponent(){return Rl},get LabeledValue(){return Ul},get LabeledValueList(){return zl},get LinkWithClipboard(){return Gl},get LINK_WITH_CLIPBOARD(){return Yl},get Markdown(){return Sr},get toMarkdown(){return Mr},get Modal(){return Vl},get ModalHeader(){return Wl},get ModalBody(){return Kl},get ModalFooter(){return ql},get showModal(){return Xl},get PageNavigator(){return Zl},get PageSection(){return _l},get ReactModal(){return si},get RenderOutputFile(){return ec},get robotToHuman(){return yr},get robotToHumanFilter(){return Cr},get ROBOT_TO_HUMAN_FILTER(){return wr},get SortToggle(){return tc},get SpanDropdownTrigger(){return nc},get SpelInput(){return dl},get SimpleSpelInput(){return ul},get SpelService(){return Co},get FormikSpelContext(){return ml},get FormikSpelContextProvider(){return gl},get SpelAwareInputMode(){return hl},get SpelToggle(){return vl},get withErrorBoundary(){return jl},get SpinErrorBoundary(){return Ll},get UI_ROUTER_REACT_ERROR_BOUNDARY(){return Ol},get TabBoundary(){return Hl},get Table(){return sc},get TableRow(){return pc},get TableCell(){return uc},get minimalNativeTableLayout(){return mc},get getGridColumnsStyle(){return gc},get standardGridTableLayout(){return Ac},get TetheredCreatable(){return Ec},get TetheredSelect(){return Ti},get BreakString(){return bc},get SingleLineString(){return yc},get ToggleSize(){return Cc},get ToggleButtonGroup(){return xc},get Tooltip(){return Ps},get WatchValue(){return js},get IconTooltip(){return kc},get Applications(){return qx},get Clusters(){return Xx},get ConfigureProjectModal(){return ik},get Pipelines(){return _x},get ProjectAttributes(){return ek},get ProjectHeader(){return ok},get ProjectReader(){return tk},get ProjectWriter(){return nk},get PubsubSubscriptionReader(){return lk},get AngularJSAdapter(){return rs},get CoreModalInject(){return fi},get ModalInjector(){return vi},get NgReactInjector(){return eg},get NgReact(){return tg},get ReactInject(){return mi},get CoreReactInject(){return gi},get ReactInjector(){return hi},get REACT_MODULE(){return ig},get StateEvents(){return ng},get STATE_EVENTS(){return ag},get arePropsEqual(){return rg},get RegionSelectField(){return pk},get RegionSelectInput(){return ck},get Registry(){return $m},get RetryService(){return dk},get SchedulerFactory(){return eo},get GlobalSearch(){return Sg},get InfrastructureSearcher(){return kh},get InfrastructureSearchService(){return Bh},get INFRASTRUCTURE_SEARCH_SERVICE(){return Sh},get SearchService(){return hd},get SearchTableHeader(){return ih},get SearchTableRow(){return rh},get SearchTableBody(){return sh},get HeaderCell(){return lh},get BasicCell(){return ch},get HrefCell(){return ph},get AccountCell(){return dh},get HealthCountsCell(){return uh},get DefaultSearchResultTab(){return mh},get SearchResultType(){return gh},get SearchResultTypeRegistry(){return Lg},get searchResultTypeRegistry(){return Og},get SearchResults(){return xh},get SearchStatus(){return Gg},get Filter(){return Mh},get Filters(){return Nh},get Search(){return Fh},get FilterTypeRegistry(){return Dh},get SearchFilterTypeRegistry(){return Ih},get SecurityGroupWriter(){return sg},get FirewallLabels(){return Js},get SecurityGroupReader(){return Ad},get SECURITY_GROUP_READER(){return Ed},get ServerGroup(){return Nk},get LoadBalancers(){return Ak},get MultiSelectCheckbox(){return Ek},get CloudProviderIcon(){return bk},get ImageList(){return yk},get SequenceAndBuildAndImages(){return Ck},get Alerts(){return wk},get Health(){return xk},get RunningTasks(){return kk},get ServerGroupHeader(){return Bk},get DeployInitializer(){return Dk},get DeployInitializerController(){return Ik},get DEPLOY_INITIALIZER_COMPONENT(){return Tk},get setMatchingResourceSummary(){return Qk},get ServerGroupCommandBuilderService(){return Pk},get SERVER_GROUP_COMMAND_BUILDER_SERVICE(){return Rk},get ServerGroupCommandRegistry(){return Uk},get SERVER_GROUP_COMMAND_REGISTRY_PROVIDER(){return zk},get ServerGroupConfigurationService(){return Gk},get SERVER_GROUP_CONFIGURATION_SERVICE(){return jk},get ServerGroupNamePreview(){return Yk},get ServerGroupDetailsField(){return Vk},get ServerGroupDetails(){return Xk},get ServerGroupDetailsWrapper(){return Zk},get ShowUserData(){return _k},get CapacityDetailsSection(){return nB},get CurrentCapacity(){return eB},get DesiredCapacity(){return tB},get ViewScalingActivitiesLink(){return iB},get ServerGroupWarningMessageService(){return rB},get CloudMetricsReader(){return sB},get MinMaxDesiredChanges(){return oB},get ServerGroupReader(){return rC},get ServerGroupWriter(){return lB},get SERVER_GROUP_WRITER(){return cB},get ServerGroupTemplates(){return pB},get SERVER_GROUP_MANAGER_DATA_SOURCE(){return uB},get SERVER_GROUP_MANAGER_STATES(){return fB},get ServerGroupManagerReader(){return dB},get ServerGroupManagerTag(){return vB},get ServiceAccountReader(){return bw},get ServicesReader(){return AB},get SLACK_COMPONENT(){return bB},get SlackReader(){return EB},get ClusterState(){return Wd},get ExecutionState(){return Kd},get LoadBalancerState(){return qd},get SecurityGroupState(){return Xd},get FunctionState(){return Zd},get initialize(){return _d},get StorageAccountReader(){return yB},get SubnetReader(){return CB},get SubnetTag(){return wB},get PlatformHealthOverrideMessage(){return Jc},get TaskMonitor(){return qc},get TaskMonitorWrapper(){return jc},get TaskReason(){return Xc},get TaskMonitorModal(){return np},get TaskReader(){return Kc},get TaskExecutor(){return tp},get UserVerification(){return rp},get RenderWhenVisible(){return Qi},get CopyToClipboard(){return zi},get now(){return Gi},get DebugTiming(){return Oi},get DebugTimingCumulative(){return Yi},get firstDefined(){return $i},get JsonUtils(){return Hi},get DiffView(){return Vi},get traverseObject(){return Ji},get noop(){return qi},get toIPromise(){return Xi},get RENDER_IF_FEATURE(){return _i},get ScrollToService(){return er},get duration(){return ar},get timeDiffToString(){return ir},get timestamp(){return rr},get relativeTime(){return sr},get timePickerTime(){return or},get TIME_FORMATTERS(){return lr},get decodeUnicodeBase64(){return cr},get UUIDGenerator(){return pr},get WorkerPool(){return ur},get filterObjectValues(){return mr},get logger(){return Ui},get ApplicationsPickerInput(){return Wg},get ScopeClusterSelector(){return qg},get ClusterMatches(){return Xg},get CLUSTER_MATCHES_COMPONENT(){return Zg},get NotifierService(){return to},get SpelNumberInput(){return _g},get SpelText(){return su},get Spinner(){return bs},get DeleteType(){return eh},get Tag(){return nh},get TagList(){return ah},get YAML_EDITOR_COMPONENT(){return SB},get yamlStringToDocuments(){return xB},get yamlDocumentsToString(){return kB},get YamlEditor(){return BB},get CORE_MODULE(){return pQ}});const ai=t.module;t.module=function(e,t,n){if(t&&t.some((e=>!e))){const n=t.map((e=>"string"==typeof e?`'${e}'`:`${e}`)).join(", ");throw new Error(`Got falsey dependency whilst registering angular module '${e}': [${n}]`)}return ai(e,t,n)};const ii={name:"[anonymous]",roles:[],authenticated:!1};class ri{static getAuthenticatedUser(){return{...this.user}}static setAuthenticatedUser(e){e&&e.name&&(this.user.name=e.name,this.user.authenticated=!0,this.user.lastAuthenticated=(new Date).getTime(),this.user.roles=e.roles),this.authEvents.forEach((e=>e()))}static onAuthentication(e){this.authEvents.push(e)}static authenticationExpired(){this.user.authenticated=!1}static reset(){this.user={...ii}}}ri.user={...ii},ri.authEvents=[];class si{static show(e,t,n){const a=new Promise(((a,i)=>{let r=document.createElement("div"),s=!0;function o(){r&&(ln.unmountComponentAtNode(r),r=null)}const l=e=>t=>{r&&(e(t),s=!1,d())},c=l(a),p=l(i);function d(){ln.render(ot.createElement(qt,{show:s,...n,onExited:o},ot.createElement(e,{...t,dismissModal:p,closeModal:c})),r)}d()}));return a.catch((()=>{})),a}}function oi(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var a=document.head||document.getElementsByTagName("head")[0],i=document.createElement("style");i.type="text/css","top"===n&&a.firstChild?a.insertBefore(i,a.firstChild):a.appendChild(i),i.styleSheet?i.styleSheet.cssText=e:i.appendChild(document.createTextNode(e))}}var li,ci;oi(".modal-logged-out {\n text-align: center;\n padding: 30px 60px !important;\n}\n.modal-logged-out h3 {\n margin: 30px 0 !important;\n}\n.modal-logged-out p {\n margin-bottom: 30px;\n}\n.modal-logged-out .fa-hourglass {\n position: absolute;\n display: block;\n top: 95px;\n left: 278px;\n height: 0;\n font-size: 62px;\n}\n");class pi extends ot.Component{static show(){return si.show(pi,{})}render(){return ot.createElement(qt.Body,{className:"modal-logged-out"},ot.createElement("svg",{width:"162px",height:"143px",viewBox:"0 0 162 143"},ot.createElement("g",{id:"Page-1",stroke:"none",strokeWidth:"1",fill:"none",fillRule:"evenodd"},ot.createElement("g",{transform:"translate(3.000000, 3.000000)"},ot.createElement("polygon",{id:"Fill-1",fill:"#E8AE2F",points:"0 138 81 0 156 138"}),ot.createElement("polygon",{id:"Stroke-3",stroke:"#000000",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round",points:"0 138 81 0 156 138"})))),ot.createElement("i",{className:"far fa-hourglass"}),ot.createElement("h3",null,"You have been logged out."),ot.createElement("p",null,"Please click below or refresh your browser to log back in."),ot.createElement("p",null,ot.createElement("button",{className:"btn btn-primary",onClick:()=>window.location.reload()},"Refresh and log me back in")))}}const di=window.spinnakerSettings||{};di.feature=di.feature||{},di.feature.roscoMode=null==(li=di.feature.roscoMode)||li,di.kubernetesAdHocInfraWritesEnabled=null==(ci=di.kubernetesAdHocInfraWritesEnabled)||ci,di.analytics=di.analytics||{},di.providers=di.providers||{},di.defaultTimeZone=di.defaultTimeZone||"America/Los_Angeles",di.dockerInsights=di.dockerInsights||{enabled:!1,url:""},di.changelogUrl=di.changelogUrl||"https://spinnaker.io/changelogs/:version-changelog",di.managedDelivery=di.managedDelivery||{defaultManifest:"spinnaker.yml",manifestBasePath:".spinnaker"};const ui=p(di);di.resetToOriginal=()=>{Object.keys(di).filter((e=>"function"!=typeof di[e])).forEach((e=>delete di[e])),d(di,ui)},di.resetProvider=e=>()=>{const t=di.providers[e];Object.keys(t).filter((e=>"function"!=typeof t[e])).forEach((e=>delete t[e])),d(t,ui.providers[e])};class mi{}class gi extends mi{get $state(){return this.wrappedState||(this.wrappedState=this.createStateService()),this.wrappedState}get $q(){return this.$injector.get("$q")}get $rootScope(){return this.$injector.get("$rootScope")}get $stateParams(){return this.$injector.get("$stateParams")}get $uiRouter(){return this.$injector.get("$uiRouter")}get cacheInitializer(){return this.$injector.get("cacheInitializer")}get clusterService(){return this.$injector.get("clusterService")}get executionDetailsSectionService(){return this.$injector.get("executionDetailsSectionService")}get executionService(){return this.$injector.get("executionService")}get imageReader(){return this.$injector.get("imageReader")}get infrastructureSearchService(){return this.$injector.get("infrastructureSearchService")}get insightFilterStateModel(){return this.$injector.get("insightFilterStateModel")}get instanceTypeService(){return this.$injector.get("instanceTypeService")}get instanceWriter(){return this.$injector.get("instanceWriter")}get manualJudgmentService(){return this.$injector.get("manualJudgmentService")}get overrideRegistry(){return this.$injector.get("overrideRegistry")}get pageTitleService(){return this.$injector.get("pageTitleService")}get providerServiceDelegate(){return this.$injector.get("providerServiceDelegate")}get securityGroupReader(){return this.$injector.get("securityGroupReader")}get serverGroupWriter(){return this.$injector.get("serverGroupWriter")}get stateEvents(){return this.$injector.get("stateEvents")}createStateService(){const e=Object.create(this.$injector.get("$state")),t=this.$injector.get("$rootScope"),n=this.$injector.get("$q"),a=e.go;return e.go=function(){const e=arguments,i=Object.create(n.defer()),{promise:r}=i;return r.transition=null,r.catch((()=>{})),t.$applyAsync((()=>{const t=a.apply(this,e);r.transition=t.transition,t.then(i.resolve,i.reject)})),r},e}initialize(e){this.$injector=e}}const hi=new gi;class fi extends mi{get modalService(){return this.$injector.get("$uibModal")}get modalStackService(){return this.$injector.get("$uibModalStack")}initialize(e){this.$injector=e}}const vi=new fi;class Ai{static checkForReauthentication(){We.get(di.authEndpoint).then((e=>{e.data.username&&(ri.setAuthenticatedUser({name:e.data.username,authenticated:!1,roles:e.data.roles}),vi.modalStackService.dismissAll(),this.visibilityWatch.unsubscribe())})).catch((()=>{}))}static loginNotification(){ri.authenticationExpired(),this.userLoggedOut=!0,this.openLoggedOutModal(),this.visibilityWatch=ht(document,"visibilitychange").subscribe((()=>{"visible"===document.visibilityState&&this.checkForReauthentication()}))}static openLoggedOutModal(){pi.show()}static loginRedirect(){const e=encodeURIComponent(Ke.absUrl());window.location.href=`${di.gateUrl}/auth/redirect?to=${e}`}static authenticateUser(){qe.authenticating=!0,We.get(di.authEndpoint).then((e=>{e.data.username?(ri.setAuthenticatedUser({name:e.data.username,authenticated:!1,roles:e.data.roles}),qe.authenticating=!1):this.loginRedirect()})).catch((()=>this.loginRedirect()))}static reauthenticateUser(){this.userLoggedOut||(this.userLoggedOut=!0,We.get(di.authEndpoint).then((e=>{e.data.username?(ri.setAuthenticatedUser({name:e.data.username,authenticated:!1,roles:e.data.roles}),qe.authenticating=!1,this.userLoggedOut=!1):this.loginNotification()})).catch((()=>this.loginNotification())))}static logOut(){if(!this.userLoggedOut){const e={headers:{"Content-Type":"text/plain"},transformResponse:e=>e};We.get(`${di.gateUrl}/auth/logout`,e).then((()=>this.loggedOutSequence()),(()=>this.loggedOutSequence()))}}static loggedOutSequence(){ri.authenticationExpired(),this.userLoggedOut=!0,this.openLoggedOutModal()}}Ai.userLoggedOut=!1,Ai.visibilityWatch=null;class Ei extends Error{constructor(e,t){super(e),this.originalResult=t,this.data={message:e}}}function bi(...e){return e.filter((e=>!u(e)&&""!==e)).map((e=>e.toString())).map((e=>e.replace(/^\/+/,""))).map((e=>e.replace(/\/+$/,""))).join("/")}const yi=class{constructor(e=ki(),t,n){this.config=e,this._httpClient=t,this._baseUrl=n}builder(e){return new yi(e,this.httpClient,this._baseUrl)}get httpClient(){var e;return null!=(e=this._httpClient)?e:yi.defaultHttpClient}get baseUrl(){var e;return bi(null!=(e=this._baseUrl)?e:di.gateUrl)}path(...e){const t=bi(this.config.url,...e.map((e=>encodeURIComponent(e))));return this.builder({...this.config,url:t})}headers(e){return this.builder({...this.config,headers:{...this.config.headers,...e}})}get(e={}){const t={...this.config.params,...e},n=bi(this.baseUrl,this.config.url);return this.httpClient.get({...this.config,url:n,params:t})}post(e){const t=null!=e?e:this.config.data,n=bi(this.baseUrl,this.config.url);return this.httpClient.post({...this.config,url:n,data:t})}put(e){const t=null!=e?e:this.config.data,n=bi(this.baseUrl,this.config.url);return this.httpClient.put({...this.config,url:n,data:t})}patch(e){const t=null!=e?e:this.config.data,n=bi(this.baseUrl,this.config.url);return this.httpClient.patch({...this.config,url:n,data:t})}delete(e){const t=null!=e?e:this.config.data,n=bi(this.baseUrl,this.config.url);return this.httpClient.delete({...this.config,url:n,data:t})}useCache(e=!0){return this.builder({...this.config,cache:e})}query(e){const t={...this.config.params,...e};return this.builder({...this.config,params:t})}};let Ci=yi;Ci.defaultHttpClient=new class{constructor(){this.delete=e=>this.request("DELETE",e),this.get=e=>this.request("GET",e),this.post=e=>this.request("POST",e),this.put=e=>this.request("PUT",e),this.patch=e=>this.request("PATCH",e)}request(e,t){return We({...t,method:e}).then((e=>{const t=e.headers("content-type");if(t){const n=t.match(/application\/(.+\+)?json/),a=t.match(/application\/(.+-)?yaml/),i=t.includes("text/html")&&""===e.data,r=t.includes("text/plain")&&""===e.data;if(!(n||a||i||r))throw Ai.reauthenticateUser(),new Ei(xi,e)}return e.data}))}};class wi extends Ci{constructor(){super(...arguments),this.builder=e=>new wi(e,this._httpClient,this._baseUrl),this.getList=this.get.bind(this),this.one=this.path.bind(this),this.all=this.path.bind(this),this.remove=this.delete.bind(this).bind(this),this.data=e=>this.builder({...this.config,data:e}),this.withParams=this.query.bind(this),this.useCache=(e=!0)=>this.builder({...this.config,cache:e})}get baseUrl(){return super.baseUrl}}const xi="API response was neither JSON nor zero-length html or text";function ki(e){return{url:bi(e),cache:!1,data:void 0,params:{},timeout:2*(di.apiTimeoutMs||di.pollSchedule||3e4)+5e3,headers:{"X-RateLimit-App":"deck"}}}const Bi=new class extends wi{constructor(){super(...arguments),this.one=(...e)=>{const t=bi(this.config.url,...e);return this.builder({...this.config,url:t})},this.all=(...e)=>{const t=bi(this.config.url,...e);return this.builder({...this.config,url:t})}}}(ki()),Si=e=>new Ci(ki(e)),Mi=class{static registerProvider(e,t){di.providers[e]&&this.providers.set(e,t)}static getProvider(e){return this.providers.has(e)?p(this.providers.get(e)):null}static listRegisteredProviders(){return Array.from(this.providers.keys())}static overrideValue(e,t,n){this.providers.has(e)?g(this.providers.get(e),t,n):console.warn(`Cannot override "${t}" for provider "${e}" (provider not registered)`)}static hasValue(e,t){return this.providers.has(e)&&null!==this.getValue(e,t)}static getValue(e,t){var n;return null!=(n=m(this.getProvider(e),t))?n:null}static isDisabled(e){return!u(Mi.getValue(e,"adHocInfrastructureWritesEnabled"))&&!1===Mi.getValue(e,"adHocInfrastructureWritesEnabled")}};let Ni=Mi;Ni.providers=new Map;class Di{static initialize(){this.accounts$=ft((()=>{const e=Si("/credentials").useCache().query({expand:!0}).get();return vt(e)})).pipe(Mt(1),Nt()),this.providers$=Di.accounts$.pipe(St((e=>{const t=f(e.map((e=>e.type)));return h(t,Ni.listRegisteredProviders())})))}static challengeDestructiveActions(e){return Ze((t=>{e?this.getAccountDetails(e).then((e=>{t(!!e&&e.challengeDestructiveActions)})).catch((()=>t(!1))):t(!1)}))}static getArtifactAccounts(){return Si("/artifacts/credentials").useCache().get()}static getAccountDetails(e){return this.listAllAccounts().then((t=>t.find((t=>t.name===e))))}static getAllAccountDetailsForProvider(e){return this.listAccounts(e).catch((t=>(Xe.warn(`Failed to load accounts for provider "${e}"; exception:`,t),[])))}static getAvailabilityZonesForAccountAndRegion(e,t,n){return this.getPreferredZonesByAccount(e).then((e=>e[t]&&e[t][n]||[]))}static getCredentialsKeyedByAccount(e=null){return this.listAllAccounts(e).then((e=>{const t=e.map((e=>e.name));return v(t,e)}))}static getPreferredZonesByAccount(e){const t={};return this.getAllAccountDetailsForProvider(e).then((e=>(e.forEach((e=>{t[e.name]={},e.regions.forEach((n=>{let a=n.availabilityZones;n.preferredZones&&(a=h(n.preferredZones,n.availabilityZones)),t[e.name][n.name]=a}))})),t)))}static getRegionsForAccount(e){return this.getAccountDetails(e).then((e=>e?e.regions:[]))}static getUniqueAttributeForAllAccounts(e,t){return this.getCredentialsKeyedByAccount(e).then((e=>A(e).map(t).flatten().compact().map((e=>e.name||e)).uniq().value()))}static listAllAccounts(e=null){return Ze.when(this.accounts$.toPromise()).then((t=>t.filter((t=>!e||t.type===e))))}static listAccounts(e=null){return this.listAllAccounts(e).then((e=>e.filter((e=>!1!==e.authorized))))}static applicationAccounts(e=null){return Ze.all([this.listProviders(e),this.listAccounts()]).then((([e,t])=>e.reduce(((e,n)=>e.concat(t.filter((e=>e.cloudProvider===n)))),[])))}static listProviders$(e=null){return this.providers$.pipe(St((t=>e?e.attributes.cloudProviders.length?h(t,e.attributes.cloudProviders):di.defaultProviders?h(t,di.defaultProviders):t:t)),St((e=>e.sort())))}static listProviders(e=null){return Ze.when(this.listProviders$(e).toPromise())}static getAccountForInstance(e,t,n){return n.ready().then((()=>{const a=n.getDataSource("serverGroups").data,i=n.getDataSource("loadBalancers").data,r=i.map((e=>e.serverGroups)).reduce(((e,t)=>e.concat(t)),[]),s=[].concat(a).concat(i).concat(r).find((n=>n.cloudProvider===e&&(n.instances||[]).some((e=>e.id===t))));return s&&s.account}))}}Di.initialize();const Ii=e=>(e=e||[]).map((e=>({label:e,value:e})));class Fi extends ot.Component{constructor(){super(...arguments),this.memoizedMakeOptions=un(Ii,E)}render(){const e=this.memoizedMakeOptions(this.props.strings);return(this.props.render||this.props.children)(e)}}class Ti extends cn{constructor(e){super(e),this.renderOuter=this._renderOuter}_renderOuter(){const e=super.renderOuter.apply(this,arguments);if(!e)return null;const t=this.wrapper?this.wrapper.offsetWidth:null;return ot.createElement(mn,{classes:{element:"layer-critical"},attachment:"top left",targetAttachment:"top left",constraints:[{to:"window",attachment:"together",pin:["top"]}]},ot.createElement("div",null),ot.cloneElement(e,{style:{position:"static",width:t}}))}}const Qi=({bufferHeight:e=0,initiallyVisible:t,placeholderHeight:n,render:a,container:i,disableHide:r})=>{const[s,o]=ot.useState(!!t),[l,c]=ot.useState(n);let p;const d=ot.useRef();return ot.useEffect((()=>{let t=s;return p=new IntersectionObserver((e=>{const n=e[0].isIntersecting;n&&!t&&(t=!0,o(!0)),n||!t||r||(t=!1,c(e[0].boundingClientRect.height),o(!1))}),{root:i,threshold:[0],rootMargin:e&&i?`${e}px 0px`:"0px"}),p.observe(d.current),()=>{p.disconnect()}}),[]),ot.createElement("div",{ref:d,className:"render-when-visible"},s&&a(),!s&&ot.createElement("div",{style:{height:l+"px"}}))},Pi={DEBUG:1,INFO:2,WARN:3,ERROR:4},Ri=e=>Pi[e||"INFO"];const Ui=new class{constructor(){this.loggers=[],this.ignoredErrors=["ResizeObserver loop limit exceeded","ResizeObserver loop completed with undelivered notifications."]}subscribe(e){return this.loggers.push(e),()=>this.loggers.filter((t=>t!==e))}unsubscribe(e){this.loggers.filter((t=>t.key!==e))}log(e){var t;(null==(t=e.error)?void 0:t.message)&&this.ignoredErrors.includes(e.error.message)||this.loggers.forEach((t=>{Ri(e.level)>=Ri(t.level)&&t.onEvent(e)}))}};oi(".clipboard-btn {\n background-color: transparent !important;\n border-width: 0 !important;\n color: var(--color-dovegray) !important;\n display: inline-block !important;\n margin-left: 2px !important;\n}\n.clipboard-btn:hover {\n background-color: transparent;\n}\n.copy-to-clipboard-sm .clipboard-btn {\n margin-bottom: 3px;\n}\n");class zi extends ot.Component{constructor(e){super(e),this.inputRef=ot.createRef(),this.mounted=!1,this.handleClick=e=>{e.preventDefault(),this.props.stopPropagation&&e.stopPropagation();const{analyticsLabel:t,text:n}=this.props;Ui.log({category:"Copy to Clipboard",action:"copy",data:{label:t||n}});const a=this.inputRef.current;a.focus(),a.select();try{document.execCommand("copy"),a.blur(),this.setState({tooltipCopy:"Copied!",shouldUpdatePosition:!0}),window.setTimeout(this.resetToolTip,3e3)}catch(e){a.blur(),this.setState({tooltipCopy:"Couldn't copy!",shouldUpdatePosition:!0})}},this.resetToolTip=()=>{this.mounted&&this.setState({tooltipCopy:!1,shouldUpdatePosition:!0})},this.state={tooltipCopy:!1,shouldUpdatePosition:!1}}componentDidMount(){this.mounted=!0}componentWillUnmount(){this.mounted=!1}renderTooltip(e){const{toolTip:t,text:n=""}=this.props,{tooltipCopy:a,shouldUpdatePosition:i}=this.state,r=Boolean(a),s=a||t,o=`clipboardValue-${n.toString().replace(" ","-")}`,l=ot.createElement(Zt,{id:o},s),c={shouldUpdatePosition:i};return s?ot.createElement(Xt,{defaultOverlayShown:r,placement:"top",overlay:l,delayHide:250,...c},e):e}render(){const{buttonInnerNode:e,text:t="",className:n="btn btn-xs btn-default clipboard-btn"}=this.props,a=ot.createElement("button",{onClick:this.handleClick,className:n,"aria-label":"Copy to clipboard"},e||ot.createElement("span",{className:"glyphicon glyphicon-copy"}));return ot.createElement(ot.Fragment,null,ot.createElement("textarea",{onChange:e=>e,ref:this.inputRef,value:t,tabIndex:-1,style:{zIndex:-1,position:"fixed",opacity:0,top:0,left:0}}),this.renderTooltip(a))}}zi.defaultProps={displayText:!1};const Gi=performance?performance.now.bind(performance):Date.now.bind(Date),ji=console.log.bind(console),Li=(e,t)=>"object"==typeof e&&e.constructor&&e.constructor.name?`${e.constructor.name}.${t}():`:`${t}():`,Oi=e=>(t,n,a)=>{const i=a.value;e=b(e||Li(t,n),50),a.value=function(){const t=Gi(),n=i.apply(this,arguments),a=Gi()-t;return ji(`${e} ${a} ms`),n}},Yi=(e,t=5e3)=>(n,a,i)=>{const r=i.value;let s=0;e=b(e||Li(n,a),50);let o=0;setInterval((()=>ji(`${e} ${b(""+s,10)} calls in ${o} ms`)),t),i.value=function(){s++;const e=Gi(),t=r.apply(this,arguments);return o+=Gi()-e,t}};function $i(...e){return e.find((e=>!u(e)))}class Hi{static generateDiff(e,t){const n=new gn,a=n.diff_linesToChars_(e,t),i=n.diff_main(a.chars1,a.chars2,!1);return n.diff_charsToLines_(i,a.lineArray),i}static sortObject(e){return!e||y(e)||C(e)?e:Object.keys(e).sort().reduce(((t,n)=>(w(e[n])?t[n]=this.sortObject(e[n]):x(e[n])?t[n]=e[n].map((e=>this.sortObject(e))):t[n]=e[n],t)),{})}static makeSortedString(e){return this.makeSortedStringFromObject(JSON.parse(e))}static makeSortedStringFromObject(e){return this.makeStringFromObject(this.sortObject(e))}static makeStringFromObject(e,t=2){return JSON.stringify(e,null,t)}static makeSortedStringFromAngularObject(e,t=[]){return JSON.stringify(this.sortObject(e),((e,n)=>{let a=n;return"string"==typeof e&&"$"===e.charAt(0)&&"$"===e.charAt(1)&&(a=void 0),t.includes(e)&&(a=void 0),a}))}static diff(e,t,n=!1){n&&(e=this.makeSortedString(e),t=this.makeSortedString(t));const a=this.generateDiff(e,t),i=[];let r=0,s=0,o=0,l=0;const c=[];return a.forEach((e=>{const t=e[1].split("\n");""===t[t.length-1]&&t.pop();let n="match";1===e[0]&&(n="add",r+=t.length,c.push({type:n,lines:t.length,start:l,height:null,top:null})),-1===e[0]&&(n="remove",s+=t.length,c.push({type:n,lines:t.length,start:l,height:null,top:null})),0===e[0]&&(o+=t.length),t.forEach((e=>i.push({type:n,text:e}))),l+=t.length})),c.forEach((e=>{e.height=100*e.lines/l,e.top=100*e.start/l})),{details:i,summary:{additions:r,removals:s,unchanged:o,total:l},changeBlocks:c}}}function Vi(e){const{diff:t}=e,n=ot.useRef();return ot.createElement(ot.Fragment,null,ot.createElement("pre",{ref:n,className:"form-control flex-fill diff"},t.details.map(((e,t)=>ot.createElement("div",{"data-attr-line":t,className:e.type,key:t},e.text)))),ot.createElement("div",{className:"summary-nav flex-fill",onClick:function(e){var a;let i;const r=e.target,s=e.currentTarget,o=n.current.firstChild.clientHeight;i=r.getAttribute("data-attr-block-line")?Number(r.getAttribute("data-attr-block-line")):(null==(a=e.nativeEvent)?void 0:a.offsetY)/s.clientHeight*t.summary.total,n.current.scroll({top:(i-3)*o,behavior:"smooth"})}},t.changeBlocks.map(((e,t)=>ot.createElement("div",{"data-attr-block-line":e.start,key:t,style:{height:e.height+"%",top:e.top+"%"},className:"delta "+e.type})))))}oi(".diff-view {\n width: 100%;\n display: block;\n position: relative;\n}\n.diff-view .diff {\n color: var(--color-black);\n font-size: 80%;\n overflow-x: visible;\n margin: 0;\n padding-bottom: 0;\n}\n.diff-view .diff .match,\n.diff-view .diff .add,\n.diff-view .diff .remove {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\n.diff-view .diff .match::before,\n.diff-view .diff .add::before,\n.diff-view .diff .remove::before {\n position: relative;\n left: 0;\n}\n.diff-view .diff .match {\n color: var(--color-dovegray);\n}\n.diff-view .diff .match::before {\n content: ' ';\n}\n.diff-view .diff .add {\n background-color: var(--color-github-history-add);\n}\n.diff-view .diff .add::before {\n content: '+';\n}\n.diff-view .diff .remove {\n background-color: var(--color-github-history-remove);\n}\n.diff-view .diff .remove::before {\n content: '-';\n}\n.diff-view .diff .form-group {\n margin-bottom: 0;\n}\n.diff-view .diff::-webkit-scrollbar {\n height: 8px;\n}\n.diff-view .summary-nav {\n cursor: pointer;\n z-index: 2;\n width: 12px;\n position: absolute;\n top: 0;\n right: 7px;\n height: calc(100% - 8px);\n}\n.diff-view .summary-nav .delta {\n width: 100%;\n position: absolute;\n min-height: 3px;\n}\n.diff-view .summary-nav .delta.add {\n background: var(--color-success);\n}\n.diff-view .summary-nav .delta.remove {\n background: var(--color-danger);\n}\n");const Ji=(e,t,n=!1)=>Ki(null,e,t,n);function Wi(e,t){const n=y(t)?`[${t}]`:t.includes(".")?`["${t}"]`:t,a=n.includes("["),i=e?a?e:`${e}.`:"";if(a&&!i)throw new Error(`Cannot construct path from '${n}' using array syntax because the parent path is undefined.`);return`${i}${n}`}const Ki=(e,t,n,a)=>{function i(i){null===e||!i&&a||n(e,t)}k(t)||B(t)?i(!0):w(t)?(i(!1),S(t,((t,i)=>Ki(Wi(e,i),t,n,a)))):Array.isArray(t)?(i(!1),t.forEach(((t,i)=>Ki(Wi(e,i),t,n,a)))):i(!0)};const qi=function(){};function Xi(e){return Ze(((t,n)=>{let a;e.subscribe((e=>a=e),(e=>n(e)),(()=>t(a)))}))}const Zi={bindings:{feature:"@"},controller:class{constructor(){this.featureEnabled=!1}$onInit(){this.featureEnabled=this.feature&&di.feature[this.feature]}},transclude:!0,template:'<ng-transclude ng-if="$ctrl.featureEnabled"></ng-transclude>'},_i="spinnaker.core.renderIfFeature.directive";n(_i,[]).component("renderIfFeature",Zi);class er{static toDomId(e){return e.replace(/[\W]/g,"-")}static scrollTo(e,t,n=0,a=0){_e((()=>{const a=hn(e);if(a.length){const e=t?a.closest(t):hn("body");if(e.length){const t=e.scrollTop()+a.offset().top-n;e.animate({scrollTop:t+"px"},200)}}}),a)}}const tr=()=>{const e=di.defaultTimeZone,t=En.local().setZone(e);return ot.createElement("span",null,t.offsetNameShort)},nr=e=>!(!e||isNaN(e)||e<0||e>864e13);function ar(e){if(!nr(e))return"-";const t=bn.fromMillis(e),n=Math.floor(t.as("days")),a=t.minus({days:Math.floor(t.as("days"))}),i=a.days||Math.floor(a.as("hours"))?"hh:mm:ss":"mm:ss";let r="";return a.isValid&&n>0&&(r=n+"d"),a.isValid?r+a.toFormat(i):"-"}function ir(e,t){const n=t.diff(e).shiftTo("days","hours","minutes","seconds"),a=[];let i=!1;const r=(e,t)=>{(n[e]||i)&&(a.push(t),i=!0)};return r("days","d'd'"),r("hours","h'h'"),r("minutes","m'm'"),a.push("s's'"),n.toFormat(a.join(" "))}function rr(e){if(!nr(e))return"-";const t=di.feature.displayTimestampsInUserLocalTime?void 0:di.defaultTimeZone,n=En.fromMillis(parseInt(e,10),{zone:t});return n.isValid?n.toFormat("yyyy-MM-dd HH:mm:ss ZZZZ"):"-"}function sr(e){if(!nr(e))return"-";const t=e>Date.now(),n=En.fromMillis(e),a=fn(n.toJSDate(),{includeSeconds:!0});return n.isValid?`${t?"in ":""}${a}${t?"":" ago"}`:"-"}function or(e){if(e&&!isNaN(e.hours)&&!isNaN(e.minutes)){const t=parseInt(e.hours,10),n=parseInt(e.minutes,10);let a="";return t<10&&(a+="0"),a+=t+":",n<10&&(a+="0"),a+=n,a}return"-"}const lr="spinnaker.core.utils.timeFormatters";n(lr,[]).filter("timestamp",(()=>rr)).filter("relativeTime",(()=>sr)).filter("duration",(()=>ar)).filter("timePickerTime",(()=>or)).component("systemTimezone",yn(tr));const cr=e=>decodeURIComponent(atob(e).split("").map((e=>"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2))).join(""));class pr{static getRandom(e){return Math.random()*e}static generateUuid(){let e="";for(let t=0;t<36;t++)switch(t){case 14:e+="4";break;case 19:e+="89ab".charAt(pr.getRandom(4));break;case 8:case 13:case 18:case 23:e+="-";break;default:e+="0123456789abcdef".charAt(pr.getRandom(16))}return e}}class dr{constructor(e){this.task=e,this.workerPromise=new Promise(((e,t)=>Object.assign(this,{resolve:e,reject:t})))}run(){const e=this.task();return e.then(this.resolve,this.reject),e}cancel(e){this.reject(B(e)?"Cancelled":e)}}class ur{constructor(e){this.concurrency=e,this.queuedTasks=[],this.runningTasks=[]}task(e){const t=new dr(e);return this.queuedTasks.push(t),this.flush(),t.workerPromise}cancelAll(e){[].concat(this.runningTasks).concat(this.queuedTasks).forEach((t=>t.cancel(e))),this.runningTasks=[],this.queuedTasks=[]}flush(){const{queuedTasks:e,runningTasks:t}=this;e.length&&t.length<this.concurrency&&this.runTask(e.shift())}completeTask(e){this.runningTasks=M(this.runningTasks,e),this.flush()}runTask(e){this.runningTasks.push(e);const t=()=>this.completeTask(e);e.run().then(t,t)}}function mr(e,t,n={leafNodesOnly:!0}){const a={};return Ji(e,((e,n)=>{t(n,e)&&g(a,e,n)}),n.leafNodesOnly),a}const gr=e=>u(e)?"":e,hr=(e={})=>Cn({"ng-dirty":!!e.touched,"ng-invalid":"error"===e.category,"ng-warning":"warning"===e.category}),fr=e=>({persist:qi,stopPropagation:qi,preventDefault:qi,target:e}),vr=e=>e&&e.length&&e.every(C);class Ar{constructor(e,t){this.name=e,this.label=t,this.validators=[]}required(e){return this.isRequired=!0,this.isRequiredMessage=e,this}optional(){return this.isRequired=!1,this.isRequiredMessage=void 0,this}spelAware(e=!0){return this.isSpelAware=e,this}withValidators(...e){return this.validators=this.validators.concat(e),this}}const Er="__FIELD_IS_VALID_SHORT_CIRCUIT__",br=e=>{const t=e.filter((e=>!!e));if(!t.length)return null;if(1===t.length)return t[0];return(e,n)=>t.map((t=>t(e,n))).find((e=>!!e))};function yr(e){if(!e)return"";let t=e.charAt(0).toUpperCase()+e.substr(1);return/\s/g.test(t)||(t=t.replace(/[A-Z]/g," $&"),t=t.replace(/_[a-z]/g,(function(e){return" "+e.charAt(1).toUpperCase()+e.substr(2)})),t=t.replace(/-[a-z]/g,(function(e){return" "+e.charAt(1).toUpperCase()+e.substr(2)})),t=t.replace(/([A-Z])\s([A-Z])\s/g,"$1$2")),t}function Cr(){return yr}const wr="spinnaker.core.presentation.robotToHuman.filter";n(wr,[]).filter("robotToHuman",Cr);const xr=new RegExp('^(([^<>()\\[\\]\\\\.,;:\\s@"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@"]+)*)|(".+"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$'),kr={arrayNotEmpty:e=>function(t,n="This field"){return e=e||`${n} must contain at least one entry`,t&&t.length<1&&e},checkBetween:(e,t,n)=>function(a){const i=Number.parseInt(a,10);if(!Number.isNaN(i)){return kr.minValue(t)(i,yr(e))||kr.maxValue(n)(i,yr(e))}return null},emailValue:e=>function(t,n="This field"){return e=e||`${n} is not a valid email address.`,t&&!xr.test(t)&&e},isNum:e=>function(t){return y(t)?null:e||"Must be a number"},isRequired:e=>function(t,n="This field"){return e=e||`${n} is required.`,(null==t||""===t)&&e},isValidJson:e=>function(t,n="this field"){try{JSON.parse(t)}catch(t){return e=e||`${n} must be valid JSON: ${t.message}`}},isValidXml:e=>function(t,n="this field"){const a=(new DOMParser).parseFromString(t,"text/xml").getElementsByTagName("parsererror");if(a&&a.length>0)return e=e||`${n} must be valid XML`},maxValue:(e,t)=>function(n,a="This field"){if(!y(n))return t||`${a} must be a number`;if(n>e){const n=`cannot be greater than ${e}`;return t||`${a} ${n}`}return null},minValue:(e,t)=>function(n,a="This field"){if(!y(n))return t||`${a} must be a number`;if(n<e){const n=0===e?"cannot be negative":`cannot be less than ${e}`;return t||`${a} ${n}`}return null},oneOf:(e,t)=>function(n,a="This field"){return e=e||[],t=t||`${a} must be one of (${e.join(", ")})`,!e.includes(n)&&t},skipIfUndefined:e=>function(t,n="This field"){return void 0!==t&&e(t,n)},skipIfSpel:e=>function(t,n="This field"){return"string"==typeof t&&t.includes("${")?void 0:e(t,n)},valueUnique:(e,t)=>function(n,a="This field"){return e=e||[],t=t||`${a} must be not be included in (${e.join(", ")})`,e.includes(n)&&t}};class Br{constructor(e){this.values=e,this.fields=[],this.isSpelAwareDefault=!1}field(e,t){t=t||N(e);const n=new Ar(e,t);return this.fields.push(n),n}spelAware(e=!0){return this.isSpelAwareDefault=e,this}getFieldValidators(e,t){const n=D(e.isSpelAware)?e.isSpelAware:t;return[e.isRequired?kr.isRequired(e.isRequiredMessage):null,e.isRequired?null:e=>null==e||""===e?Er:null,n?e=>"string"==typeof e&&e.includes("${")?Er:null:null,...e.validators].filter((e=>!!e))}validateForm(){return((e,t)=>e.reduce(((e,t)=>g(e,t.name,t.error)),t?[]:{}))(this.fields.map((e=>{const{name:t,label:n}=e,a=m(this.values,t);return{name:t,error:((e,t,n)=>e.reduce(((e,a)=>e||a(t,n)),""))(this.getFieldValidators(e,this.isSpelAwareDefault),a,n)}})).filter((e=>{return!(!(t=e.error)||t===Er||"string"!=typeof t&&(Array.isArray(t)?!t.length:"object"==typeof t?!Object.keys(t).length:!t));var t})),Array.isArray(this.values))}arrayForEach(e){return((e,t)=>(n,a)=>{if(!Array.isArray(n))return!1;const i=e(n);return n.forEach(((e,r)=>{const s=((e,t)=>({item:n=>e.field(`[${t}]`,n),field:(n,a)=>e.field(`[${t}].${n}`,a),validateForm:e.validateForm,arrayForEach:e.arrayForEach}))(i,r);t&&t(s,e,r,n,a)})),i.validateForm()})((e=>new Br(e)),e)}}function Sr(e){const{message:t,tag:n,className:a,trim:i,tag:r="div",...s}=e,o=ot.useMemo((()=>new wn),[]),l=ot.useMemo((()=>new xn),[]),c=`Markdown ${a||""}`;if(null==t)return null;const p=i?t.trim():t,d=s,u=o.parse(p.toString()),m=l.render(u);return d.dangerouslySetInnerHTML={__html:kn.sanitize(m,{...e.options,RETURN_DOM_FRAGMENT:!1,RETURN_DOM:!1})},ot.createElement(r,{...d,className:c})}oi(".Markdown p {\n margin: 0;\n}\n.Markdown p + p {\n margin-top: 4px;\n}\nspan.Markdown p {\n display: contents;\n}\n");const Mr=(e,t={},n=!1)=>ot.createElement(Sr,{message:e,tag:n?"span":"div",options:t});oi(".ValidationMessage {\n min-height: 40px;\n display: flex;\n margin-bottom: 2px;\n}\n.ValidationMessage.errorMessage {\n color: var(--color-validation-error);\n background-color: var(--color-validation-error-light);\n}\n.ValidationMessage.infoMessage {\n color: var(--color-validation-info);\n background-color: var(--color-validation-info-light);\n}\n.ValidationMessage.previewMessage {\n color: var(--color-validation-info);\n background-color: var(--color-validation-info-light);\n}\n.ValidationMessage.successMessage {\n color: var(--color-validation-success);\n background-color: var(--color-validation-success-light);\n}\n.ValidationMessage.warningMessage {\n color: var(--color-validation-black);\n background-color: var(--color-validation-warning-light);\n}\n.ValidationMessage i {\n flex: 0 0 40px;\n height: 40px;\n font-size: 24px;\n padding: 7px;\n}\n.ValidationMessage .message {\n margin: 8px 8px 8px 0;\n align-self: center;\n}\n");const Nr={async:"infoMessage",error:"errorMessage",info:"infoMessage",message:"infoMessage",success:"successMessage",warning:"warningMessage"},Dr={async:"fa fa-spinner fa-spin",error:"fa fa-exclamation-circle",info:"fa fa-info-circle",message:"icon-view-1",success:"far fa-check-circle",warning:"fa icon-alert-triangle"},Ir=e=>{const{type:t,message:n,iconClassName:a,containerClassName:i}=e,r=!1!==a;return ot.createElement("div",{className:`ValidationMessage ${i||Nr[t]||""}`},r&&ot.createElement("i",{className:a||Dr[t]||""}),ot.createElement("div",{className:"message"},C(n)?ot.createElement(Sr,{message:n}):n))},Fr={async:"Async",error:"Error",info:"Info",message:"Message",success:"Success",warning:"Warning"},Tr=I(Fr),Qr=Object.keys(Fr),Pr=Object.keys(Fr).reduce(((e,t)=>({...e,[Fr[t]]:t})),{}),Rr=e=>t=>t?`${Fr[e]}: ${t}`:null,Ur=Rr("async"),zr=Rr("error"),Gr=Rr("info"),jr=Rr("message"),Lr=Rr("success"),Or=Rr("warning"),Yr=new RegExp(`^(${Tr.join("|")}): ((?:[\r\n]|.)*)$`,"m"),$r=e=>{if(!e)return[null,null];const t=Yr.exec(e);if(!t)return["error",e];const[n,a]=t.slice(1);return[Pr[n],a]},Hr=e=>{const t=Qr.reduce(((e,t)=>({...e,[t]:{}})),{});return Ji(e,((e,n)=>{const[a,i]=$r(n);i&&g(t[a],e,i)}),!0),t};function Vr(e,t){return ot.useMemo((()=>{if(!e)return{category:null,messageNode:null,hidden:!0};if(ot.isValidElement(e))return{category:null,messageNode:e,hidden:!1};if(C(e)){const[n,a]=$r(e),i="error"===n||"warning"===n;return{category:n,messageNode:a,hidden:!t&&i}}return{category:null,messageNode:e,hidden:!0}}),[e,t])}const Jr={borderColor:"var(--color-danger)",WebkitBoxShadow:"inset 0 1px 1px rgba(0, 0, 0, 0.075)",boxShadow:"inset 0 1px 1px rgba(0, 0, 0, 0.075)"},Wr=(e,t)=>n=>{const a=n?Array.isArray(n)?n.map((e=>e.value)):n.value:null,i=fr({name:e,value:a});return(t||qi)(i)},Kr=(e,t,n)=>()=>{const a=fr({name:e,value:t});return(n||qi)(a)};function qr(e){const{name:t,onChange:n,onBlur:a,value:i,validation:r={},stringOptions:s,options:o,ignoreAccents:l,inputClassName:c,...p}=e,d=!u(l)&&l,m=e.mode||"TETHERED",g=gr(c),{category:h}=Vr(r.messageNode,r.touched),f={className:g,style:"error"===h?Jr:{},ignoreAccents:d,...{name:t,value:e.multi?u(i)?[]:i:gr(i),onBlur:Kr(t,i,a),onChange:Wr(t,n)},...p},v=({options:e})=>"TETHERED"===m?ot.createElement(Ti,{...f,options:e}):"VIRTUALIZED"===m?ot.createElement(dn,{...f,options:e,optionRenderer:null}):"CREATABLE"===m?ot.createElement(Xr,{...f,options:e}):ot.createElement(cn,{...f,options:e});return vr(s)?ot.createElement(Fi,{strings:s},(e=>ot.createElement(v,{options:e}))):ot.createElement(v,{options:o})}function Xr(e){const t=ot.useMemo((()=>{var t,n;const a=null!=(t=e.options)?t:[],i=a.map((e=>e.value)),r=(null!=(n=e.value)?n:[]).filter((e=>!i.includes(e))).map((e=>({label:e,value:e})));return a.concat(r)}),[e.options,e.value]);return ot.createElement(pn,{...e,options:t})}function Zr(e){const{value:t,defaultValue:n,validation:a,options:i,inputClassName:r,...s}=e,o=`SelectInput form-control ${gr(r)} ${hr(a)}`;lt((()=>{if(!u(n)){(vr(i)?i:i.map((e=>e.value))).includes(t)||e.onChange(fr({name:e.name,value:n}))}}),[t,n,i]);const l=({opts:e})=>ot.createElement("select",{className:o,value:gr(t),...s},e.map((e=>ot.createElement("option",{key:e.value,value:e.value,disabled:e.disabled},e.label))));return vr(i)?ot.createElement(Fi,{strings:i},(e=>ot.createElement(l,{opts:e}))):ot.createElement(l,{opts:i})}const _r=e=>!!e&&e.includes("${");class es extends ot.Component{constructor(){super(...arguments),this.state={mergedAccounts:[],primaryAccounts:[],secondaryAccounts:[]},this.groupAccounts=e=>{const{name:t,value:n,onChange:a,provider:i}=this.props;if(!e||!e.length)return;if(_r(n))return;const r=Boolean(e[0].name);let s=Ze.when([]);if(i&&(s=Di.getAllAccountDetailsForProvider(i)),!i&&r){const t=f(F(e,"type"));s=Ze.all(t.map((e=>Di.getAllAccountDetailsForProvider(e)))).then((e=>T(e)))}s.then((i=>{const s=r?F(e,"name"):e;let o=s,l=[],c=[];s&&(l=s.sort()),s&&s.length&&i.length&&(l=s.filter((e=>i.some((t=>t.name===e&&t.primaryAccount)))).sort(),c=Q(s,l).sort(),o=T([l,c])),o.includes(n)||a(fr({value:"",name:t})),this.setState({mergedAccounts:o,primaryAccounts:l,secondaryAccounts:c})}))}}componentDidMount(){this.groupAccounts(this.props.accounts)}componentWillReceiveProps(e){E(e.accounts,this.props.accounts)||this.groupAccounts(e.accounts)}render(){const{value:e,readOnly:t}=this.props,{mergedAccounts:n}=this.state,{primaryAccounts:a,secondaryAccounts:i}=this.state,r=a.length>0&&i.length>0,s=[{label:"Select...",value:"",disabled:!0}];if(s.push(...a.map((e=>({label:e,value:e})))),r&&s.push({label:"---------------",value:"-",disabled:!0}),s.push(...i.map((e=>({label:e,value:e})))),_r(e))return ot.createElement("div",{className:"sm-control-field"},ot.createElement("span",null,"Resolved at runtime from expression: ",ot.createElement("code",null,e)));if(t)return ot.createElement("div",null,ot.createElement("p",{className:"form-control-static"},e));const{renderFilterableSelectThreshold:o,...l}=this.props;if(n.length<o){const e=e=>{e.persist(),this.props.onChange(e)};return ot.createElement(Zr,{...l,inputClassName:"form-control input-sm",onChange:e,required:!0,options:s})}return ot.createElement(qr,{...l,clearable:!1,required:!0,options:s,mode:"PLAIN",menuContainerStyle:{minWidth:"150px"}})}}es.defaultProps={renderFilterableSelectThreshold:6};const ts=class extends ot.Component{constructor(){super(...arguments),this.state={isProdAccount:!1},this.mounted=!0}componentWillUnmount(){this.mounted=!1}componentDidMount(){this.updateAccount(this.props.account)}componentWillReceiveProps(e){this.updateAccount(e.account)}updateAccount(e){const{cache:t}=ts;t.hasOwnProperty(e)||(t[e]=Di.challengeDestructiveActions(e).then((n=>t[e]=!!n)));const n=t[e];"boolean"==typeof n?this.setState({isProdAccount:n}):n.then((e=>this.mounted&&this.setState({isProdAccount:e})))}render(){const{account:e,className:t}=this.props,{isProdAccount:n}=this.state,a="account-tag-wrapper"===t;return ot.createElement("span",{className:`account-tag account-tag-${n?"prod":"notprod"} ${t||""}`},ot.createElement("span",{className:"account-tag-name",title:a?e:null},e))}};let ns=ts;ns.cache={};const as=ot.createContext(void 0),is=({app:e,children:t})=>ot.createElement(as.Provider,{value:e},t);class rs extends ot.Component{constructor(e){super(e)}componentWillReceiveProps(e){this.$scope&&(this.$scope.props=e)}refCallback(e){if(!e)return;const{controller:t,controllerAs:n,locals:a}=this.props,i=this.props.template,r=this.props.templateUrl,s={...this.props,...a};r?et(r).then((a=>{this.renderAngularTemplateAndController(e,a,t,n,s)})):this.renderAngularTemplateAndController(e,i,t,n,s)}renderAngularTemplateAndController(e,t,n,i,r){const s=a(e),o=s.scope(),l=this.$scope=o.$new();if(l.props=this.props,s.html(t),tt(e)(l),n){const e=nt(i?`${n} as ${i}`:n,{$scope:l,$element:s,...r});s.data("$ngControllerController",e)}}componentWillUnmount(){this.$scope.$destroy()}render(){return ot.createElement("div",{className:"AngularJSAdapter",ref:e=>this.refCallback(e)})}}var ss,os,ls,cs,ps,ds,us,ms,gs,hs,fs,vs;function As(){return(As=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e}).apply(this,arguments)}rs.defaultProps={locals:{}};var Es=function(e){return st.createElement("svg",As({xmlns:"http://www.w3.org/2000/svg",style:{margin:"auto",background:"0 0",display:"block",shapeRendering:"auto"},preserveAspectRatio:"xMidYMid",viewBox:"24 24 52 52"},e),ss||(ss=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.9166666666666666s",repeatCount:"indefinite"}))),os||(os=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(30 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.8333333333333334s",repeatCount:"indefinite"}))),ls||(ls=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(60 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.75s",repeatCount:"indefinite"}))),cs||(cs=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(90 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.6666666666666666s",repeatCount:"indefinite"}))),ps||(ps=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(120 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.5833333333333334s",repeatCount:"indefinite"}))),ds||(ds=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(150 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.5s",repeatCount:"indefinite"}))),us||(us=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(180 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.4166666666666667s",repeatCount:"indefinite"}))),ms||(ms=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(210 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.3333333333333333s",repeatCount:"indefinite"}))),gs||(gs=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(240 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.25s",repeatCount:"indefinite"}))),hs||(hs=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(270 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.16666666666666666s",repeatCount:"indefinite"}))),fs||(fs=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(300 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.08333333333333333s",repeatCount:"indefinite"}))),vs||(vs=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(330 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"0s",repeatCount:"indefinite"}))))};const bs=({color:e="#ffffff",fullWidth:t,message:n,className:a,mode:i="horizontal",size:r="small"})=>{if("circular"===i){const t={nano:12,small:16,medium:24,large:32};return ot.createElement(Es,{className:a,style:{height:t[r],fill:e}})}const s=()=>{let e=3;r&&("nano"===r?e=1:"large"===r&&(e=5));const t=[];let n;for(n=0;n<e;n++)t.push(ot.createElement("div",{key:n,className:"bar"}));return t},o="message color-text-accent "+("medium"===r?"heading-4":"heading-2"),l=["medium","large"].includes(r)&&ot.createElement("div",{className:o},n||"Loading ..."),c=["medium","large"].includes(r)?ot.createElement("div",{className:"bars"},s()):s();return ot.createElement("div",{className:Cn("load",r||"small",a,{"full-width":t})},l,c)};function ys(e){return function(t){return Cs(t,e)}}function Cs(e,t){class n extends ot.Component{constructor(e){super(e),this.account$=new At,this.destroy$=new At;let t=!0;this.account$.pipe(Dt((e=>e?Di.accounts$.pipe(St((t=>t.find((t=>t.name===e))))):Et(null))),St((e=>this.getComponent(e))),It(this.destroy$)).subscribe((e=>{t?this.state={Component:e}:this.setState({Component:e})})),this.account$.next(this.props.accountId),t=!1}componentWillUnmount(){this.destroy$.next()}componentWillReceiveProps(e){const{accountId:t}=e;this.props.accountId!==t&&this.account$.next(t)}getComponentFromCloudProvider(e){const{cloudProvider:n}=e;if(!n)return null;const a=Ni.getValue(n,t);if(a)return a;const i=Ni.getValue(n,t+"TemplateUrl");if(i){const e=Ni.getValue(n,t+"Controller"),a=e&&e.includes(" as ")?void 0:"ctrl";return t=>ot.createElement(rs,{...t,templateUrl:i,controller:e,controllerAs:a})}return null}getComponentFromOverrideRegistry(){const{overrideRegistry:e}=hi,n=e.getComponent(t);if(n)return n;const a=e.getTemplate(t,null);if(a){const n=e.getController(t,null),i=n&&n.includes(" as ")?void 0:"ctrl";return e=>ot.createElement(rs,{...e,templateUrl:a,controller:n,controllerAs:i})}return null}getComponent(t){return this.getComponentFromCloudProvider(t||{})||this.getComponentFromOverrideRegistry()||e}render(){const t=this.state&&this.state.Component,n=t&&t!==e,a={...this.props,...n?{OriginalComponent:e}:{}};if(!t)return ot.createElement(bs,null);return["render","prototype.render"].some((e=>"function"==typeof m(t,e)))?ot.createElement(t,{...a,ref:this.props.forwardedRef}):ot.createElement(t,{...a})}}n.OriginalComponent=e;const a=ot.forwardRef(((e,t)=>ot.createElement(n,{...e,forwardedRef:t})));return Object.getOwnPropertyNames(e).filter((e=>"constructor"!==e&&!n.hasOwnProperty(e))).forEach((t=>a[t]=e[t])),a}var ws=Object.defineProperty,xs=Object.getOwnPropertyDescriptor;let ks=class extends ot.Component{render(){return ot.createElement("i",{className:"application-header-icon far fa-window-maximize"})}};ks=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?xs(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&ws(t,n,r),r})([ys("applicationIcon")],ks);oi(".collapsible-element {\n position: relative;\n}\n.collapsible-element .content {\n position: relative;\n overflow: hidden;\n}\n.collapsible-element .content.collapsed:after {\n content: '';\n width: 100%;\n height: 100%;\n position: absolute;\n left: 0;\n bottom: 0;\n background: linear-gradient(0deg, var(--color-white) 0px, transparent 40px);\n}\n.collapsible-element .expand-button {\n display: none;\n position: absolute;\n bottom: 0;\n text-align: center;\n padding-top: 2px;\n border: none;\n border-top: 2px solid #009cb8;\n color: #009cb8;\n width: 100%;\n background-color: var(--color-white);\n outline: none;\n}\n.collapsible-element .expand-button:hover {\n text-decoration: underline;\n}\n.collapsible-element:hover .expand-button {\n display: block;\n}\n");const Bs=({children:e,maxHeight:t})=>{const[n,a]=ot.useState(!0),[i,r]=ot.useState(!1),s=ot.useRef(null),o=ot.useCallback((()=>{s.current&&r(s.current.offsetHeight<s.current.scrollHeight)}),[]);return ot.useEffect((()=>{o()}),[e,o]),ot.useEffect((()=>(window.addEventListener("resize",o),()=>window.removeEventListener("resize",o))),[]),ot.createElement("div",{className:"collapsible-element"},ot.createElement("div",{style:{maxHeight:n?t:void 0},className:Cn(["content",{collapsed:n&&i}]),ref:s},e),(i||!n)&&ot.createElement("button",{className:"expand-button",onClick:()=>a((e=>!e))},n?"Read more":"Read less"))};class Ss{constructor(){this.cacheFactory=new Mn,this.cacheId="collapsibleSectionStateCache",this.handlers=new Map;try{this.cacheFactory.createCache(this.cacheId,{maxAge:6048e5,deleteOnExpire:"aggressive",storageMode:"localStorage"})}catch(e){}this.stateCache=this.cacheFactory.get(this.cacheId)}isSet(e){return!!e&&void 0!==this.stateCache.get(e)}isExpanded(e){return!!e&&!0===this.stateCache.get(e)}setExpanded(e,t){if(e){this.stateCache.put(e,!!t);const n=this.handlers.get(e);n&&n(!Ms.isSet(e)||Ms.isExpanded(e))}}onChange(e,t){this.handlers.get(e)||this.handlers.set(e,t)}}const Ms=new Ss,Ns={left:{expanded:"rotate-0",collapsed:"rotate-m90"},right:{expanded:"rotate-p180",collapsed:"rotate-p270"}},Ds=({outerDivClassName:e="collapsible-section",toggleClassName:t="section-heading",headingClassName:n="collapsible-heading",bodyClassName:a="content-body",enableCaching:i=!0,cacheKey:r,defaultExpanded:s,heading:o,expandIconPosition:l="left",expandIconType:c="arrow",expandIconSize:p,onToggle:d,children:u})=>{const m=ot.useMemo((()=>r||("string"==typeof o?o:void 0)),[r,o]),[g,h]=ot.useState(i&&Ms.isSet(m)?Ms.isExpanded(m):s),f={size:p||"16px",color:"concrete"},v=u?ot.createElement("span",{className:Cn("section-heading-chevron",l)},"arrow"===c?ot.createElement(Bn,{name:"accordionCollapse",className:Ns[l][g?"expanded":"collapsed"],...f}):"plus"===c?ot.createElement(Bn,{name:g?"minus":"plus",...f}):ot.createElement(Bn,{name:g?"closeSmall":"accordionCollapse",...f})):void 0,A="string"==typeof o?ot.createElement("h4",{className:n},"left"===l?ot.createElement(ot.Fragment,null,v," ",o):ot.createElement(ot.Fragment,null,o," ",v)):ot.createElement(ot.Fragment,null,o({chevron:v}));return ot.createElement("div",{className:e},u?ot.createElement("div",{className:Cn(t,"clickable","as-link"),onClick:()=>{h(!g),i&&Ms.setExpanded(m,!g),null==d||d(!g)}},A):A,g&&u&&ot.createElement("div",{className:a},u))};class Is{static get(e){return this.labels.get(e)||e}static register(e,t){this.labels.set(e,t)}}Is.labels=new Map;const Fs=ot.createElement("div",{className:"close-button"},ot.createElement(Dn,{to:"^"},ot.createElement("a",{className:"btn btn-link"},ot.createElement("span",{className:"glyphicon glyphicon-remove"})))),Ts=ot.createElement("div",{className:"header"},ot.createElement("div",{className:"horizontal center middle spinner-container"},ot.createElement(bs,null))),Qs=e=>ot.createElement("div",{className:"details-panel"},e.loading?Ts:e.children);Qs.Header=e=>ot.createElement("div",{className:"header"},Fs,ot.createElement("div",{className:"header-text horizontal middle"},e.icon,ot.createElement("h3",{className:"horizontal middle space-between flex-1"},e.name)),ot.createElement("div",null,e.children));class Ps extends ot.Component{constructor(){super(...arguments),this.handleRef=e=>{e&&(this.popover=e)}}componentWillReceiveProps(e){this.popover&&(this.props.value&&!e.value&&this.popover.hide(),!this.props.value&&e.value&&this.popover.show())}render(){const{delayShow:e,id:t,placement:n,template:a,value:i}=this.props,r=t||i||"tooltip";let s=ot.createElement(Zt,{id:r},ot.createElement(Sr,{message:i}));a&&(s=ot.createElement(Zt,{id:r},a));const o=i&&i.length>0||a?["hover","focus"]:[];return ot.createElement(Xt,{ref:this.handleRef,delayShow:e,placement:n,overlay:s,trigger:o},this.props.children)}}Ps.defaultProps={placement:"top",value:""};const Rs=e=>{const{error:t,...n}=e;return t&&(n.className=`${n.className||""} invalid`),n.type=n.type||"text",ot.createElement(Ps,{id:n.name,value:e.error,placement:"right"},ot.createElement("input",{...n}))},Us=(e,t)=>{const n=`Value must be a${t?" ":" positive "}number or a SpEL expression.`,a=Number(e);if(Number.isNaN(a)){const t=String(e),a=t?t.indexOf("${"):-1;return-1!==a&&t.includes("}",a)?null:n}return!t&&a<0?n:null},zs=jn((({render:e,formik:t})=>e(t)));const Gs=ot.forwardRef((function(e,t){const n=ot.useRef(),a=t||n,[i,r]=ot.useState(!1),[s,o]=ot.useState(!1);return ot.useEffect((()=>{if(i){const t=a.current,n={};Ji(e.initialValues,(e=>g(n,e,!0)),!0),t.setTouched(n),t.getFormikActions().validateForm(),o(!0)}}),[i]),ot.createElement(Ln,{ref:function(e){a.current=e,i||r(!0)},...e,isInitialValid:e.isInitialValid||(()=>a.current&&0===Object.keys(a.current.state.errors).length),render:t=>s&&e.render&&e.render(t)})}));class js extends ot.Component{constructor(e){super(e);const{value:t}=e;this.state={value:t}}componentDidUpdate(){if(!this.props.onChange)return;const{value:e,isEqual:t}=this.props,{value:n}=this.state;t(e,n)||(this.setState({value:e}),this.props.onChange(e,n))}render(){return this.props.children||null}}function Ls(){const e=ct("FIRST_RENDER");return lt((()=>(e.current="MOUNTED",()=>{e.current="UNMOUNTED"}))),e}js.defaultProps={isEqual:(e,t)=>e===t};function Os(e){const{label:t,help:n,input:a,actions:i,validation:r={}}=e,{hidden:s,messageNode:o,category:l}=r,c=!B(t)||!B(n);return ot.createElement("div",{className:"StandardFieldLayout flex-container-h baseline margin-between-lg"},c&&ot.createElement("div",{className:"StandardFieldLayout_Label sm-label-right"},t," ",n),ot.createElement("div",{className:"flex-grow"},ot.createElement("div",{className:"flex-container-v margin-between-md"},ot.createElement("div",{className:"flex-container-h baseline space-between margin-between-lg StandardFieldLayout_Contents"},a," ",i),!s&&ot.createElement(Ir,{message:o,type:l}))))}oi(".StandardFieldLayout + .StandardFieldLayout {\n margin-top: 6px;\n}\n\n.StandardFieldLayout .StandardFieldLayout_Label {\n min-width: 120px;\n}\n\n.StandardFieldLayout .StandardFieldLayout_Contents > *:first-child {\n flex: 1;\n}\n");const Ys=ot.createContext(Os),{Provider:$s,Consumer:Hs}=Ys,Vs=ot.createContext(!1);class Js{static get(e){return this.labels.get(e)||e}static register(e,t){this.labels.set(e,t)}}function Ws(e){return ot.createElement("span",null,Js.get(e.label))}Js.labels=new Map,di.useClassicFirewallLabels&&(Js.register("firewall","security group"),Js.register("firewalls","security groups"),Js.register("Firewall","Security Group"),Js.register("Firewalls","Security Groups"));class Ks{static getHelpField(e){let t=this.helpFields.get(e);return t&&(t=t.replace(/{{(.+?)}}/g,((e,t)=>Js.get(t)))),t||null}static register(e,t){this.overrides.has(e)||this.helpFields.set(e,t)}static registerOverride(e,t){this.register(e,t),this.overrides.add(e)}}Ks.helpFields=new Map,Ks.overrides=new Set;oi(".HoverablePopover {\n display: inline;\n -webkit-text-decoration: dotted underline var(--color-dovegray);\n text-decoration: dotted underline var(--color-dovegray);\n}\n");class qs extends ot.Component{constructor(e){super(e),this.mouseEvents$=new At,this.hidePopoverEvents$=new At,this.destroy$=new At,this.targetRef=ot.createRef(),this.handleMouseEvent=e=>{this.mouseEvents$.next(e)},this.rendererRefCallback=e=>{if(e){const{clientWidth:t,clientHeight:n}=ln.findDOMNode(e),a=this.targetRef.current.getBoundingClientRect(),i=window.innerHeight-a.bottom,r=window.innerWidth-a.right;let s;switch(this.props.placement){case"top":s=n>a.top&&a.top<i?"bottom":void 0;break;case"bottom":s=n>i&&i<a.top?"top":void 0;break;case"left":s=t>a.left&&a.left<r?"right":void 0;break;case"right":s=t>r&&r<a.left?"left":void 0}this.setState({placementOverride:s})}},this.Wrapper=({children:e,...t})=>{const{svgMode:n}=this.props;return n?ot.createElement("g",{...t,ref:this.targetRef},e):ot.createElement("div",{...t,ref:this.targetRef},e)},this.state={popoverIsOpen:!1,animation:!0}}componentWillUnmount(){this.destroy$.next()}componentDidMount(){const e=["mouseenter","mouseover"],t=this.mouseEvents$.pipe(St((t=>{const n=e.includes(t.type);return{shouldOpen:n,eventDelay:n?this.props.delayShow:this.props.delayHide,animation:!0}}))),n=this.hidePopoverEvents$.pipe(St((()=>({shouldOpen:!1,eventDelay:0,animation:!1}))));bt(t,n).pipe(St((({shouldOpen:e,eventDelay:t,animation:n})=>Et({shouldOpen:e,animation:n}).pipe(Ft(t)))),Dt((e=>e)),Tt((({shouldOpen:e})=>e!==this.state.popoverIsOpen)),It(this.destroy$)).subscribe((({shouldOpen:e,animation:t})=>this.setPopoverOpen(e,t)))}setPopoverOpen(e,t=!0){this.setState({animation:t,popoverIsOpen:e});const n=e?this.props.onShow:this.props.onHide;n&&n()}render(){const{Component:e,template:t,placement:n,container:a,hOffsetPercent:i,id:r,title:s,className:o}=this.props,{popoverIsOpen:l,animation:c,placementOverride:p}=this.state,{Wrapper:d}=this,u=e?ot.createElement(e,{...this.props,hidePopover:()=>this.hidePopoverEvents$.next()}):t;return ot.createElement(d,{className:Cn("HoverablePopover",this.props.wrapperClassName),onMouseEnter:this.handleMouseEvent,onMouseLeave:this.handleMouseEvent},this.props.children,ot.createElement(_t,{show:l,animation:c,placement:p||n,target:this.targetRef.current,container:a,shouldUpdatePosition:!0},ot.createElement(Xs,{ref:this.rendererRefCallback,onMouseOver:this.handleMouseEvent,onMouseLeave:this.handleMouseEvent,offsetPercent:i,id:r,title:s,className:o},u)))}}qs.defaultProps={placement:"top",id:pr.generateUuid(),delayShow:0,delayHide:300};class Xs extends ot.Component{constructor(){super(...arguments),this.state={}}componentDidMount(){this.setState(this.getState(this.props))}componentWillReceiveProps(e){this.setState(this.getState(e))}getState(e){const{offsetPercent:t}=e,n=e=>{const t=/(\d+(?:\.\d+)?)%/.exec(e);return t?parseFloat(t[1])/100:.5},a=n(t)-n(e.arrowOffsetLeft);return{offset:0-ln.findDOMNode(this).clientWidth*a}}render(){const{offsetPercent:e,...t}=this.props,{offset:n}=this.state;if(n){const{style:a}=this.props,i=parseInt(`${a.left}`,10)+n,r={...a,left:i};return ot.createElement(en,{...t,style:r,arrowOffsetLeft:e})}return ot.createElement(en,{...t})}}function Zs(e){const{id:t,fallback:n,content:a}=e;let i=a;t&&!i&&(i=Ks.getHelpField(t)||n);return ot.createElement(Sr,{message:i,options:{ADD_ATTR:["target"]},trim:!0})}function _s(e){const{content:t,expand:n,fallback:a,id:i,label:r,placement:s}=e,[o,l]=ot.useState(),c=ot.createElement("i",{className:"small glyphicon glyphicon-question-sign"}),p=ot.useContext(Vs),d=B(n)?p:n;if(!i&&!t)return null;const u=ot.createElement(Zs,{content:t,fallback:a,id:i}),m=ot.createElement(qs,{placement:s||"top",template:u,onShow:()=>l(Date.now()),onHide:()=>{Date.now()-o>500&&Ui.log({action:"Help contents viewed",category:"Help",data:{label:e.id||e.content}})}},ot.createElement("span",{className:"clickable help-field"}," ",r||c," "));if(r)return ot.createElement("div",{className:"text-only"},!d&&u&&m);{const e=ot.createElement("div",{className:"help-contents small"}," ",u," ");return ot.createElement("div",{style:{display:"inline-block"}},!d&&u&&m,d&&u&&e)}}class eo{static createScheduler(e=di.pollSchedule||3e4){let t=new At,n=(new Date).getTime(),a=null,i=!1,r=yt(e,e);const s=()=>{i||(_e.cancel(a),n=(new Date).getTime(),t.next(!0),a=null)};r.subscribe(s);const o=()=>{Xe.debug("auto refresh suspended"),i=!0},l=e=>{i=!1,a=a||_e(s,e)},c=()=>{i=!1;const t=(new Date).getTime();Xe.debug("auto refresh resumed"),t-n>e?s():l(e-(t-n))},p=()=>{Xe.debug("document visibilityState changed to: ",document.visibilityState),"visible"===document.visibilityState?c():o()};return document.addEventListener("visibilitychange",p),at.addEventListener("offline",o),at.addEventListener("online",c),t.next(!0),{subscribe:t.subscribe.bind(t),scheduleImmediate:()=>{s(),i=!0,l(e)},unsubscribe:()=>{i=!0,t&&t.unsubscribe(),t=null,r=null,_e.cancel(a),document.removeEventListener("visibilitychange",p),at.removeEventListener("offline",o),at.removeEventListener("online",c)}}}}class to{static publish(e){Kn.isActive(e.key)?Kn.update(e.key,{render:e.content,...e.options}):Kn(e.content,{toastId:e.key,...e.options})}static clear(e){Kn.dismiss(e)}}class no{static initialize(){Xe.debug("Deck version",this.currentVersion.version,"created",rr(this.currentVersion.created)),this.scheduler=eo.createScheduler(),this.scheduler.subscribe((()=>this.checkVersion()))}static checkVersion(){const e=`/version.json?_=${Date.now()}`;We.get(e).then((e=>this.versionRetrieved(e))).catch((()=>{}))}static versionRetrieved(e){const t=e.data;t.version===this.currentVersion.version?this.newVersionSeenCount=0:(this.newVersionSeenCount++,this.newVersionSeenCount>5&&(Xe.debug("New Deck version:",t.version,"created",rr(t.created)),to.publish({key:"newVersion",action:"create",content:ot.createElement("div",null,"A new version of Spinnaker is available"," ",ot.createElement("a",{role:"button",className:"action",onClick:()=>document.location.reload(!0)},"Refresh"))}),this.scheduler.unsubscribe()))}}no.currentVersion=Wn,no.newVersionSeenCount=0;oi(".help-menu {\n border: 0;\n}\n.help-menu .dropdown-toggle,\n.help-menu .dropdown-toggle:active {\n font-size: 14px;\n font-weight: 200;\n margin: 0;\n border: 0;\n background: transparent;\n border-radius: 0;\n color: var(--color-white);\n}\n.help-menu .dropdown-toggle .caret,\n.help-menu .dropdown-toggle:active .caret {\n margin-left: 3px;\n}\n.help-menu .dropdown.open .dropdown-toggle {\n background-color: transparent;\n text-decoration: none;\n color: var(--color-white);\n box-shadow: none;\n}\n.help-menu .dropdown-menu {\n border: 0;\n}\n");const ao="https://spinnaker.io/docs",io=()=>di.feedback&&di.feedback.url?ot.createElement(an,{href:di.feedback.url,target:"_blank"},ot.createElement("i",{className:di.feedback.icon||"fa fa-envelope"}),"Β ",di.feedback.text||"Send feedback"):null,ro=()=>di.additionalHelpLinks&&di.additionalHelpLinks.length?ot.createElement(ot.Fragment,null,di.additionalHelpLinks.map(((e,t)=>ot.createElement(an,{href:e.url,key:t,target:"_blank"},e.icon?ot.createElement("span",null,ot.createElement("i",{className:e.icon})," Β "):null,e.text||"Additional Help")))):null,so=()=>{if(!di.version)return null;const e=di.changelogUrl.replace(":version",di.version);return ot.createElement(an,{href:e,target:"_blank"},"Spinnaker ",di.version)},oo=()=>ot.createElement("li",{className:"help-menu"},ot.createElement(tn,{id:"help-menu-dropdown",pullRight:!0},ot.createElement(tn.Toggle,{className:"hidden-lg",noCaret:!0},ot.createElement(nn,{glyph:"question-sign"})),ot.createElement(tn.Menu,null,ot.createElement(io,null),ot.createElement(ro,null),ot.createElement(an,{href:ao,target:"_blank"},"Docs"),ot.createElement(an,{divider:!0}),ot.createElement(an,{href:"https://spinnaker.io/community",target:"_blank"},"Community Resources"),ot.createElement(so,null),di.feature.pagerDuty&&ot.createElement("li",{role:"presentation"},ot.createElement(Dn,{to:"home.page"},ot.createElement("a",{className:"clickable"},ot.createElement("span",{className:"feedback-item-label"},"Send a Page")))))),ot.createElement(tn,{id:"help-menu-dropdown-large",pullRight:!0},ot.createElement(tn.Toggle,{className:"hidden-xs hidden-sm hidden-md",noCaret:!0},ot.createElement(nn,{glyph:"question-sign"})," Help"),ot.createElement(tn.Menu,null,ot.createElement(io,null),ot.createElement(ro,null),ot.createElement(an,{href:ao,target:"_blank"},"Docs"),ot.createElement(an,{href:"https://spinnaker.io/community",target:"_blank"},"Community Resources"),ot.createElement(so,null),di.feature.pagerDuty&&ot.createElement("li",{role:"presentation"},ot.createElement(Dn,{to:"home.page"},ot.createElement("a",{className:"clickable"},ot.createElement("span",{className:"feedback-item-label"},"Send a Page")))))));var lo;const co={"core.serverGroup.detail":"(Optional) <b>Detail</b> is a string of free-form alphanumeric characters and hyphens to describe any other variables in naming a cluster.","core.serverGroup.strategy":"The deployment strategy tells Spinnaker what to do with the previous version of the server group.","cluster.search":'\n Quickly filter the displayed server groups by the following fields:\n <ul>\n <li>Build # (e.g. <samp>#337</samp>)</li>\n <li>Jenkins host</li>\n <li>Jenkins job name</li>\n <li>Cluster (prefixed, e.g. <samp>cluster:myapp-int</samp>)\n <li>VPC (prefixed, e.g. <samp>vpc:main</samp>)\n <li>Clusters (comma-separated list, e.g. <samp>clusters:myapp-int, myapp-test</samp>)\n <li>Server Group Name</li>\n <li>Region</li>\n <li>Account</li>\n <li>Load Balancer Name</li>\n <li>Instance ID</li>\n <li>Labels (comma-separated list of key-value pairs that must all apply to entity, e.g. <samp>labels:app=spinnaker, source=prod</samp>)</li>\n </ul>\n <p>You can search for multiple words or word fragments. For instance, to find all server groups in a prod stack with "canary" in the details, enter <samp>prod canary</samp>.</p>\n <p>To find a particular instance, enter the instance ID. Only the containing server group will be displayed, and the instance\n will be highlighted for you.</p>',"loadBalancer.search":'\n Quickly filter the displayed load balancers by the following fields:\n <ul>\n <li>VPC (prefixed, e.g. <samp>vpc:main</samp>)\n <li>Server Group Name</li>\n <li>Load Balancer Name</li>\n <li>Region</li>\n <li>Account</li>\n <li>Instance ID</li>\n </ul>\n <p>You can search for multiple words or word fragments. For instance, to find all load balancers in a prod stack with "canary" in the details, enter <samp>prod canary</samp>.</p>',"securityGroup.search":"\n Filter by the following fields:\n <ul>\n <li>VPC (prefixed, e.g. <samp>vpc:main</samp>)\n <li>Name</li>\n <li>Server Group Name</li>\n <li>Load Balancer Name</li>\n <li>Region</li>\n <li>Account</li>\n </ul>","executions.search":"\n Quickly filter the displayed executions by the following fields:\n <ul>\n <li>Name</li>\n <li>Trigger</li>\n </ul>","pipeline.config.triggers.respectQuietPeriod":"\n <p>The quiet period is a system operator designated period of time when automated pipelines and deploys should not run.</p>","pipeline.config.expectedArtifact":"Artifacts required for trigger to execute. Only one of the artifacts needs to be present for the trigger to execute.","pipeline.config.artifact.help":"\n <p>There are certain types of triggers (e.g. Pub/Sub triggers) that can produce artifacts and inject them into the execution context for a pipeline.</p>\n <p>You can specify artifacts that your pipeline expects to be present in the execution context in this section.</p>","pipeline.config.artifact.missingPolicy":"\n <p>The behavior of the pipeline if the Artifact is missing from the pipeline execution.</p>","pipeline.config.artifact.name":"\n <p>The name of the Artifact.</p>","pipeline.config.artifact.type":"\n <p>The type of the Artifact, e.g. 'gcs/object' or 'rpm'.</p>","pipeline.config.lock.allowUnlockUi":"\n <p><strong>Checked</strong> - the pipeline can be unlocked via the Spinnaker UI.</p>\n <p><strong>Unchecked</strong> - the pipeline can only be unlocked via the Spinnaker API.</p>","pipeline.config.lock.description":"\n <p>Friendly description of why this pipeline is locked.</p>\n <p>Please include an email address or slack channel as appropriate.</p>","pipeline.config.optionalStage":"\n <p>When this option is enabled, stage will only execute when the supplied expression evaluates true.</p>\n <p>The expression <em>does not</em> need to be wrapped in ${ and }.</p>\n <p>If this expression evaluates to false, the stages following this stage will still execute.</p>","pipeline.config.checkPreconditions.failPipeline":"\n <p><strong>Checked</strong> - the overall pipeline will fail whenever this precondition is false.</p>\n <p><strong>Unchecked</strong> - the overall pipeline will continue executing but this particular branch will stop.</p>","pipeline.config.checkPreconditions.failureMessage":"\n <p> This failure message will be shown to the user if the precondition evaluates to false. </p>","pipeline.config.checkPreconditions.expectedSize":"Number of server groups in the selected cluster","pipeline.config.checkPreconditions.expression":'\n <p>Value must evaluate to "true".</p>\n <p>Use of the <b>Spring Expression Language</b> allows for complex evaluations.</p>',"pipeline.config.deploy.template":"\n <p>Select an existing cluster to use as a template for this deployment, and we'll pre-fill\n the configuration based on the newest server group in the cluster.</p>\n <p>If you want to start from scratch, select \"None\".</p>\n <p>You can always edit the cluster configuration after you've created it.</p>","pipeline.config.expectedArtifact.matchArtifact":'\n <p>\n This specifies which fields in your incoming artifact to match against. Every field that\n you supply will be used to match against all incoming artifacts. If all specified fields\n match, the incoming artifact is bound to your pipeline context.\n </p>\n <p>\n The field comparisons are done against the incoming artifact. Example: if you are parsing\n artifacts from pub/sub messages via a Jinja template, the comparison will be done after\n the pub/sub -> Spinnaker artifact translation.\n </p>\n <p>For example, if you want to match against any GCS object, only supply <b>type</b> = gcs/object. If you also want to restrict the matches by other fields, include those as well.</p>\n <p>Regex is accepted, so you could for example match on a filepath like so <b>name</b> = .*\\.yaml to match all incoming YAML files.</p>\n <p>See the <a href="https://www.spinnaker.io/reference/artifacts/in-pipelines/#expected-artifacts">reference</a> for more information.</p>',"pipeline.config.expectedArtifact.ifMissing":"\n <p>If no artifact was supplied by your trigger to match against this expected artifact, you have a few options:\n <ol>\n <li>Attempt to match against an artifact in the prior pipeline execution's context. This ensures that you will always be using the most recently supplied artifact to this pipeline, and is generally a safe choice.</li>\n <li>If option 1 fails, or isn't specified, you can provide a default artifact with the required fields to use instead.</li>\n <li>Fail the pipeline if options 1 or 2 fail or aren't selected.</li>\n </ol>\n </p>\n <p>See the <a href=\"https://www.spinnaker.io/reference/artifacts/in-pipelines\">reference</a> for more information.</p>","pipeline.config.expectedArtifact.usePriorExecution":"\n <p>Attempt to match against an artifact in the prior pipeline execution's context. This ensures that you will always be using the most recently supplied artifact to this pipeline, and is generally a safe choice.</p>","pipeline.config.expectedArtifact.defaultArtifact":"\n <p>If your artifact either wasn't supplied from a trigger, or it wasn't found in a prior execution, the artifact specified below will end up in your pipeline's execution context.</p>\n <p>See the <a href=\"https://www.spinnaker.io/reference/artifacts/in-pipelines\">reference</a> for more information.</p>","pipeline.config.expectedArtifact.gcs.name":"\n <p>The GCS object name, in the form <code>gs://bucket/path/to/file.yml</code>.</p>","pipeline.config.expectedArtifact.defaultGcs.reference":"\n <p>The GCS object name, <i>optionally</i> appending the version. An example: <code>gs://bucket/file.yml#123948581</code></p>","pipeline.config.expectedArtifact.s3.name":"\n <p>The S3 object name, in the form <code>s3://bucket/path/to/file.yml</code>.</p>","pipeline.config.expectedArtifact.defaultS3.reference":"\n <p>The S3 object name, <i>optionally</i> appending the version. An example: <code>s3://bucket/file.yml#123948581</code></p>","pipeline.config.expectedArtifact.oracle.name":"\n <p>The Oracle object artifact name, in the form <code>oci://bucket/path/file.yml</code>.</p>","pipeline.config.expectedArtifact.defaultOracle.reference":"\n <p>The Oracle object artifact name, <i>optionally</i> appending the version. An example: <code>oci://bucket/file.yml#9ce463aa-d843-4438-b206-5365cd643e2e</code></p>","pipeline.config.expectedArtifact.docker.name":"\n <p>The Docker image name you want to trigger on changes to. By default, this does <i>not</i> include the image tag or digest, only the registry and image repository.</p>","pipeline.config.expectedArtifact.defaultDocker.reference":"\n <p>The fully-qualified docker image to deploy. An example: <code>gcr.io/project/image@sha256:59bb771c86</code></p>","pipeline.config.expectedArtifact.git.name":"\n <p>The file's path from the git root, in the form 'path/to/file.json'</p>","pipeline.config.expectedArtifact.defaultGithub.version":"\n <p>Either the commit or branch to checkout.</p>","pipeline.config.expectedArtifact.defaultGithub.reference":'\n <p>The GitHub API content url the artifact lives under. The domain name may change if you\'re running GHE.</p>\n <p>An example for GitHub.com is <code>https://api.github.com/repos/$ORG/$REPO/contents/$FILEPATH</code>. An example for GitHub Enterprise is <code>https://github.domain.com/api/v3/repos/$ORG/$REPO/contents/$FILEPATH</code>. See <a href="https://www.spinnaker.io/reference/artifacts/types/github-file/#fields">our docs</a> for more info.</p>',"pipeline.config.expectedArtifact.defaultGitlab.version":"\n <p>Either the commit or branch to checkout.</p>","pipeline.config.expectedArtifact.defaultGitlab.reference":'\n <p>The Gitlab API file url the artifact lives under. The domain name may change if you\'re running your own Gitlab server. The repository and path to files must be URL encoded.</p>\n <p>An example is <code>https://gitlab.com/api/v4/projects/$ORG%2F$REPO/repository/files/path%2Fto%2Ffile.yml/raw</code>. See <a href="https://www.spinnaker.io/reference/artifacts/types/gitlab-file/#fields">our docs</a> for more info.</p>',"pipeline.config.expectedArtifact.gitrepo.url":"<p>The location of your Git repository.</p>","pipeline.config.expectedArtifact.gitrepo.branch":"<p>The branch of the repository you want to use.</p>","pipeline.config.expectedArtifact.gitrepo.checkoutSubpath":"<p>Check this if you want to specify a subpath; doing so will reduce the size of the generated artifact.</p>","pipeline.config.expectedArtifact.gitrepo.subpath":"\n <p>The subpath within the Git repository you desire to checkout.</p>\n <p>e.g.: <b>examples/wordpress/mysql/</b></p>","pipeline.config.expectedArtifact.helm.account":"\n <p>The account contains url the charts can be found</p>","pipeline.config.expectedArtifact.helm.name":"\n <p>The name of chart you want to trigger on changes to</p>","pipeline.config.expectedArtifact.helm.version":"\n <p>The version of chart you want to trigger on changes to</p>","pipeline.config.expectedArtifact.defaultBitbucket.reference":'\n <p>The Bitbucket API file url the artifact lives under. The domain name may change if you\'re running your own Bitbucket server. The repository and path to files must be URL encoded.</p>\n <p>An example is <code>https://api.bitbucket.org/1.0/repositories/$ORG/$REPO/raw/$VERSION/$FILEPATH</code>. See <a href="https://www.spinnaker.io/reference/artifacts/types/bitbucket-file/#fields">our docs</a> for more info.</p>',"pipeline.config.expectedArtifact.defaultBitbucket.filepath":"\n <p>The file path within your repo. path/to/file.yml is an example.</p>","pipeline.config.trigger.helm.chart":"The Helm chart name.","pipeline.config.trigger.helm.version":"The Helm chart version, as semver.","pipeline.config.trigger.helm.version.manual":"The Helm chart version, as an exact version.","pipeline.config.trigger.webhook.source":"\n <p>Determines the target URL required to trigger this pipeline, as well as how the payload can be transformed into artifacts.</p>\n ","pipeline.config.trigger.webhook.payloadConstraints":'\n <p>When provided, only a webhook with a payload containing at least the specified key/value pairs will be allowed to trigger this pipeline. For example, if you wanted to lock down the systems/users that can trigger this pipeline via this webhook, you could require the key "secret" and value "something-secret" as a constraint.</p>\n <p>The constraint values may be supplied as regex.</p>\n ',"pipeline.config.trigger.pubsub.attributeConstraints":"\n <p>Pubsub messages can have system-specific metadata accompanying the payload called <b>attributes</b>.</p>\n <p>When provided, only a pubsub message with attributes containing at least the specified key/value pairs will be allowed to trigger this pipeline.</p>\n <p>The constraint value is a java regex string.</p>\n ","pipeline.config.trigger.pubsub.payloadConstraints":'\n <p>\n When provided, only a pubsub message with a payload containing at least the specified\n key/value pairs will be allowed to trigger this pipeline. For example, if you wanted\n to restrict the systems/users that can trigger this pipeline via this pubsub\n subscription, you could require the key "secret" and value "something-secret" as a constraint.\n </p>\n <p>\n The key/value pairs are matched against the unprocessed payload body, prior to any\n transformation using, for example, a Jinja template in a pubsub subscription configuration.\n </p>\n <p>The constraint value is a java regex string.</p>\n ',"pipeline.config.findArtifactFromExecution.considerExecutions":'\n <p>Select the types of executions to consider. When no selection is made, the default is "any execution".</p>\n <p>This will always evaluate to the most recent execution matching your provided criteria.</p>\n ',"pipeline.config.tags":"<p>Pipeline tags let you filter pipelines/executions by addition dimensions in the executions page</p>","loadBalancer.advancedSettings.healthTimeout":"<p>Configures the timeout, in seconds, for reaching the healthCheck target. Must be less than the interval.</p><p> Default: <b>5</b></p>","loadBalancer.advancedSettings.idleTimeout":"<p>Configures the idle timeout, in seconds. If no data has been sent or received by the time that the idle timeout period elapses, the load balancer closes the connection. </p><p> Default: <b>60</b></p>","loadBalancer.advancedSettings.deletionProtection":"<p>To prevent your load balancer from being deleted accidentally, you can enable deletion protection.</p><p> Default: <b>false</b></p>","loadBalancer.advancedSettings.healthInterval":"<p>Configures the interval, in seconds, between ELB health checks. Must be greater than the timeout.</p><p>Default: <b>10</b></p>","loadBalancer.advancedSettings.healthyThreshold":"<p>Configures the number of healthy observations before reinstituting an instance into the ELBβs traffic rotation.</p><p>Default: <b>10</b></p>","loadBalancer.advancedSettings.unhealthyThreshold":"<p>Configures the number of unhealthy observations before deservicing an instance from the ELB.</p><p>Default: <b>2</b></p>","loadBalancer.advancedSettings.loadBalancingCrossZone":"<p>Cross-zone load balancing distributes traffic evenly across all targets in the Availability Zones enabled for the load balancer.</p><p> Default: <b>True</b></p>","loadBalancer.advancedSettings.albIpAddressType":'<p>Assigns both a v4 and v6 IP address to the load balancer. If left unchecked, this value will default to <b>"ipv4"</b>.</p>',"loadBalancer.advancedSettings.nlbIpAddressType":'<p>Assigns both a v4 and v6 IP address to the load balancer. This option is only valid for NLBs which are external and only have Ip targets (not instance targets). If left unchecked, this value will default to <b>"ipv4"</b>.</p>',"pipeline.config.resizeAsg.action":"\n <p>Configures the resize action for the target server group.\n <ul>\n <li><b>Scale Up</b> increases the size of the target server group by an incremental or percentage amount</li>\n <li><b>Scale Down</b> decreases the size of the target server group by an incremental or percentage amount</li>\n <li><b>Scale to Cluster Size</b> increases the size of the target server group to match the largest server group in the cluster, optionally with an incremental or percentage additional capacity. Additional capacity will not exceed the existing maximum size.</li>\n <li><b>Scale to Exact Size</b> adjusts the size of the target server group to match the provided capacity</li>\n </ul></p>","pipeline.config.resizeAsg.cluster":"<p>Configures the cluster upon which this resize operation will act. The <em>target</em> specifies what server group to resolve for the operation.</p>","pipeline.config.modifyScalingProcess.cluster":"<p>Configures the cluster upon which this modify scaling process operation will act. The <em>target</em> specifies what server group to resolve for the operation.</p>","pipeline.config.enableAsg.cluster":"<p>Configures the cluster upon which this enable operation will act. The <em>target</em> specifies what server group to resolve for the operation.</p>","pipeline.config.disableAsg.cluster":"<p>Configures the cluster upon which this disable operation will act. The <em>target</em> specifies what server group to resolve for the operation.</p>","pipeline.config.destroyAsg.cluster":"<p>Configures the cluster upon which this destroy operation will act. The <em>target</em> specifies what server group to resolve for the operation.</p>","pipeline.config.jenkins.trigger.propertyFile":'<p>(Optional) Configures the name to the Jenkins artifact file used to pass in properties to later stages in the Spinnaker pipeline. The contents of this file will now be available as a map under the trigger and accessible via <em>trigger.properties</em>. See <a target="_blank" href="https://www.spinnaker.io/guides/user/pipeline-expressions/">Pipeline Expressions docs</a> for more information.</p>',"pipeline.config.jenkins.trigger.payloadConstraints":'<p>(Optional, Requires Property File) When provided, only a build that contains a Property File with correct constraints will trigger this pipeline. For example, you could restrict the trigger to certain branches by placing the branch name in your Property File and adding a constraint with a key like "branch" and value "master".</p>\n <p>The constraint values may be supplied as regex.</p>',"pipeline.config.jenkins.propertyFile":'<p>(Optional) Configures the name to the Jenkins artifact file used to pass in properties to later stages in the Spinnaker pipeline. The contents of this file will now be available as a map under the stage context. See <a target="_blank" href="https://www.spinnaker.io/guides/user/pipeline-expressions/">Pipeline Expressions docs</a> for more information.</p>',"pipeline.config.travis.job.isFiltered":"<p>Note that for performance reasons, not all jobs are displayed. Please use the search field to limit the number of jobs.</p>","pipeline.config.travis.trigger.propertyFile":'<p>(Optional) Configures the name to the Travis artifact file used to pass in properties to later stages in the Spinnaker pipeline. The contents of this file will now be available as a map under the trigger and accessible via <em>trigger.properties</em>. See <a target="_blank" href="https://www.spinnaker.io/guides/user/pipeline-expressions/">Pipeline Expressions docs</a> for more information.</p>',"pipeline.config.travis.trigger.payloadConstraints":'<p>(Optional, Requires Property File) When provided, only a build that contains a Property File with correct constraints will trigger this pipeline. For example, you could restrict the trigger to certain branches by placing the branch name in your Property File and adding a constraint with a key like "branch" and value "master".</p>\n <p>The constraint values may be supplied as regex.</p>',"pipeline.config.travis.propertyFile":'<p>(Optional) Configures the name to the Travis artifact file used to pass in properties to later stages in the Spinnaker pipeline. The contents of this file will now be available as a map under the stage context. See <a target="_blank" href="https://www.spinnaker.io/guides/user/pipeline-expressions/">Pipeline Expressions docs</a> for more information.</p>',"pipeline.config.bake.skipRegionDetection":"\n <p>By default, Spinnaker will detect regions to bake in from downstream deploy stages.</p>\n <p>To prevent failed deploys from accidentally missed regions during the bake process.</p>\n <p>This setting will disable this detection mechanism.</p>","pipeline.config.bake.package":'\n <p>The name of the package you want installed (without any version identifiers).</p>\n <p>If your build produces a deb file named "myapp_1.27-h343", you would want to enter "myapp" here.</p>\n <p>If there are multiple packages (space separated), then they will be installed in the order they are entered.</p>',"pipeline.config.bake.packageArtifacts":"\n <p>Artifacts representing packages you want installed.</p>\n <p>These artifacts must be either deb or rpm packages, whichever applies to the operating system on your base image.</p>\n <p>Package artifacts are installed in order, after any packages in the 'Packages' field are installed.</p>","pipeline.config.docker.bake.targetImage":"<p>The name of the resulting docker image.</p>","pipeline.config.docker.bake.targetImageTag":"<p>The tag of the resulting docker image, defaults to commit hash if available.</p>","pipeline.config.docker.bake.organization":"<p>The name of the organization or repo to use for the resulting docker image.</p>","pipeline.config.bake.baseAmi":"<p>(Optional) If Base AMI is specified, this will be used instead of the Base OS provided","pipeline.config.bake.amiSuffix":"<p>(Optional) String of date in format YYYYMMDDHHmm, default is calculated from timestamp,</p>","pipeline.config.bake.amiName":"<p>(Optional) Default = $package-$arch-$ami_suffix-$store_type</p>","pipeline.config.bake.templateFileName":"<p>(Optional) The explicit packer template to use, instead of resolving one from rosco's configuration.</p>","pipeline.config.bake.varFileName":"<p>(Optional) The name of a json file containing key/value pairs to add to the packer command.</p>","pipeline.config.bake.extendedAttributes":"<p>(Optional) Any additional attributes that you want to pass onto rosco, which will be injected into your packer runtime variables.</p>","pipeline.config.cf.createservice.updatable":"<p>If checked, this will try to update the existing service. If not, if the service exists this stage will succeed and not try to update.</p>","pipeline.config.cf.createservice.versioned":"<p>If checked, this stage should always deploy a new service with an incremented version number (mysql-v001).</p>","pipeline.config.manualJudgment.instructions":"<p>(Optional) Instructions are shown to the user when making a manual judgment.</p><p>May contain HTML.</p>","pipeline.config.manualJudgment.propagateAuthentication":"\n <p><strong>Checked</strong> - the pipeline will continue with the permissions of the approver.</p>\n <p><strong>Unchecked</strong> - the pipeline will continue with its current permissions.</p>","pipeline.config.manualJudgment.judgmentInputs":'\n <p>(Optional) Entries populate a dropdown displayed when performing a manual judgment.</p>\n <p>The selected value can be used in a subsequent <strong>Check Preconditions</strong> stage to determine branching.</p>\n <p>For example, if the user selects "rollback" from this list of options, that branch can be activated by using the expression:\n <samp class="small">execution.stages[n].context.judgmentInput=="rollback"</samp></p>',"pipeline.config.bake.manifest.expectedArtifact":"<p>This is the template you want to render.</p>","pipeline.config.bake.manifest.overrideExpressionEvaluation":'<p>Explicitly evaluate SpEL expressions in overrides just prior to manifest baking. Can be paired with the "Skip SpEL evaluation" option in the Deploy Manifest stage when baking a third-party manifest artifact with expressions not meant for Spinnaker to evaluate as SpEL.</p>',"pipeline.config.bake.manifest.templateRenderer":"<p>This is the engine used for rendering your manifest.</p>","pipeline.config.bake.manifest.helm.chartFilePath":"\n <p>This is the relative path to the Chart.yaml file within your Git repo.</p>\n <p>e.g.: <b>helm/my-chart/Chart.yaml</b></p>","pipeline.config.bake.manifest.helm.rawOverrides":"Use <i>--set</i> instead of <i>--set-string</i> when injecting override values. Values injected using <i>--set</i> will be converted to primitive types by Helm.","pipeline.config.bake.manifest.kustomize.filePath":"\n <p>This is the relative path to the kustomization.yaml file within your Git repo.</p>\n <p>e.g.: <b>examples/wordpress/mysql/kustomization.yaml</b></p>","pipeline.config.bake.cf.manifest.name":"<p> Name should be the same as the expected artifact in the Produces Artifact section. </p>","pipeline.config.bake.cf.manifest.templateArtifact":"\n <p> This is the manifest template needing resolution. Variables in this template should use double parentheses notation.</p>\n <p>e.g.: </p>\n <p>---</p>\n <p>buildpack: ((javabuildpack)) </p>\n <p>foo: ((some.nestedKey)) </p>","pipeline.config.bake.cf.manifest.varsArtifact":'\n <p> These are the variables that will be substituted in the manifest template. These should be yaml files and follow standard convention. </p>\n <p>e.g.: </p>\n <p>---</p>\n <p>javabuildpack: java_buildpack_offline </p>\n <p>some: </p>\n <p style="padding-left: 1em">nestedKey: bar </p>',"pipeline.config.haltPipelineOnFailure":"Immediately halts execution of all running stages and fails the entire execution.","pipeline.config.haltBranchOnFailure":"Prevents any stages that depend on this stage from running, but allows other branches of the pipeline to run.","pipeline.config.haltBranchOnFailureFailPipeline":"Prevents any stages that depend on this stage from running, but allows other branches of the pipeline to run. The pipeline will be marked as failed once complete.","pipeline.config.ignoreFailure":"Continues execution of downstream stages, marking this stage as failed/continuing.","pipeline.config.jenkins.markUnstableAsSuccessful.true":"If Jenkins reports the build status as UNSTABLE, Spinnaker will mark the stage as SUCCEEDED and continue execution of the pipeline.","pipeline.config.jenkins.markUnstableAsSuccessful.false":"\n If Jenkins reports the build status as UNSTABLE,\n Spinnaker will mark the stage as FAILED; subsequent execution will be determined based on the configuration of the\n <b>If build fails</b> option for this stage.","pipeline.config.travis.markUnstableAsSuccessful.true":"If Travis reports the build status as UNSTABLE, Spinnaker will mark the stage as SUCCEEDED and continue execution of the pipeline.","pipeline.config.travis.markUnstableAsSuccessful.false":"\n If Travis reports the build status as UNSTABLE,\n Spinnaker will mark the stage as TERMINAL; subsequent execution will be determined based on the configuration of the\n <b>If build fails</b> option for this stage.","pipeline.config.wercker.markUnstableAsSuccessful.true":"If Wercker reports the build status as UNSTABLE, Spinnaker will mark the stage as SUCCEEDED and continue execution of the pipeline.","pipeline.config.wercker.markUnstableAsSuccessful.false":"\n If Wercker reports the build status as UNSTABLE,\n Spinnaker will mark the stage as FAILED; subsequent execution will be determined based on the configuration of the\n <b>If build fails</b> option for this stage.","pipeline.config.cron.expression":'<strong>Format (Year is optional)</strong><p><samp>Seconds Minutes Hour DayOfMonth Month DayOfWeek (Year)</samp></p><p><strong>Example: every 30 minutes</strong></p><samp>0 0/30 * * * ?</samp><p><strong>Example: every Monday at 10 am</strong></p><samp>0 0 10 ? * 2</samp><p><strong>Note:</strong> values for "DayOfWeek" are 1-7, where Sunday is 1, Monday is 2, etc. You can also use MON,TUE,WED, etc.',"cluster.rollback.explicit":"\n <p>A server group running the previous build will be enabled and appropriately resized.</p>\n <p>The current server group will be disabled after the resize completes.</p>\n ","cluster.rollback.previous_image":"\n <p>The current server group will be cloned with the previous build.</p>\n ","pipeline.config.findAmi.cluster":"The cluster to look at when selecting the image to use in this pipeline.","pipeline.config.findAmi.imageNamePattern":"A regex used to match the name of the image. Must result in exactly one match to succeed. Empty is treated as match any.","pipeline.config.dependsOn":"Declares which stages must be run <em>before</em> this stage begins.","pipeline.config.parallel.cancel.queue":"<p>If concurrent pipeline execution is disabled, then the pipelines that are in the waiting queue will get canceled when the next execution starts. <br><br>Check this box if you want to keep them in the queue.</p>","pipeline.config.parallel.max.concurrent":"<p>If concurrent pipeline execution is enabled, this variable sets the maximum number of concurrent pipelines executing. <br><br>If set to 0, then max is unlimited.</p>","pipeline.config.timeout":"\n <p>Allows you to force the stage to fail if its running time exceeds a specific length.</p>\n <p><b>Note:</b> By default, Spinnaker will use sensible timeouts that depend on the stage type and the operations the stage needs to perform at runtime. These defaults can vary based on chosen configuration and other external factors.\n </p>","pipeline.config.trigger.runAsUser":"The current user must have access to the specified service account, and the service account must have access to the current application. Otherwise, you'll receive an 'Access is denied' error.","pipeline.config.trigger.authorizedUser":"The current user must have the permission to approve the manual judgment stage. Otherwise, you'll not be able continue to the next pipeline stage.","pipeline.config.script.repoUrl":"<p>Path to the repo hosting the scripts in Stash. (e.g. <samp>CDL/mimir-scripts</samp>). Leave empty to use the default.</p>","pipeline.config.script.repoBranch":"<p>Git Branch. (e.g. <samp>master</samp>). Leave empty to use the master branch.</p>","pipeline.config.script.path":"<p>Path to the folder hosting the scripts in Stash. (e.g. <samp>groovy</samp>, <samp>python</samp> or <samp>shell</samp>)</p>","pipeline.config.script.command":"<p>Executable script and parameters. (e.g. <samp>script.py --ami-id ${deploymentDetails[0].ami}</samp> ) </p>","pipeline.config.script.image":"<p>(Optional) image passed down to script execution as IMAGE_ID</p>","pipeline.config.script.account":"<p>(Optional) account passed down to script execution as ENV_PARAM</p>","pipeline.config.script.region":"<p>(Optional) region passed down to script execution as REGION_PARAM</p>","pipeline.config.script.cluster":"<p>(Optional) cluster passed down to script execution as CLUSTER_PARAM</p>","pipeline.config.script.cmc":"<p>(Optional) cmc passed down to script execution as CMC</p>","pipeline.config.script.propertyFile":"<p>(Optional) The name to the properties file produced by the script execution to be used by later stages of the Spinnaker pipeline. </p>","pipeline.config.docker.trigger.tag":"<p>(Optional) If specified, only the tags that match this Java Regular Expression will be triggered. Leave empty to trigger builds on any tag pushed.</p><p>Builds will not be triggered off the latest tag or updates to existing tags.</p>","pipeline.config.docker.trigger.digest":"<p>The SHA256 hash of the image.</p>","pipeline.config.git.trigger.branch":"<p>(Optional) If specified, only pushes to the branches that match this Java Regular Expression will be triggered. Leave empty to trigger builds for every branch.</p>","pipeline.config.git.trigger.githubSecret":'<p>(Optional, but recommended) If specified, verifies GitHub as the sender of this trigger. See <a target="_blank" href="https://developer.github.com/webhooks/securing/">GitHub docs</a> for more information.</p>',"serverGroup.ipv6":"<p>Associating an IPv6 address to nodes allows for ingress and egress communication over IPv6. Most modern software supports IPv6 and enablement is transparent. This is an incremental addition to IPv4 and will not remove the ability for connectivity over IPv4.</p>","serverGroupCapacity.useSourceCapacityTrue":"\n <p>Spinnaker will use the current capacity of the existing server group when deploying a new server group.</p>\n <p>This setting is intended to support a server group with auto-scaling enabled, where the bounds and desired capacity are controlled by an external process.</p>\n <p>In the event that there is no existing server group, the deploy will fail.</p>","serverGroupCapacity.useSourceCapacityFalse":"<p>The specified capacity is used regardless of the presence or size of an existing server group.</p>","strategy.redblack.scaleDown":"\n <p>Resizes the target server group to zero instances before disabling it.</p>\n <p>Select this if you wish to retain the launch configuration for the old server group without running any instances.</p>","strategy.redblack.maxRemainingAsgs":'\n <p><b>Optional</b>: indicates the maximum number of server groups that will remain in this cluster - including the newly created one.</p>\n <p>If you wish to destroy all server groups except the newly created one, select "Highlander" as the strategy.</p>\n <p><strong>Minimum value:</strong> 2</p>',"strategy.redblack.rollback":"\n <p>Disable the new server group and ensure that the previous server group is restored to its original capacity.</p>\n <p>The rollback <strong>will only be</strong> initiated if instances in the new server group fail to launch and become healthy.</p>\n <p>Should an error occur disabling or destroying other server groups in the cluster, the new server group <strong>will not be</strong> rolled back.</p>\n ","strategy.rollingPush.relaunchAll":"<p>Incrementally terminates each instance in the server group, waiting for a new one to come up before terminating the next one.</p>","strategy.rollingPush.totalRelaunches":"<p>Total number of instances to terminate and relaunch.</p>","strategy.rollingPush.concurrentRelaunches":"<p>Number of instances to terminate and relaunch at a time.</p>","strategy.rollingPush.concurrentRelaunches.migration":"\n <p>Number of instances to terminate and relaunch at a time.</p>\n <p>Can be expressed as an explicit instance count or as a percentage of instances in server group being migrated.</p>\n ","strategy.rollingPush.order":"\n <p>Determines the order in which instances will be terminated.\n <ul><li><b>Oldest</b> will terminate the oldest instances first</li>\n <li><b>Newest</b> will terminate those most recently launched.</li></ul></p>","strategy.rollingRedBlack.targetPercentages":"<p>Rolling red black will slowly scale up the new server group. It will resize the new server group by each percentage defined.</p>","strategy.rollingRedBlack.rollback":"<p>Disable the new server group and ensure that the previous server group is restored to its original capacity.</p>","strategy.monitored.deploySteps":"<p>Monitored Deploy will scale up the new server group as specified by these per cent steps. After each step, the health of the new server group will be evaluated by the specified deployment monitor.</p>","strategy.monitored.rollback":"<p>If deploy fails, disable the new server group and ensure that the previous server group is active and restored to its original capacity.</p>","strategy.monitored.destroyFailedAsg":"<p>If deploy fails and rollback succeeds destroys the server group that failed the deploy instead of just disabling it.</p>","loadBalancers.filter.serverGroups":"\n <p>Displays all server groups configured to use the load balancer.</p>\n <p>If the server group is configured to <em>not</em> add new instances to the load balancer, it will be grayed out.</p>","loadBalancers.filter.instances":"\n <p>Displays all instances in the context of their parent server group. The color of the instance icon\n indicates <em>only its health in relation to the load balancer</em>. That is, if the load balancer health check reports the instance\n as healthy, the instance will appear green - even if other health indicators (Discovery, other load balancers, etc.) report the instance\n as unhealthy.</p>\n <p>A red icon indicates the instance is failing the health check for the load balancer.</p>\n <p>A gray icon indicates the instance is currently detached from the load balancer.</p>","loadBalancers.filter.onlyUnhealthy":"\n <p>Filters the list of load balancers and server groups (if enabled)\n to only show load balancers with instances failing the health check for the load balancer.</p>","project.cluster.stack":"<p>(Optional field)</p><p>Filters displayed clusters by stack.</p><p>Enter <samp>*</samp> to include all stacks; leave blank to omit any clusters with a stack.</p><p>Only <samp>*</samp> is valid for Kubernetes V2 accounts.</p>","project.cluster.detail":"<p>(Optional field)</p><p>Filters displayed clusters by detail.</p><p>Enter <samp>*</samp> to include all details; leave blank to omit any clusters with a detail.</p><p>Only <samp>*</samp> is valid for Kubernetes V2 accounts.</p>","instanceType.storageOverridden":"<p>These storage settings have been cloned from the base server group and differ from the default settings for this instance type.</p>","instanceType.unavailable":"<p>This instance type is not available for the selected configuration.</p>","execution.forceRebake":"\n <p>By default, the bakery will <b>not</b> create a new image if the contents of the package and base image have not changed.\n Instead, it will return the previously baked image, though this behavior is not guaranteed.</p>\n <p>Select this option to force the bakery to create a new image, regardless of whether or not a matching image exists.</p>","execution.dryRun":"\n <p>Select this option to run the pipeline without <em>really</em> executing anything.</p>\n <p>This is a good way to test parameter-driven behavior, expressions, optional stages, etc.</p>","user.verification":'\n Typing into this verification field is annoying! But it serves as a reminder that you are\n changing something in an account deemed important, and prevents you from accidentally changing something\n when you meant to click on the "Cancel" button.',"pipeline.waitForCompletion":"if unchecked, marks the stage as successful right away without waiting for the pipeline to complete","jenkins.waitForCompletion":"if unchecked, marks the stage as successful right away without waiting for the Jenkins job to complete","travis.waitForCompletion":"if unchecked, marks the stage as successful right away without waiting for the Travis job to complete","wercker.waitForCompletion":"if unchecked, marks the stage as successful right away without waiting for the Wercker job to complete","script.waitForCompletion":"if unchecked, marks the stage as successful right away without waiting for the script to complete","markdown.examples":"\n Some examples of markdown syntax: <br/> `*italic*` <br/> `**bold**` <br/> `[link text](http://url-goes-here)`\n ","pipeline.config.webhook.payload":"JSON payload to be added to the webhook call.","pipeline.config.webhook.cancelPayload":"JSON payload to be added to the webhook call when it is called in response to a cancellation.","pipeline.config.webhook.waitForCompletion":"If not checked, we consider the stage succeeded if the webhook returns an HTTP status code 2xx, otherwise it will be failed. If checked, it will poll a status url (defined below) to determine the progress of the stage.","pipeline.config.webhook.statusUrlResolutionIsGetMethod":"Use the webhook's URL with GET method as status endpoint.","pipeline.config.webhook.statusUrlResolutionIsLocationHeader":"Pick the status url from the Location header of the webhook's response call.","pipeline.config.webhook.statusUrlResolutionIsWebhookResponse":"Pick the status url from the JSON returned by the webhook's response call.","pipeline.config.webhook.statusUrlJsonPath":"JSON path to the status url in the webhook's response JSON. (i.e. <samp>$.buildInfo.url</samp>)","pipeline.config.webhook.retryStatusCodes":"Normally, webhook stages only retry on 429 and 5xx status codes. <br>You can specify additional status codes here that will cause the monitor to retry (e.g. <samp>404, 418</samp>)","pipeline.config.webhook.waitBeforeMonitor":"Optional delay (in seconds) to wait before starting to poll the endpoint for monitoring status","pipeline.config.webhook.statusJsonPath":"JSON path to the status information in the webhook's response JSON (e.g. <samp>$.buildInfo.status</samp>). <br>If left empty, a 200 response from the status endpoint will be treated as a success.","pipeline.config.webhook.progressJsonPath":"JSON path to a descriptive message about the progress in the webhook's response JSON. (e.g. <samp>$.buildInfo.progress</samp>)","pipeline.config.webhook.successStatuses":"Comma-separated list of strings (that will be returned in the response body in the previously defined `statusJsonPath` field) that will be considered as SUCCESS status.","pipeline.config.webhook.canceledStatuses":"Comma-separated list of strings (that will be returned in the response body in the previously defined `statusJsonPath` field) that will be considered as CANCELED status.","pipeline.config.webhook.terminalStatuses":"Comma-separated list of strings (that will be returned in the response body in the previously defined `statusJsonPath` field) that will be considered as TERMINAL status.","pipeline.config.webhook.customHeaders":"Key-value pairs to be sent as additional headers to the service.","pipeline.config.webhook.failFastCodes":"Comma-separated HTTP status codes (4xx or 5xx) that will cause this webhook stage to fail without retrying.","pipeline.config.webhook.signalCancellation":"Trigger a specific webhook if this stage is cancelled by user or due to pipeline failure","pipeline.config.parameter.label":"(Optional): a label to display when users are triggering the pipeline manually","pipeline.config.parameter.description":"(Optional): if supplied, will be displayed to users as a tooltip\n when triggering the pipeline manually. You can include HTML in this field.","pipeline.config.parameter.pinned":"(Optional): if checked, this parameter will be always shown in a pipeline execution view, otherwise it'll be collapsed by default.","pipeline.config.parameter.pinAll":"(Optional): if checked, all parameters will be shown in a pipeline execution view.","pipeline.config.failOnFailedExpressions":"When this option is enabled, the stage will be marked as failed if it contains any failed expressions","pipeline.config.roles.help":"\n <p> When the pipeline is triggered using an automated trigger, these roles will be used to decide if the pipeline has permissions to access a protected application or account.</p>\n <ul>\n <li>\n To read from a protected application or account, the pipeline must have at least one role that has read access to the application or account.\n </li>\n <li>\n To write to a protected application or account, the pipeline must have at least one role that has write access to the application or account.\n </li>\n </ul>\n <p><strong>Note:</strong> To prevent privilege escalation vulnerabilities, a user must be a member of <strong>all</strong> of the groups specified here in order to modify, and execute the pipeline.</p>","pipeline.config.entitytags.namespace":"All tags have an associated namespace (<strong>default</strong> will be used if unspecified) that provides a means of grouping tags by a logical owner.","pipeline.config.entitytags.value":"Value can either be a string or an object. If you want to use an object, input a valid JSON string.","pipeline.config.entitytags.region":"(Optional) Target a specific region, use * if you want to apply to all regions.","pipeline.config.deliveryConfig.manifest":`(Optional) Name of the file with your Delivery Config manifest. Leave blank to use the default name (<strong><i>${null==(lo=di.managedDelivery)?void 0:lo.defaultManifest}</i></strong>).`,"pipeline.config.codebuild.source":"(Optional) Source of the build. It will be overridden to Spinnaker artifact if checked. If not checked, source configured in CodeBuild project will be used.","pipeline.config.codebuild.sourceType":"(Optional) Type of the source. It can be specified explicitly; otherwise, it will be inferred from source artifact.","pipeline.config.codebuild.sourceVersion":'(Optional) Source version of the build. If not specified, the artifact version will be used. If artifact doesn\'t have a version, the latest version will be used. See the <a href="https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StartBuild.html#CodeBuild-StartBuild-request-sourceVersion">CodeBuild reference</a> for more information.',"pipeline.config.codebuild.buildspec":"(Optional) Inline buildspec definition of the build. If not specified, buildspec configured in CodeBuild project will be used.","pipeline.config.codebuild.secondarySources":"(Optional) Secondary sources of the build. It can be overridden by adding Spinnaker Artifacts. If not specified, secondary sources configured in CodeBuild project will be used.","pipeline.config.codebuild.secondarySourcesVersionOverride":"(Optional) Existing secondary sources version overrides. Pre-defined secondary source's version can be overriden by specifying the source identifier and version. If not specified, secondary sources configured in CodeBuild project will be used.","pipeline.config.codebuild.sourceIdentifier":"(Optional) Name of a pre-defined secondary source.","pipeline.config.codebuild.secondarySourceVersion":"Version of secondary source identifier to use. Required if specifying a source identifier.","pipeline.config.codebuild.image":"(Optional) Image in which the build will run. It can be overridden by specifying the name of the image. If not specified, image configured in CodeBuild project will be used.","pipeline.config.codebuild.envVar":"(Optional) Environment variables that will be propagated into the build."};Object.keys(co).forEach((e=>Ks.register(e,co[e])));function po(e){const{label:t,help:n,input:a,actions:i,validation:r={}}=e,{hidden:s,messageNode:o,category:l}=r,c=!!t||!!n;return ot.createElement(Vs.Provider,{value:false},ot.createElement("div",{className:"sp-formItem"},ot.createElement("div",{className:"sp-formItem__left"},c&&ot.createElement("div",{className:"sp-formLabel"},t," ",n)),ot.createElement("div",{className:"sp-formItem__right"},ot.createElement("div",{className:"sp-form"},ot.createElement("span",{className:"flex-container-h margin-between-lg field"},ot.createElement("span",{className:"input"},a),i)),false,!s&&ot.createElement(Ir,{message:o,type:l}))))}function uo(e,t){if(P(e)){return e(t)}return e}oi(".sp-formSection {\n border: 1px solid var(--color-concrete);\n border-radius: 16px;\n max-width: 800px;\n overflow: hidden;\n margin-bottom: 16px;\n box-shadow: 0 4px 0 0 var(--color-concrete);\n background-color: var(--color-white);\n padding-bottom: 8px;\n}\n.sp-formSection__header {\n font-size: 18px;\n font-weight: 600;\n border-bottom: 1px solid var(--color-concrete);\n display: flex;\n align-items: center;\n width: 100%;\n background-color: rgba(0, 0, 0, 0.06);\n padding: 8px 16px;\n margin-bottom: 8px;\n}\n.sp-formSection__header .title {\n flex: 1 1 auto;\n min-height: 48px;\n}\n.sp-formGroup {\n border: 1px solid var(--color-titanium);\n border-radius: 8px;\n box-shadow: 0 2px 0 0 var(--color-titanium);\n max-width: 800px;\n margin-bottom: 16px;\n overflow: visible;\n}\n.sp-formItem {\n font-size: 14px;\n padding: 0 0 8px 16px;\n max-width: 800px;\n}\n@media only screen and (min-width: 640px) {\n .sp-formItem {\n display: flex;\n }\n}\n.sp-formItem .help-contents {\n font-style: italic;\n}\n.groupHeader {\n background-color: rgba(0, 0, 0, 0.025);\n border-bottom: 1px dotted var(--color-concrete);\n padding-bottom: 0;\n margin-bottom: 7px;\n padding-top: 8px;\n}\n.sp-formItem__left {\n display: flex;\n}\n@media only screen and (min-width: 640px) {\n .sp-formItem__left {\n flex: 0 0 32%;\n }\n}\n@media only screen and (min-width: 640px) {\n .sp-formItem__right {\n flex: 0 0 68%;\n padding: 0 14px;\n }\n}\n.sp-formLabel {\n align-self: flex-end;\n margin-left: 8px;\n margin-bottom: 4px;\n flex: 1 1 100%;\n font-size: 13px;\n font-weight: 700;\n}\n@media only screen and (min-width: 640px) {\n .sp-formLabel {\n align-self: flex-start;\n text-align: right;\n margin: 6px 0 8px 0;\n }\n}\n.sp-formLabel .optional {\n font-weight: 600;\n font-style: italic;\n font-size: 12px;\n}\n.sp-formActions {\n white-space: nowrap;\n}\n.sp-formActions .action {\n display: inline-block;\n width: 32px;\n height: 32px;\n padding: 3px 4px;\n border: 1px solid var(--color-concrete);\n cursor: pointer;\n border-radius: 2px;\n margin-left: 4px;\n}\n@media only screen and (min-width: 640px) {\n .sp-formActions .action {\n margin-left: 2px;\n }\n}\n.sp-formActions .action [class^='icon-'],\n.sp-formActions .action [class*=' icon-'] {\n font-size: 24px;\n}\n.sp-formActions--mobile {\n flex: 1 0 1px;\n margin-bottom: 8px;\n align-self: flex-end;\n}\n@media only screen and (min-width: 640px) {\n .sp-formActions--mobile {\n display: none;\n }\n}\n.sp-formActions--web {\n display: none;\n}\n@media only screen and (min-width: 640px) {\n .sp-formActions--web {\n display: block;\n }\n}\n.sp-form {\n display: flex;\n width: 100%;\n margin-bottom: 8px;\n}\n.sp-form .prefix,\n.sp-form .suffix {\n flex: 0 1 auto;\n margin: 8px 4px 8px 0;\n align-self: center;\n word-break: break-all;\n}\n.sp-form .suffix {\n margin-left: 4px;\n margin-right: 6px;\n}\n.sp-form .field {\n flex: 1 1 auto;\n min-width: 100px;\n}\n.sp-form .field .input {\n flex-grow: 1;\n}\n.sp-form .Select-input input {\n border: none !important;\n padding: 8px 0 12px;\n}\n.sp-form .is-open .Select-value-label {\n opacity: 0.6;\n}\n.sp-form input[type='text'] {\n border: 1px solid var(--color-concrete);\n border-radius: 2px;\n width: 100%;\n height: 32px;\n padding: 0 8px;\n background-color: transparent;\n font-size: 14px;\n}\n.sp-form input[type='checkbox'] {\n background-color: var(--color-danger);\n}\n");class mo extends ot.Component{constructor(){super(...arguments),this.state={showContextModal:!1}}render(){const{spelError:e}=this.props;if(!e||!e.message)return null;const t=()=>this.setState((e=>({showContextModal:!e.showContextModal})));return ot.createElement("div",null,ot.createElement(qt,{show:this.state.showContextModal,onHide:t},ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,e.message)),ot.createElement(qt.Body,null,ot.createElement("pre",null,e.context)),ot.createElement(qt.Footer,null,ot.createElement("button",{className:"primary passive",type:"button",onClick:t},"Close"))),ot.createElement(Ir,{type:"error",message:e.message}),ot.createElement("button",{className:"link",type:"button",onClick:t},"Show expression context where the error occurred"))}}class go extends ot.Component{render(){const{value:e,validation:t,inputClassName:n,prefix:a,...i}=this.props,r=`TextInput form-control ${gr(n)} ${hr(t)}`,s=ot.createElement("input",{className:r,type:"text",autoComplete:"off",value:gr(e),...i});return a?ot.createElement("div",{className:"flex-container-h middle"},ot.createElement("div",{className:"sp-padding-xs-right body-regular"},a),s):s}}const ho=e=>Xn.compile(`'${e.replace(/'/g,"''")}'`);class fo{constructor(e,t){this.bracket=e,this.pos=t}static theOpenBracketFor(e){return"}"===e?"{":"]"===e?"[":"("}static theCloseBracketFor(e){return"{"===e?"}":"["===e?"]":")"}compatibleWithCloseBracket(e){return"{"===this.bracket?"}"===e:"["===this.bracket?"]"===e:")"===e}}class vo{parseExpressions(e){const t=[],n="${",a="}";let i=0;for(;i<e.length;){const r=e.indexOf(n,i);if(r>=i){r>i&&t.push(ho(e.substring(i,r)));const s=r+n.length,o=this.skipToCorrectEndSuffix(a,e,s);if(-1===o)throw new Error("No ending suffix '}' for expression starting at character "+r+": "+e.substring(r));if(o===s)throw new Error("No expression defined within delimiter '${}' at character "+r);const l=e.substring(r+n.length,o).trim();if(!l)throw new Error("No expression defined within delimiter '${}' at character "+r);t.push(Xn.compile(l)),i=o+a.length}else t.push(ho(e.substring(i))),i=e.length}return t}isSuffixHere(e,t,n){let a=0;for(let i=0;i<n.length&&t<e.length;i++)if(e.charAt(t++)!==n.charAt(a++))return!1;return a===n.length}skipToCorrectEndSuffix(e,t,n){let a=n;const i=t.length;if(-1===t.indexOf(e,n))return-1;const r=[];for(;a<i&&(!this.isSuffixHere(t,a,e)||r.length);){const e=t.charAt(a);switch(e){case"{":case"[":case"(":r.push(new fo(e,a));break;case"}":case"]":case")":{if(!r.length)throw new Error(`Found closing '${e}' at position ${a} without an opening '${fo.theOpenBracketFor(e)}'`);const t=r.pop();if(!t.compatibleWithCloseBracket(e))throw new Error("Found closing '"+e+"' at position "+a+" but most recent opening is '"+t.bracket+"' at position "+t.pos);break}case"'":case'"':{const n=t.indexOf(e,a+1);if(-1===n)throw new Error("Found non terminating string literal starting at position "+a);a=n;break}}a++}if(r.length){const e=r.pop();throw new Error("Missing closing '"+fo.theCloseBracketFor(e.bracket)+"' for '"+e.bracket+"' at position "+e.pos)}return this.isSuffixHere(t,a,e)?a:-1}}function Ao(e){const t=(new vo).parseExpressions(e);return t.forEach((e=>{const t=e._compiledExpression.getValue;e._compiledExpression.getValue=function(){const n=arguments[0];try{return t.apply(e._compiledExpression,arguments)}catch(e){throw e.state=n,e}}})),t}const Eo=(e,t)=>{if(!t)return{value:t,spelError:null,spelPreview:""};try{const n=Ao(t);return{value:t,spelError:null,spelPreview:n.map((t=>t.eval(e))).join("")}}catch(e){const a={message:null,context:null,contextTruncated:null};if(e.name&&e.message)"NullPointerException"===e.name&&e.state&&e.state.activeContext&&(a.context=null===(n=e.state.activeContext.peek())?"null":void 0===n?"undefined":JSON.stringify(n,null,2),a.contextTruncated=R(a.context,{length:200})),a.message=`${e.name}: ${e.message}`;else try{a.message=JSON.stringify(e)}catch(t){a.message=e.toString()}return{value:t,spelError:a,spelPreview:null}}var n};class bo extends ot.Component{componentDidUpdate(e){const{context:t,value:n}=this.props;if(n!==e.value||!E(t,e.context)){const e=Eo(t,n);this.props.onExpressionChange(e)}}render(){return ot.createElement(go,{autoComplete:"off",...this.props})}}bo.defaultProps={context:{},placeholder:""};const yo=({spelPreview:e,markdown:t})=>ot.createElement("div",{className:"flex-container-h baseline margin-between-lg"},ot.createElement("span",{className:"no-grow"},"Preview:")," ",t?ot.createElement(Sr,{message:e}):ot.createElement("span",null,e));class Co{static evaluateExpression(e,t,n){return Si("/pipelines").path(t,n,"evaluateExpression").query({expression:e}).get().then((e=>{const t=e.detail||{},n=t[Object.keys(t)[0]];if(n&&n.length)throw new Error(`${n[0].exceptionType}: ${n[0].description}`);return e.result}))}static parseExpressionString(e){Ao(e)}static includesSpel(e){return C(e)&&e.includes("${")}}const wo=()=>ot.createElement(ot.Fragment,null,"Β ");class xo extends ot.Component{render(){const{value:e,validation:t,inputClassName:n,text:a,wrapperClassName:i,...r}=this.props,s=`${gr(n)} ${hr(t)}`;return ot.createElement("div",{className:Cn("checkbox",i)},ot.createElement("label",null,ot.createElement("input",{className:s,type:"checkbox",checked:!!e,...r}),a||ot.createElement(wo,null)))}}oi(".ChecklistInput ul {\n display: flex;\n flex-flow: column wrap;\n list-style: none;\n padding: 0;\n}\n.ChecklistInput.ChecklistInput_inline ul {\n flex-flow: row wrap;\n}\n.ChecklistInput.ChecklistInput_inline a.btn {\n margin: 8px 0 0 10px;\n}\n.ChecklistInput.ChecklistInput_inline li {\n white-space: nowrap;\n margin-right: 16px;\n}\n.ChecklistInput.ChecklistInput_inline li.last-of-type {\n margin-right: 0;\n}\n");const{useEffect:ko}=ot;function Bo(e){const{inline:t,showSelectAll:n,value:a,validation:i,inputClassName:r,options:s,stringOptions:o,onChange:l}=e;ko((function(){e.onBlur&&e.onBlur(fr({name:e.name,value:a}))}),[]);const c=vr(o)?o.map((e=>({label:e,value:e}))):s||[],p=a||[],d=t=>{l(fr({value:t,name:e.name}))},u=e=>p.includes(e),m=c.every((e=>u(e.value))),g=`${"ChecklistInput "+(t?"ChecklistInput_inline":"")} }${gr(r)} ${hr(i)}`;return ot.createElement("div",{className:g},ot.createElement("ul",{className:"checklist"},c.map((t=>ot.createElement("li",{key:t.label},ot.createElement(xo,{text:t.label,value:t.value,onChange:()=>(t=>{const n=u(t)?p.filter((e=>e!==t)):p.concat(t);l(fr({value:n,name:e.name}))})(t.value),checked:u(t.value)})))),n&&c.length>1&&ot.createElement("li",{key:"select_all_button"},ot.createElement("a",{type:"button",onClick:m?()=>d([]):()=>d(c.map((e=>e.value)))},m?"Deselect All":"Select All"))))}function So(e){const{validation:t,inputClassName:n,classNames:a,onChange:i,onBlur:r,name:s,...o}=e,l=`${gr(n)} ${hr(t)}`;ot.useEffect((()=>r(fr({name:s,value:e.value}))),[]);const c=U({},a,{container:"",overlayWrapper:"",overlay:""});return c.container=`DayPickerInput ${gr(c.container)} ${l}`,ot.createElement(Zn,{...o,classNames:c,onDayChange:t=>{const n=t&&t.toISOString().slice(0,10);e.onChange(fr({name:s,value:n}))}})}oi("/* Kludge while we figure out how to add the form-control ng-invalid classes directly to the nested day-picker input */\n.DayPickerInput.ng-invalid > input {\n border-color: var(--color-danger);\n}\n");oi(".ace-editor div,\n.ace-editor span {\n font-family: monospace !important;\n}\n.ace-editor > div.ace_gutter {\n z-index: 0;\n}\n");class Mo extends ot.Component{constructor(){super(...arguments),this.editorRef=ot.createRef(),this.validate=e=>{const{onValidation:t}=this.props;if(!t)return;e&&e.length||t(null);t(e.map((e=>`Line ${e.row+1}, column ${e.column+1}: ${e.text}`)).join("; "))}}componentDidMount(){if(this.props.autofocus){const{editor:e}=this.editorRef.current;e.focus(),e.navigateFileStart()}}render(){return ot.createElement(_n,{...this.props,ref:this.editorRef,onValidate:this.validate,editorProps:{$blockScrolling:1/0}})}}function No(){const e=ct(!1);return lt((()=>(e.current=!0,()=>{e.current=!1})),[]),e}function Do(e,t,n=[]){const a=No().current,i=ot.useRef(t);i.current=t;const r=ot.useCallback(((e,t)=>i.current(e,t)),[]);ot.useEffect((()=>(e&&e.addValidator&&e.addValidator(r),()=>e&&e.removeValidator&&e.removeValidator(r))),[]),ot.useEffect((()=>{a&&e&&e.revalidate&&e.revalidate()}),n)}Mo.defaultProps={mode:"json",theme:"textmate",style:{width:"100%",border:"1px solid var(--color-concrete)"},fontSize:11,showGutter:!0,showPrintMargin:!0,highlightActiveLine:!0,className:"ace-editor flex-fill",autofocus:!0};oi("input.NumberInput {\n max-width: 200px;\n}\n");const Io=e=>"number"==typeof e;function Fo(e){const{value:t,validation:n,inputClassName:a,...i}=e;Do(n,((t,n)=>{const a=Io(e.min)?kr.minValue(e.min):void 0,i=Io(e.max)?kr.maxValue(e.max):void 0,r=br([a,i]);return r?r(t,n):null}));const r=`NumberInput form-control ${gr(a)} ${hr(n)}`;return ot.createElement("input",{className:r,type:"number",value:gr(t),...i})}const To=e=>{const{inline:t,validation:n,value:a,defaultValue:i,inputClassName:r,options:s,stringOptions:o,...l}=e,c=pt((()=>vr(o)?o.map((e=>({value:e,label:e}))):s),[s]);lt((()=>{u(i)||c.map((e=>e.value)).includes(a)||e.onChange(fr({name:e.name,value:i}))}),[a,i,c]);const p=`RadioButtonInput radio ${gr(r)} ${hr(n)} ${t?"flex-container-h margin-between-md":"flex-container-v margin-between-sm"}`;return ot.createElement("div",{className:p},c.map((e=>ot.createElement(Qo,{key:e.label,value:a,option:e,...l}))))},Qo=({option:e,value:t,...n})=>ot.createElement("label",{className:"clickable"},ot.createElement("input",{type:"radio",...n,value:e.value,checked:e.value===t}),ot.createElement(Sr,{message:e.label,style:e.help&&{display:"inline-block"}}),e.help&&ot.createElement(ot.Fragment,null,e.help));class Po extends ot.Component{render(){const{value:e,validation:t,inputClassName:n,...a}=this.props,i=`TextAreaInput form-control ${gr(n)} ${hr(t)}`;return ot.createElement("textarea",{className:i,autoComplete:"off",value:gr(e),...a})}}const Ro=()=>{const e=ot.useContext(as);return void 0===e&&console.warn("Application context provider is missing"),e},Uo=()=>{const e=ot.useContext(as);if(void 0===e)throw new Error("Application context provider is missing");return e},{useEffect:zo,useRef:Go}=ot,jo=e=>{const t=Go();return zo((()=>{t.current=e})),t.current},{useEffect:Lo,useRef:Oo}=ot,Yo=()=>document.querySelector(".spinnaker-container"),$o=e=>{const t=jo(e);Lo((()=>{const n=Yo();if(n){if(t){const a=t.filter((t=>!e.includes(t)));n.classList.remove(...a)}n.classList.add(...e)}}),[e.sort().join()]);const n=Oo(e);n.current=e,Lo((()=>()=>{const e=Yo();e&&e.classList.remove(...n.current)}),[])},Ho={error:void 0,requestId:0,result:void 0,status:"NONE"};function Vo(e,t){const n=No(),a=!n.current,i=ct(),[r,s]=dt(0),[o,l]=dt(Ho),{result:c,error:p,status:d,requestId:u}=o,m=()=>s((e=>e+1));return lt((()=>{!a&&m()}),t),lt((()=>{const t=e(),a=()=>n.current&&t===i.current;if(!t)return;l({status:"PENDING",error:p,result:c,requestId:r}),i.current=t;t.then((e=>{a()&&l({status:"RESOLVED",result:e,error:void 0,requestId:r})}),(e=>{a()&&l({status:"REJECTED",result:void 0,error:e,requestId:r})}))}),[r]),{result:c,status:d,error:p,refresh:m,requestId:u}}function Jo(e,t,n){const a=pt((()=>t),[]),i=Vo(n.some((e=>u(e)))?()=>null:e,n),r=ct(!1);return"RESOLVED"===i.status&&(r.current=!0),r.current?i:{...i,result:a}}const{useRef:Wo,useCallback:Ko}=ot,qo=e=>{const t=Wo(e);return t.current=e,Ko(((...e)=>t.current&&t.current.apply(null,e)),[])},Xo=(e,t)=>{lt((()=>{if(!e)return;const n=e.subscribe(t);return()=>n.unsubscribe()}),[e])},Zo=(e,t)=>{const[n,a]=dt(t);return Xo(e,a),n},_o=e=>({...Zo(e.status$,e.status$.value),refresh:qo((()=>{e.refresh()}))});function el(e,t){const[n,a]=dt(e),i=e!==n;return lt((()=>{const n=setTimeout((()=>a(e)),t);return()=>clearTimeout(n)}),[e,t]),[n,i]}const{useRef:tl}=ot;function nl(e){const t=tl(e),n=tl(1),a=e===t.current||E(e,t.current);return t.current=e,a||n.current++,n.current}const{useEffect:al}=ot,il=(e,t,n,a)=>{const i=qo(n);al((()=>{if(n)return e.addEventListener(t,i,a),()=>{e.removeEventListener(t,i,a)}}),[e,t,!!n,Object.values(a||{}).sort().join()])};function rl(e){il(document.body,"keyup",(t=>"Escape"===t.key&&e()))}const sl=()=>{const[,e]=dt(!0);return ut((()=>{e((e=>!e))}),[])};function ol(e,t){const n=qo(e);lt((()=>{const a=!!e&&t&&setInterval(n,t);return()=>a&&clearInterval(a)}),[!!e,t])}const{useState:ll}=st,cl=()=>{const[e,t]=ll(window.innerWidth<=1024);return il(window,"resize",(()=>{const n=window.innerWidth<=1024;n!==e&&t(n)})),e};function pl(e,t,n,a){const i=Jo(e,t,a),r=qo(i.refresh);return lt((()=>{const{subscribe:e,unsubscribe:t}=eo.createScheduler(n);return e(r),t}),a),i}function dl(e){const{previewStage:t,...n}=e,[a,i]=el(e.value,300),r=!No().current;Do(e.validation,(function(){const{status:e,error:n,result:a}=s;if("NONE"===e)return null;if("PENDING"===e||i)return Ur(a?"Updating preview...\n\n\n```\n"+JSON.stringify(a,null,2)+"\n```":"Updating preview...");if("RESOLVED"===e){const e=`Preview - based on previous execution: ${t.executionLabel}\n\n\n\`\`\`\n`+JSON.stringify(a,null,2)+"\n```";return jr(e)}return"REJECTED"===e?Or(n):null}));const s=Jo((()=>Co.evaluateExpression(a,t.executionId,t.stageId)),null,[a,t.executionId,t.stageId]);return ot.useEffect((()=>{!r&&e.validation&&e.validation.revalidate&&e.validation.revalidate()}),[s.status,i]),ot.createElement(ul,{...n})}function ul(e){const t=!!/\n/.exec(e.value);return ot.createElement(Po,{inputClassName:"SpelInput",rows:t?3:1,placeholder:e.placeholder||"Variable value, e.g. ${trigger.buildInfo.number}",...e})}oi(".SpelInput {\n font-family: monospace;\n}\n");const ml=st.createContext(!1),{Provider:gl}=ml;var hl,fl;function vl(e){return st.createElement(Ps,{value:e.inputMode===hl.FREEFORM?"Return to default input":"Enter SpEL in freeform input"},st.createElement("button",{className:Cn("btn btn-sm btn-default",{active:e.inputMode===hl.FREEFORM}),onClick:e.onClick},st.createElement("span",{className:"fa icon-spel"})))}(fl=hl||(hl={})).DEFAULT="DEFAULT",fl.FREEFORM="FREEFORM";const{useCallback:Al,useContext:El,useState:bl}=ot,yl=new Map;function Cl(e,t,n){let a=0;const i=z(t);for(;e&&a<i.length;)e="string"==typeof e?void 0:e[i[a++]];return void 0===e?n:e}function wl(e){const{formik:t}=e,{name:n,onChange:a,fastField:i}=e,{input:r,layout:s,label:o,help:l,required:c,actions:p,validate:d,validationMessage:u,touched:m}=e,g=El(Ys),h=El(ml),f=Cl(t.touched,n),v=Cl(t.errors,e.name),A=$i(i,!1),E=$i(m,f),b=$i(u,v),{hidden:y,category:C,messageNode:w}=Vr(b,E),[x,k]=bl([]),B=Al((e=>k((t=>t.concat(e)))),[]),S=Al((e=>k((t=>t.filter((t=>t!==e))))),[]),M=()=>function(e){yl.has(e)||(yl.set(e,!0),setTimeout((()=>(yl.delete(e),e.validateForm()))))}(t),N=Ls();ot.useEffect((()=>{"FIRST_RENDER"===N.current&&0===x.length||M()}),[x]);const D={touched:E,revalidate:M,addValidator:B,removeValidator:S,hidden:y,category:C,messageNode:w},I=$i(e.spelAware,h,!1),F=ot.useMemo((()=>{const t=Cl(e.formik.values,n,"");return I&&Co.includesSpel(t)?hl.FREEFORM:hl.DEFAULT}),[]),[T,Q]=ot.useState(F),P=()=>{t.setFieldValue(n,null),Q(T===hl.DEFAULT?hl.FREEFORM:hl.DEFAULT)},R=({field:e})=>{const t=T===hl.DEFAULT?r:ul,n=$i(s,(e=>ot.createElement(g,{...e}))),i=uo(t,{...e,validation:D}),d=ot.createElement(ot.Fragment,null,p,I&&ot.createElement(vl,{inputMode:T,onClick:P})),u={label:o,help:l,required:c,actions:d,input:i,validation:D};return ot.createElement(js,{onChange:a,value:e.value},uo(n,u))},U=xl(o,c,[].concat(d).concat(x));return A?ot.createElement(Yn,{name:n,validate:U,render:R}):ot.createElement($n,{name:n,validate:U,render:R})}function xl(e,t,n){const a=[!!t&&kr.isRequired()].concat(n),i=br(a);if(!i)return null;const r=C(e)?e:void 0;return e=>i(e,r)}function kl(e){return ot.createElement(On,null,(t=>ot.createElement(wl,{...e,formik:t})))}const{useState:Bl,useCallback:Sl,useContext:Ml,useMemo:Nl}=ot;function Dl(e){const{input:t,layout:n,label:a,help:i,required:r,actions:s}=e,{value:o}=e,[l,c]=Bl([]),[p,d]=Bl(0),u=Sl((e=>c((t=>t.concat(e)))),[]),m=Sl((e=>c((t=>t.filter((t=>t!==e))))),[]),g=Nl((()=>e.validate),[]),h=Nl((()=>xl(a,r,[].concat(g||qi).concat(l))),[a,r,g,l.length]),f=Ml(Ys),v=$i(t,qi),A=$i(n,(e=>ot.createElement(f,{...e}))),[E,b]=Bl(!1),y=$i(e.touched,E),C=Nl((()=>h(o)),[h,o,p]),w={touched:y,addValidator:u,removeValidator:m,revalidate:()=>d((e=>e+1)),...Vr($i(e.validationMessage,C||void 0),y)},x=uo(v,{...{value:e.value,name:e.name||"",onChange:e.onChange||qi,onBlur:t=>{b(!0),e.onBlur&&e.onBlur(t)}},validation:w}),k={label:a,help:i,required:r,actions:s,validation:w,input:x};return ot.createElement(ot.Fragment,null,uo(A,k))}const Il={value:null,spelError:null,spelPreview:null};function Fl(e){const{context:t,name:n,label:a,help:i,actions:r,validationMessage:s}=e,[o,l]=ot.useState(Il),c=$i(e.markdown,!1),p=Vr(s,!0).messageNode||o.spelError&&t&&ot.createElement(mo,{spelError:o.spelError})||o.spelPreview&&ot.createElement(yo,{spelPreview:o.spelPreview,markdown:c});return ot.createElement(kl,{name:n,input:e=>ot.createElement(bo,{onExpressionChange:e=>l(e),context:t,...e}),label:a,help:i,actions:r,validationMessage:p})}class Tl extends ot.Component{constructor(){super(...arguments),this.state={spelPreview:null,spelError:null}}renderRegexFields(e,t){const{RegexHelp:n,regexName:a,replaceName:i}=e,r=({input:e})=>ot.createElement("div",{style:{flex:"1 1 40%"}}," ",e," ");return ot.createElement(Ds,{heading:({chevron:e})=>ot.createElement("span",null," ",e," Regex ",n," "),outerDivClassName:"",toggleClassName:"",defaultExpanded:t},ot.createElement("div",{className:"flex-container-h baseline"},ot.createElement("code",null,"s/"),ot.createElement(kl,{name:a,validate:e=>{try{return RegExp(e),""}catch(e){return e.message}},layout:e=>ot.createElement(r,{...e}),input:e=>ot.createElement(go,{...e}),touched:!0}),ot.createElement("code",null,"/"),ot.createElement(kl,{name:i,layout:e=>ot.createElement(r,{...e}),input:e=>ot.createElement(go,{...e})}),ot.createElement("code",null,"/g")))}renderPreview(e,t,n,a){const{markdown:i}=e;if(!n)return ot.createElement(yo,{spelPreview:t,markdown:i});try{const e=t.replace(new RegExp(n,"g"),a);return!!e&&ot.createElement(yo,{spelPreview:e,markdown:i})}catch(e){return ot.createElement(yo,{spelPreview:t,markdown:i})}}renderFormField(e,t){const{context:n,placeholder:a,help:i,label:r,actions:s}=this.props;return ot.createElement(kl,{name:this.props.name,input:e=>ot.createElement("div",{className:"flex-container-v flex-grow"},ot.createElement(bo,{onExpressionChange:e=>this.setState(e),context:n,placeholder:a,...e}),this.renderRegexFields(this.props,!!t)),help:i,label:r,actions:s,validationMessage:e,touched:!0})}render(){const{spelPreview:e,spelError:t}=this.state,{regexName:n,replaceName:a}=this.props;return ot.createElement(zs,{render:i=>{const r=Hn(i.values,n),s=Hn(i.values,a),o=Hn(i.errors,n)||Hn(i.errors,a);if(o)return this.renderFormField(zr(o),r);if(t)return this.renderFormField(ot.createElement(mo,{spelError:t}),r);if(e){const t=this.renderPreview(this.props,e,r,s);return this.renderFormField(t,r)}return this.renderFormField(jr(null),r)}})}}function Ql(e,t,n){const a=jo(t),[i,r]=dt({}),[s,o]=dt({});lt((()=>{var l,c;if(a&&t!==a){const p=null!=(l=n[a])?l:[],d=null!=(c=n[t])?c:[],u=p.reduce(((t,n)=>(t[n]=m(e.values,n),t)),{});r({...i,[a]:u});const g=p.reduce(((t,n)=>(t[n]=m(e.touched,n),t)),{});o({...s,[a]:g}),p.forEach((t=>{e.setFieldValue(t,void 0),e.setFieldTouched(t,null)}));const h=i[t]||{},f=s[t]||{};d.forEach((n=>{h.hasOwnProperty(n)&&e.setFieldValue(n,i[t][n]),f.hasOwnProperty(n)&&e.setFieldTouched(n,s[t][n])}))}}),[t])}function Pl(e,t,n){const a=t(e.value),i=st.useCallback((t=>{e.onChange(fr({name:t.target.name,value:n(t.target.value,t)}))}),[e.onChange,n]);return{...e,value:a,onChange:i}}Tl.defaultProps={markdown:!1};class Rl extends ot.Component{render(){const e=this.props.stage.labelComponent;return ot.createElement("div",{className:"label-component"},ot.createElement(e,{stage:this.props.stage}))}}function Ul(e){return ot.createElement(ot.Fragment,null,ot.createElement("dt",null,e.label," ",e.helpFieldId&&ot.createElement(_s,{id:e.helpFieldId})),ot.createElement("dd",null,e.value))}function zl(e){const{children:t,...n}=e;return ot.createElement("dl",{...n},t)}const Gl=({url:e,text:t})=>ot.createElement(ot.Fragment,null,ot.createElement("a",{href:e,target:"_blank"},t),ot.createElement(zi,{text:t,toolTip:"'Copy to clipboard'"}));function jl(e,t){return ot.forwardRef(((n,a)=>ot.createElement(Ll,{category:t},ot.createElement(e,{...n,ref:a}))))}class Ll extends ot.Component{constructor(e){super(e),this.state={error:null,retrying:!1}}static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,t){Ui.log({level:"ERROR",category:`SpinErrorBoundary - ${this.props.category}`,action:e.message,error:e,data:{label:e.message,componentStack:null==t?void 0:t.componentStack}})}retry(){this.setState({retrying:!0}),setTimeout((()=>this.setState({retrying:!1,error:null})),250)}render(){var e;if(!(null==(e=this.state)?void 0:e.error))return this.props.children;const{message:t,stack:n}=this.state.error,{retrying:a}=this.state;return ot.createElement("div",{className:"flex-container-v sp-margin-l"},ot.createElement("h3",null,"Oh dear, something has gone wrong."),ot.createElement("div",{className:"sp-margin-l-bottom"},ot.createElement("h4",null,"Spinnaker has encountered an unexpected UI error."),ot.createElement("button",{disabled:a,onClick:()=>this.retry()},a?"Retrying...":"Try again")),t&&ot.createElement(Ir,{message:t,type:"error"}),n&&ot.createElement(Ds,{defaultExpanded:!1,heading:"Stacktrace"},ot.createElement("pre",{style:{overflow:"scroll"}},n)))}}const Ol="ui.router.react.error.boundary";n(Ol,["ui.router"]).config(["$uiRouterProvider",e=>{e.stateRegistry.decorator("views",((e,t)=>{const n=t(e);return Object.values(n).filter((e=>"react"===e.$type)).forEach((t=>{const n=t,a=n.component;n.component=t=>ot.createElement(Ll,{category:e.name},ot.createElement(a,{...t}))})),n}))}]);const Yl="spinnaker.core.presentation.linkWithClipboard.component";n(Yl,[]).component("linkWithClipboard",yn(jl(Gl,"linkWithClipboard"),["url","text"]));const $l=ot.createContext(null),Hl=({children:e})=>{const t=ot.createRef();return il(document,"keydown",(e=>{var n,a;const{keyCode:i,shiftKey:r,target:s}=e;if(9===i){let i=null;const o=Array.from(null!=(a=null==(n=t.current)?void 0:n.querySelectorAll('\n input:not([tabindex^="-"]):not([disabled]),\n select:not([tabindex^="-"]):not([disabled]),\n textarea:not([tabindex^="-"]):not([disabled]),\n button:not([tabindex^="-"]):not([disabled]),\n a[href]:not([tabindex^="-"]):not([disabled]),\n [tabindex]:not([tabindex^="-"]):not([disabled])\n '))?a:[]).filter((e=>null!==e.offsetParent));if(!o.length)return;const l=o[0],c=o[o.length-1];l===s&&r&&(i=c),c!==s||r||(i=l),o.includes(s)||(i=r?c:l),i&&(i.focus(),e.preventDefault())}})),ot.createElement("div",{ref:t},e)};oi("@-webkit-keyframes backdropEnter {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes backdropEnter {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@-webkit-keyframes backdropLeave {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n@keyframes backdropLeave {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n@-webkit-keyframes dialogEnter {\n from {\n transform: scale3d(0.8, 0.8, 0.8);\n opacity: 0;\n }\n to {\n transform: scale3d(1, 1, 1);\n opacity: 1;\n }\n}\n@keyframes dialogEnter {\n from {\n transform: scale3d(0.8, 0.8, 0.8);\n opacity: 0;\n }\n to {\n transform: scale3d(1, 1, 1);\n opacity: 1;\n }\n}\n@-webkit-keyframes dialogLeave {\n from {\n transform: scale3d(1, 1, 1);\n opacity: 1;\n }\n to {\n transform: scale3d(0.8, 0.8, 0.8);\n opacity: 0;\n }\n}\n@keyframes dialogLeave {\n from {\n transform: scale3d(1, 1, 1);\n opacity: 1;\n }\n to {\n transform: scale3d(0.8, 0.8, 0.8);\n opacity: 0;\n }\n}\n/********************************************************\n Shared set of properties for both the tinted backdrop\n and the full screen container that holds a dialog\n********************************************************/\n/**********************************\n Tinted backdrop (behind dialog)\n***********************************/\n.sp-modal-backdrop {\n display: flex;\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n z-index: var(--layer-critical);\n overflow: hidden;\n overscroll-behavior: none;\n background-color: rgba(0, 0, 0, 0.7);\n will-change: opacity;\n}\n.sp-modal-backdrop.enter {\n -webkit-animation-name: backdropEnter;\n animation-name: backdropEnter;\n -webkit-animation-duration: 300ms;\n animation-duration: 300ms;\n -webkit-animation-timing-function: cubic-bezier(0.4, 0, 0, 1);\n animation-timing-function: cubic-bezier(0.4, 0, 0, 1);\n}\n.sp-modal-backdrop.exit {\n -webkit-animation-name: backdropLeave;\n animation-name: backdropLeave;\n -webkit-animation-duration: 300ms;\n animation-duration: 300ms;\n -webkit-animation-timing-function: cubic-bezier(0.76, 0.18, 0.4, 0.92);\n animation-timing-function: cubic-bezier(0.76, 0.18, 0.4, 0.92);\n}\n.sp-modal-backdrop.enter-active,\n.sp-modal-backdrop.enter-done {\n opacity: 1;\n}\n.sp-modal-backdrop.exit-active,\n.sp-modal-backdrop.exit-done {\n opacity: 0;\n}\n.sp-modal-backdrop-blur-effect {\n transition: filter 300ms cubic-bezier(0.4, 0, 0, 1);\n filter: saturate(1.3) blur(5px);\n}\n/************************************************\n Modal dialog and associated layout container\n************************************************/\n.Modal {\n display: flex;\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n z-index: var(--layer-critical);\n overflow: hidden;\n overscroll-behavior: none;\n justify-content: center;\n align-items: center;\n /* for large screens, place an eventual cap on the height of a modal */\n}\n.Modal .sp-dialog-sizer {\n display: grid;\n grid-template-columns: 1fr;\n grid-template-rows: 1fr;\n max-height: calc(100vh - 64px);\n min-height: 320px;\n width: calc(100vw - 128px);\n margin: 0 64px;\n}\n@media screen and (max-width: 1024px) {\n .Modal .sp-dialog-sizer {\n max-height: calc(100vh - 32px);\n width: calc(100vw - 48px);\n margin: 0 24px;\n }\n}\n@media screen and (min-height: 1164px) {\n .Modal .sp-dialog-sizer {\n max-height: 1100px;\n }\n}\n.Modal .sp-dialog-content {\n display: flex;\n position: relative;\n grid-column: 1 / -1;\n grid-row: 1 / -1;\n flex-direction: column;\n overflow: hidden;\n border-radius: 8px;\n box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22);\n will-change: transform, opacity;\n}\n.Modal.enter .sp-dialog-content {\n -webkit-animation-name: dialogEnter;\n animation-name: dialogEnter;\n -webkit-animation-duration: 300ms;\n animation-duration: 300ms;\n -webkit-animation-timing-function: cubic-bezier(0.4, 0, 0, 1);\n animation-timing-function: cubic-bezier(0.4, 0, 0, 1);\n}\n.Modal.exit .sp-dialog-content {\n -webkit-animation-name: dialogLeave;\n animation-name: dialogLeave;\n -webkit-animation-duration: 300ms;\n animation-duration: 300ms;\n -webkit-animation-timing-function: cubic-bezier(0.76, 0.18, 0.4, 0.92);\n animation-timing-function: cubic-bezier(0.76, 0.18, 0.4, 0.92);\n}\n.Modal.enter-active .sp-dialog-content,\n.Modal.enter-done .sp-dialog-content {\n transform: scale3d(1, 1, 1);\n opacity: 1;\n}\n.Modal.exit-active .sp-dialog-content,\n.Modal.exit-done .sp-dialog-content {\n transform: scale3d(0.8, 0.8, 0.8);\n opacity: 0;\n}\n");const Vl=({isOpen:e,maxWidth:t,onRequestClose:n,onAfterClose:a,children:i})=>{var r;$o(e?["sp-modal-backdrop-blur-effect"]:[]);il(document,"keydown",e?({keyCode:e})=>{27===e&&n()}:null);const s=qo(n),o=pt((()=>({onRequestClose:s})),[]);return ot.createElement($l.Provider,{value:o},ln.createPortal(ot.createElement(Hl,null,ot.createElement(ea,{in:e,timeout:300,mountOnEnter:!0,unmountOnExit:!0},ot.createElement("div",{className:"sp-modal-backdrop"})),ot.createElement(ea,{in:e,timeout:300,mountOnEnter:!0,unmountOnExit:!0,onExited:a},ot.createElement("div",{className:"Modal"},ot.createElement("div",{className:"sp-dialog-sizer",style:{maxWidth:null!=(r=y(t)?`${t}px`:t)?r:"1400px"}},ot.createElement("div",{className:"sp-dialog-content"},i))))),document.body))};oi(".ModalHeader {\n flex: none;\n background-color: var(--color-blumine);\n color: var(--color-white);\n justify-content: center;\n display: flex;\n align-items: center;\n}\n.ModalHeader .sp-modal-title {\n margin: 10px 16px;\n font-size: 22px;\n font-weight: 500;\n flex: 1 1 100%;\n word-break: break-all;\n}\n@media screen and (max-width: 1024px) {\n .ModalHeader .sp-modal-title {\n margin: 4px 12px;\n font-size: 18px;\n }\n}\n.ModalHeader .sp-modal-close {\n border: none;\n background-color: transparent;\n flex: 0 0 56px;\n height: 56px;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n align-self: flex-start;\n transition: all 150ms ease-out;\n}\n.ModalHeader .sp-modal-close:hover,\n.ModalHeader .sp-modal-close:focus {\n background-color: rgba(160, 180, 220, 0.15);\n outline: none;\n}\n@media screen and (max-width: 1024px) {\n .ModalHeader .sp-modal-close {\n flex: 0 0 48px;\n height: 48px;\n }\n}\n");const{useContext:Jl}=ot,Wl=({className:e,children:t})=>{const{onRequestClose:n}=Jl($l);return ot.createElement("div",{className:"ModalHeader"},ot.createElement("div",{className:Cn("sp-modal-title",e)},t),ot.createElement("button",{className:"sp-modal-close",onClick:()=>n&&n()},ot.createElement("i",{className:"ico icon-close"})))};oi(".ModalBody {\n display: flex;\n flex: 1 1 auto;\n overflow: auto;\n overscroll-behavior: contain;\n --webkit-overflow-scrolling: touch;\n background-color: var(--color-smoke);\n padding: 0 64px;\n}\n@media screen and (max-width: 1024px) {\n .ModalBody {\n padding: 0 8px;\n }\n}\n");const Kl=({children:e})=>ot.createElement("div",{className:"ModalBody"},e);oi(".ModalFooter {\n flex: 0 0 auto;\n min-height: 64px;\n background-color: var(--color-white);\n color: var(--color-white);\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n box-shadow: 0 4px 4px 4px rgba(0, 0, 0, 0.12), 0 6px 12px 8px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n padding: 16px;\n}\n.ModalFooter .sp-modal-footer-left {\n flex: 1 1 100%;\n margin-right: 16px;\n}\n.ModalFooter .sp-modal-footer-right {\n flex: 1 0 auto;\n display: flex;\n justify-content: flex-end;\n}\n@media screen and (max-width: 1024px) {\n .ModalFooter .ModalFooter {\n flex-wrap: wrap;\n }\n .ModalFooter .sp-modal-footer-left {\n margin: 8px 0;\n }\n}\n");const ql=({primaryActions:e,secondaryActions:t})=>ot.createElement("div",{className:"ModalFooter"},t&&ot.createElement("div",{className:"sp-modal-footer-left"},t),e&&ot.createElement("div",{className:"sp-modal-footer-right"},e)),Xl=(e,t,n)=>new Promise((a=>{let i=document.createElement("div"),r=!1;function s(){i&&(ln.unmountComponentAtNode(i),i=null)}const o=e=>t=>{i&&(a(e(t)),r=!1,d())},l=o((e=>({status:"CLOSED",closeResult:e}))),c=o((e=>({status:"DISMISSED",dismissResult:e}))),p=()=>c(null);function d(){ln.render(ot.createElement(Vl,{isOpen:r,onRequestClose:p,onAfterClose:s,...n},ot.createElement(ta,null,ot.createElement(e,{...t,dismissModal:c,closeModal:l}))),i)}d(),setTimeout((()=>{i&&(r=!0,d())}))}));class Zl extends ot.Component{constructor(e){super(e),this.refCallback=e=>{e&&(this.element=$(e))},this.state={id:pr.generateUuid(),currentPageKey:null,pages:[]}}componentDidMount(){const{children:e,deepLinkParam:t,hideNavigation:n,scrollableContainer:a}=this.props;this.container=this.element.closest(a),P(this.container.bind)&&!n&&this.container.bind(this.getEventKey(),G((()=>this.handleScroll()),20)),this.navigator=this.element.find(".page-navigation"),t&&this.props.reactInjector.$stateParams[t]&&this.setCurrentSection(this.props.reactInjector.$stateParams[t]);const i=ot.Children.map(e,(e=>e.props.pageKey&&e.props.label?{key:e.props.pageKey,label:e.props.label,visible:!1!==e.props.visible,badge:e.props.badge}:null));this.setState({pages:i,currentPageKey:i.length>0?i[0].key:null})}componentWillUnmount(){P(this.container.unbind)&&!this.props.hideNavigation&&this.container.unbind(this.getEventKey())}setCurrentSection(e){this.setState({currentPageKey:e}),this.syncLocation(e),er.scrollTo(`[data-page-id=${e}]`,this.props.scrollableContainer,this.container.offset().top),this.container.find(".highlighted").removeClass("highlighted"),this.container.find(`[data-page-id=${e}]`).addClass("highlighted")}getEventKey(){return`scroll.pageNavigation.${this.state.id}`}handleScroll(){const e=this.element.get(0).getBoundingClientRect(),t=this.container.get(0).getBoundingClientRect().top,n=this.state.pages.find((e=>{const n=this.container.find(`[data-page-content=${e.key}]`);return!!n.length&&n.get(0).getBoundingClientRect().bottom>t}));n&&(this.setState({currentPageKey:n.key}),this.syncLocation(n.key),this.navigator.find("li").removeClass("current"),this.navigator.find(`[data-page-navigation-link=${n.key}]`).addClass("current")),e.top<t?this.navigator.css({position:"fixed",width:this.navigator.get(0).getBoundingClientRect().width,top:t}):this.navigator.css({position:"relative",top:0,width:"100%"})}syncLocation(e){const{deepLinkParam:t}=this.props;t&&this.props.reactInjector.$state.go(".",{[t]:e},{notify:!1,location:"replace"})}updatePagesConfig(e){const t=[...this.state.pages],n=t.find((t=>t.key===e.key));n&&(n.badge=e.badge,n.label=e.label,n.visible=e.visible,this.setState({pages:t}))}render(){const{children:e,hideNavigation:t}=this.props,{currentPageKey:n,pages:a}=this.state,i=ot.Children.map(e,(e=>ot.cloneElement(e,{updatePagesConfig:e=>this.updatePagesConfig(e)})));return ot.createElement("div",{className:"page-navigator"},ot.createElement("div",{className:"row flex-1",ref:this.refCallback},!t&&ot.createElement("div",{className:"col-md-3 hidden-sm hidden-xs"},ot.createElement("ul",{className:"page-navigation"},a.map(((e,t)=>e.visible&&ot.createElement("li",{key:t,"data-page-navigation-link":e.key,className:n===e.key?"current":""},ot.createElement("a",{onClick:()=>this.setCurrentSection(e.key)},e.label,e.badge&&ot.createElement("span",null," ","("+e.badge+")"))))))),ot.createElement("div",{className:"col-md-"+(t?"12":"9")+" col-sm-12"},ot.createElement("div",{className:"sections"},i))))}}class _l extends ot.Component{constructor(e){super(e)}componentDidUpdate(e){const{badge:t,pageKey:n,label:a,updatePagesConfig:i,visible:r}=this.props;e.visible===this.props.visible&&e.badge===this.props.badge&&e.label===this.props.label||i&&i({key:n,label:a,visible:!1!==r,badge:t})}render(){const{children:e,pageKey:t,label:n,noWrapper:a,visible:i}=this.props;return!1!==i?ot.createElement("div",{className:"page-section"},ot.createElement("div",{className:"page-subheading flex-1","data-page-id":t},ot.createElement("h4",{className:"sticky-header"},n),ot.createElement("div",{className:a?"no-wrapper":"section-body","data-page-content":t},e))):ot.createElement(ot.Fragment,null)}}const ec=ot.memo((({outputFileObject:e})=>{const t=/(https?:\/\/[^$\s'"]+)/,n=ia(e);let a=0;const i=n.split(t);return ot.createElement("pre",{style:{overflow:"scroll",maxHeight:"400px"}},i.map((e=>{return`'${e}'`.match(t)?(n=e,ot.createElement("a",{key:""+a++,href:n,target:"_blank"},n)):e;var n})))}));class tc extends ot.Component{constructor(){super(...arguments),this.setSortKey=e=>{const{sortKey:t,onChange:n}=this.props;e.preventDefault();n((this.isSortKey()&&this.isReverse()?"":"-")+t)}}isSortKey(){const{currentSort:e,sortKey:t}=this.props;return e===t||e==="-"+t}isReverse(){return this.props.currentSort&&this.props.currentSort.startsWith("-")}render(){const e=this.isSortKey(),t=Cn({"inactive-sort-key":!e,"sort-toggle":!0,clickable:!0});return ot.createElement("span",{className:t,onClick:this.setSortKey},this.props.label,ot.createElement("a",null,(!this.isReverse()||!e)&&ot.createElement("span",{className:"glyphicon glyphicon-Down-triangle"}),this.isReverse()&&e&&ot.createElement("span",{className:"glyphicon glyphicon-Up-triangle"})))}}tc.defaultProps={onChange:qi};class nc extends ot.Component{render(){const{className:e,onClick:t,children:n}=this.props;return ot.createElement("span",{className:e,onClick:t}," ",n," ")}}const ac=st.createContext(null),{useState:ic,useMemo:rc}=st,sc=e=>{const t=cl(),[n,a]=ic(!1),{layout:i,...r}=e,s=e.columns.map((e=>"string"==typeof e?{name:e}:e)),o=rc((()=>({layout:i,isMobile:t,allExpanded:n,setAllExpanded:()=>a(!1),expandable:e.expandable,columns:s})),[i,t,e.expandable,n,nl(e.columns)]),{TableLayout:l}=i;return st.createElement(ac.Provider,{value:o},st.createElement(l,{...r,isMobile:t,columns:s,expandAll:()=>a(!0)}))},{useState:oc,useContext:lc,useEffect:cc}=st,pc=({defaultExpanded:e,renderExpandedContent:t,children:n})=>{const{layout:a,expandable:i,allExpanded:r,setAllExpanded:s,isMobile:o,columns:l}=lc(ac),[c,p]=oc(e||!1);cc((()=>{r&&t&&p(!0)}),[r]),i||null==e||console.error(new Error("You used the defaultExpanded prop on a row inside a <Table/> that's not expandable.\n Either remove the defaultExpanded prop or make the <Table/> expandable."));const d=st.Children.map(n,((e,t)=>st.cloneElement(e,{index:t})));d.length>l.length&&(()=>{throw new Error("A <TableCell/> was added that didn't match any of the columns defined on its parent <Table/>.\n Check if there are an equal number of <TableCell/> elements to the number of columns provided to the <Table/>.\n ")})();const{TableRowLayout:u}=a;return st.createElement(u,{tableExpandable:i,rowExpandable:i&&!!t,expanded:c,setExpanded:e=>{p(e),r&&!e&&s(!1)},renderExpandedContent:t,isMobile:o,columns:l,children:d})},{useContext:dc}=st,uc=e=>{const{layout:t,expandable:n,isMobile:a,columns:i}=dc(ac),{TableCellLayout:r}=t;return st.createElement(r,{...e,expandable:n,isMobile:a,columns:i})};oi(".MinimalNativeTableLayout {\n text-align: left;\n font-size: 13px;\n overflow: hidden;\n}\n.MinimalNativeTableLayout .header-row {\n height: 24px;\n}\n.MinimalNativeTableLayout .header-cell {\n color: var(--color-charcoal);\n font-weight: 400;\n padding: 0 16px;\n border-bottom: 1px solid var(--color-porcelain);\n}\n.MinimalNativeTableLayout .header-cell:first-child {\n font-weight: 900;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n color: var(--color-black);\n}\n.MinimalNativeTableLayout .cell {\n color: var(--color-charcoal);\n padding: 6px 16px;\n vertical-align: top;\n min-width: 80px;\n}\n.MinimalNativeTableLayout .cell:first-child {\n font-weight: 600;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n");const mc={TableLayout:({columns:e,children:t})=>st.createElement("table",{className:"MinimalNativeTableLayout",cellSpacing:"0",cellPadding:"0"},st.createElement("thead",null,st.createElement("tr",{className:"header-row"},e.map((({name:e})=>st.createElement("th",{key:e,className:"header-cell"},e))))),st.createElement("tbody",null,t)),TableRowLayout:({children:e})=>st.createElement("tr",null,e),TableCellLayout:({children:e,indent:t})=>st.createElement("td",{className:"cell",style:{paddingLeft:t?16+20*t+"px":void 0}},e)};oi(".StandardGridTableLayout {\n display: grid;\n}\n.StandardGridTableLayout .standard-grid-table-header {\n display: grid;\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n font-weight: 600;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n color: var(--color-regal);\n font-size: 13px;\n z-index: 100;\n align-items: flex-end;\n min-height: 48px;\n grid-column: 1 / -1;\n background-color: var(--color-smoke);\n border-bottom: 2px solid var(--color-blumine);\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell {\n align-items: flex-end;\n padding-bottom: 6px;\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.sortable {\n border-radius: 16px 16px 0 0;\n cursor: pointer;\n height: 32px;\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.sortable:hover {\n background-color: rgba(160, 180, 220, 0.15);\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.sortable > .sort-indicator {\n border-radius: 16px;\n background-color: var(--color-blumine);\n width: 16px;\n height: 16px;\n margin-left: 6px;\n margin-bottom: 1px;\n position: relative;\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.sortable > .sort-indicator:after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n width: 0;\n height: 0;\n margin-left: -4px;\n border-left: 4px solid transparent;\n border-right: 4px solid transparent;\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.sortable > .sort-indicator.ascending:after {\n margin-top: -2px;\n border-bottom: 4px solid var(--color-smoke);\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.sortable > .sort-indicator.descending:after {\n margin-top: -1px;\n border-top: 4px solid var(--color-smoke);\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.header-expand-toggle {\n display: flex;\n justify-content: center;\n align-items: flex-end;\n cursor: pointer;\n padding-left: 0;\n border-radius: 16px 16px 0 0;\n height: 32px;\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.header-expand-toggle:hover {\n background-color: rgba(160, 180, 220, 0.15);\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.header-expand-toggle > i {\n font-size: 24px;\n margin-bottom: -4px;\n}\n.StandardGridTableLayout .standard-grid-table-row-container {\n display: grid;\n}\n.StandardGridTableLayout .standard-grid-table-row {\n display: grid;\n min-height: 40px;\n overflow: hidden;\n align-items: center;\n font-size: 13px;\n padding: 8px 0;\n grid-column: 1 / -1;\n grid-row: 1;\n}\n.StandardGridTableLayout .standard-grid-table-row.expandable {\n cursor: pointer;\n}\n.StandardGridTableLayout .standard-grid-table-row.expandable:hover {\n /*\n Since this becomes a sticky header when rows are expanded\n and the color we want is semi-transparent, let's use a gradient\n that grabs the right color but puts a white backdrop behind it\n so the things scrolling below it don't come through.\n */\n background-image: linear-gradient(180deg, rgba(160, 180, 220, 0.15), rgba(160, 180, 220, 0.15));\n}\n.StandardGridTableLayout .standard-grid-table-row.expanded {\n background-color: var(--color-white);\n position: -webkit-sticky;\n position: sticky;\n top: 48px;\n}\n.StandardGridTableLayout .standard-grid-table-row .row-expand-toggle {\n justify-content: center;\n padding-left: 0;\n color: var(--color-nobel);\n}\n.StandardGridTableLayout .standard-grid-table-row .row-expand-toggle > i {\n font-size: 24px;\n}\n.StandardGridTableLayout .expanded-row-content {\n /* stretch across entire table width */\n grid-column: 1 / -1;\n grid-row: 2;\n background-color: var(--color-white);\n padding: 16px;\n overflow-x: scroll;\n}\n.StandardGridTableLayout .standard-grid-table-cell,\n.StandardGridTableLayout .cell-content {\n display: flex;\n align-items: center;\n flex: 1;\n}\n.StandardGridTableLayout .standard-grid-table-cell {\n padding-left: 16px;\n}\n@media screen and (max-width: 1024px) {\n .StandardGridTableLayout .standard-grid-table-row-container:first-child {\n margin-top: 16px;\n }\n .StandardGridTableLayout .standard-grid-table-row {\n display: flex;\n flex-wrap: wrap;\n padding: 0 8px 16px;\n margin: 0 0 16px;\n border-bottom: 1px solid var(--color-porcelain);\n }\n .StandardGridTableLayout .standard-grid-table-row.expanded {\n position: static;\n margin-bottom: 0;\n padding-left: 6px;\n /*for border */\n border-left: 2px solid var(--color-regal);\n border-bottom: none;\n }\n .StandardGridTableLayout .standard-grid-table-row.expanded:hover {\n background-color: var(--color-white);\n }\n .StandardGridTableLayout .expanded-row-content {\n border-left: 2px solid var(--color-regal);\n }\n .StandardGridTableLayout .standard-grid-table-cell {\n flex: 0 0 100%;\n flex-direction: column;\n align-items: flex-start;\n }\n .StandardGridTableLayout .mobile-cell-header {\n font-weight: 900;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n color: var(--color-regal);\n margin-top: 9px;\n }\n .StandardGridTableLayout .cell-content {\n margin-top: 4px;\n margin-left: 4px;\n }\n}\n");const gc=(e,t,n)=>{if(n)return;const a=e.map((e=>{if("number"==typeof e)return`${e}fr`;if(Array.isArray(e)&&2===e.length){const[t,n]=e;return`minmax(${t.size+t.unit}, ${n.size+n.unit})`}return!Array.isArray(e)&&e.size&&e.unit?`${e.size}${e.unit}`:(e=>{throw new Error(`Invalid table sizing configuration.\n Expected either a sizing object with 'size' and 'unit' fields or an array of two sizing objects.\n Actual value was ${JSON.stringify(e)}`)})(e)}));return t&&a.push("48px"),a.join(" ")},hc=({columns:e,expandable:t,expandAll:n,isMobile:a,children:i,sizes:r})=>{const s=gc(r,t,a);return st.createElement("div",{className:"StandardGridTableLayout"},!a&&st.createElement("div",{className:"standard-grid-table-header",style:{gridTemplateColumns:s}},e.map((({name:e,sortDirection:t,onSort:n})=>st.createElement("div",{key:e,className:Cn("standard-grid-table-cell",{sortable:!!n}),onClick:n||null},e,t?st.createElement("span",{className:Cn("sort-indicator",t)}):null))),t&&st.createElement("div",{className:"standard-grid-table-cell header-expand-toggle",onClick:n},st.createElement("i",{className:"ico icon-expand-all"}))),i)},fc=({tableExpandable:e,rowExpandable:t,expanded:n,setExpanded:a,isMobile:i,sizes:r,children:s,renderExpandedContent:o})=>{const l=gc(r,e,i);return st.createElement("div",{className:Cn("standard-grid-table-row-container",{"sp-margin-l-bottom":t&&n})},st.createElement("div",{className:Cn("standard-grid-table-row",{expandable:t,expanded:n}),style:{gridTemplateColumns:l},onClick:t?()=>a(!n):null},s,e&&!i&&st.createElement("div",{className:"standard-grid-table-cell row-expand-toggle"},t&&st.createElement("i",{className:Cn("ico",{"icon-expand":!n,"icon-collapse":n})}))),t&&n&&st.createElement("div",{className:"expanded-row-content"},o()))},vc=({children:e,indent:t,index:n,columns:a,isMobile:i})=>{const r=a[n].name,s=t&&i?16+20*t+"px":void 0;return st.createElement("div",{className:"standard-grid-table-cell",style:{paddingLeft:s}},i&&st.createElement("div",{className:"mobile-cell-header"},r),st.createElement("div",{className:"cell-content"},e))},Ac=e=>({TableLayout:t=>st.createElement(hc,{...t,sizes:e}),TableRowLayout:t=>st.createElement(fc,{...t,sizes:e}),TableCellLayout:e=>st.createElement(vc,{...e})});class Ec extends pn{constructor(e){super(e),this.renderOuter=this._renderOuter}_renderOuter(){const e=super.render.apply(this,arguments);if(!e)return null;const t=this.wrapper?this.wrapper.offsetWidth:null;return ot.createElement(mn,{classes:{element:"layer-high"},attachment:"top left",targetAttachment:"top left",constraints:[{to:"window",attachment:"together",pin:["top"]}]},ot.createElement("div",null),ot.cloneElement(e,{style:{position:"static",width:t}}))}}const bc=({className:e,children:t})=>ot.createElement("span",{className:e,style:{wordBreak:"break-all",overflowWrap:"break-word",hyphens:"none"}},t),yc=({className:e,children:t})=>ot.createElement("span",{className:e,style:{whiteSpace:"nowrap"}},t);var Cc,wc;function xc(e){return ot.createElement("div",null,ot.createElement("div",{className:"col-md-4 sm-label-left"},ot.createElement("b",null,e.propLabel),e.propHelpFieldId&&ot.createElement(_s,{id:e.propHelpFieldId})),ot.createElement("div",{className:"col-md-8 sm-label-left"},ot.createElement("span",{className:"btn-group btn-group-"+e.toggleSize},ot.createElement("button",{name:"prop-off",type:"button",className:"btn btn-default "+(e.isPropertyActive?"disabled":"active btn-primary"),onClick:()=>e.onClick(!1)},ot.createElement(Ps,{value:e.tooltipPropOffBtn},ot.createElement("span",null,e.displayTextPropOffBtn))),ot.createElement("button",{name:"prop-on",type:"button",className:"btn btn-default "+(e.isPropertyActive?"active btn-primary":"disabled"),onClick:()=>e.onClick(!0)},ot.createElement(Ps,{value:e.tooltipPropOnBtn},ot.createElement("span",null,e.displayTextPropOnBtn))))))}(wc=Cc||(Cc={})).XSMALL="xs",wc.SMALL="sm",wc.MEDIUM="m",wc.LARGE="lg",xc.defaultProps={toggleSize:Cc.XSMALL,displayTextPropOffBtn:"Off",tooltipPropOffBtn:"Toggle to turn OFF",displayTextPropOnBtn:"On",tooltipPropOnBtn:"Toggle to turn ON",isPropertyActive:!1};const kc=({tooltip:e,placement:t,delayShow:n,wrapperClassName:a,...i})=>ot.createElement(Ps,{value:e,placement:t,delayShow:n},ot.createElement("div",{className:a},ot.createElement(Bn,{...i}))),Bc={bindings:{options:"=",model:"=",onChange:"<?"},templateUrl:"core/src/pipeline/config/targetSelect.html"};n("spinnaker.pipeline.targetSelect.component",[]).component("targetSelect",Bc),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/pipeline/config/targetSelect.html",'<ui-select ng-model="$ctrl.model.target" on-select="$ctrl.onChange($ctrl.model.target)" class="form-control input-sm">\n <ui-select-match placeholder="None">{{$select.selected.label}}</ui-select-match>\n <ui-select-choices repeat="r.val as r in $ctrl.options ">\n <strong ng-bind-html="r.label | highlight: $select.search"></strong>\n <div ng-bind-html="r.description"></div>\n </ui-select-choices>\n</ui-select>\n')}]);class Sc extends ot.Component{constructor(){super(...arguments),this.clicked=e=>{const t=e.target.checked?[this.props.platformHealthType]:null;this.props.onChange(t)}}render(){return ot.createElement("div",{className:"checkbox"},ot.createElement("label",null,ot.createElement("input",{type:"checkbox",checked:E(this.props.interestingHealthProviderNames,[this.props.platformHealthType]),onChange:this.clicked}),"Consider only ",this.props.platformHealthType," health")," ",ot.createElement(_s,{id:"application.platformHealthOnly",expand:this.props.showHelpDetails}))}}function Mc(e){const{value:t,onChange:n,platformHealthType:a,showHelpDetails:i,...r}=e;return ot.createElement(Sc,{...r,interestingHealthProviderNames:t,platformHealthType:a,showHelpDetails:i,onChange:e=>{n(fr({name:r.name,value:e}))}})}const Nc=({dismiss:e})=>ot.createElement("div",{className:"modal-close close-button pull-right"},ot.createElement("button",{className:"link",type:"button",onClick:e},ot.createElement("span",{className:"glyphicon glyphicon-remove"})));class Dc extends ot.Component{render(){const{className:e,isDisabled:t,isFormSubmit:n,isNew:a,label:i,onClick:r,submitting:s}=this.props,o=n?"submit":"button";return ot.createElement("button",{className:e,disabled:t,onClick:r,type:o},ot.createElement("div",{className:"flex-container-h horizontal middle"},!s&&ot.createElement("i",{className:"far fa-check-circle"})||ot.createElement(bs,{mode:"circular"}),ot.createElement("span",{className:"sp-margin-xs-left"},i||(a?"Create":"Update"))))}}Dc.defaultProps={className:"btn btn-primary",onClick:qi,isDisabled:!1,isFormSubmit:!1,isNew:!1};class Ic{static setHeading(e){this.heading=e}static getPage(e){return this.pageRegistry.find((t=>t.key===e))}static markDirty(e){this.getPage(e).state.dirty=!0}static markClean(e){this.getPage(e).state.dirty=!1}static markComplete(e){this.getPage(e).state.done=!0}static markIncomplete(e){this.getPage(e).state.done=!1}static setCurrentPage(e,t){this.pageRegistry.forEach((t=>t.state.current=t===e)),this.currentPage=e,e.state.markCleanOnView&&this.markClean(e.key),e.state.markCompleteOnView&&this.markComplete(e.key),t||er.scrollTo(`[waypoint="${e.key}"]`,"[waypoint-container]",143)}static registerPage(e,t,n){n=n||{done:!1,blocked:!0,rendered:!0,current:!1,dirty:!1,markCleanOnView:!0,markCompleteOnView:!1,required:!1},this.pageRegistry.push({key:e,label:t,state:n}),this.renderPages()}static renderPages(){const e=this.pageRegistry.filter((e=>e.state.rendered));this.renderedPages=e,1===e.length&&this.setCurrentPage(e[0])}static isComplete(){return this.renderedPages.map((e=>e.state)).filter((e=>e.rendered&&e.required)).every((e=>e.done&&!e.dirty))}static allPagesVisited(){return this.renderedPages.map((e=>e.state)).filter((e=>e.rendered&&e.required)).every((e=>e.done))}static setRendered(e,t){this.pageRegistry.filter((t=>t.key===e)).forEach((e=>e.state.rendered=t)),this.renderPages()}static includePage(e){this.setRendered(e,!0)}static excludePage(e){this.setRendered(e,!1)}static resetWizard(){this.renderedPages.length=0,this.pageRegistry.length=0,this.currentPage=null,this.heading=null}}Ic.renderedPages=[],Ic.pageRegistry=[];class Fc extends ot.Component{constructor(){super(...arguments),this.state={errors:{},order:0,isLoading:!1,status:"default"},this.ref=ot.createRef(),this.innerRef=ot.createRef(),this.onLoadingChanged=e=>{const t=this.computeStatus(this.state.errors,e);return this.setState({isLoading:e,status:t},this.onWizardPageStateChanged)},this.validate=e=>{const t=this.innerRef.current,n=t&&P(t.validate)&&t.validate(e)||{};if(!E(n,this.state.errors)){const e=this.computeStatus(n,this.state.isLoading);this.setState({errors:n,status:e},this.onWizardPageStateChanged)}return n}}static getStatusClass(e){const t={error:"dirty",loading:"waiting",default:"done"};return t[e]||t.default}computeStatus(e,t){return Object.keys(e).length?"error":t?"loading":"default"}componentDidMount(){this.props.wizard.onWizardPageAdded(this)}componentWillUnmount(){this.props.wizard.onWizardPageRemoved(this)}componentDidUpdate(e){this.props.order!==e.order&&this.setState({order:this.props.order},this.onWizardPageStateChanged)}onWizardPageStateChanged(){this.props.wizard.onWizardPageStateChanged(this)}render(){const{note:e,label:t,render:n}=this.props,{status:a}=this.state,{innerRef:i,onLoadingChanged:r}=this,s=n({innerRef:i,onLoadingChanged:r}),o=Fc.getStatusClass(a);return ot.createElement("div",{className:"modal-page",ref:this.ref},t&&ot.createElement("div",{className:"wizard-subheading sticky-header"},ot.createElement("h4",{className:o},t)),ot.createElement("div",{className:"wizard-page-body"},s,e&&ot.createElement("div",{className:"row"},e)))}}class Tc extends ot.Component{render(){const{current:e,page:t,onClick:n}=this.props,{errors:a,status:i}=t.state,{label:r}=t.props,s=(e=>{const t=(e,n,a)=>(x(e)?e.forEach(((e,i)=>t(e,`${n}[${i}]`,a))):C(e)?a[n]=e:j(e)&&Object.keys(e).forEach((i=>t(e[i],`${n}.${i}`,a))),a);return t(e,"errors",{})})(a),o=!!Object.keys(s).length,l=`${Fc.getStatusClass(i)} ${e?"current":""}`,c=ot.createElement("li",{className:l},ot.createElement("a",{className:"clickable",onClick:()=>n(t)},r));if(!o)return c;const p=ot.createElement("span",null,Object.keys(s).map((e=>ot.createElement("span",{key:e},s[e]," ",ot.createElement("br",null)))));return ot.createElement(Ps,{template:p},c)}}class Qc extends ot.Component{render(){const{errorMessage:e}=this.props;if(!e.includes("has traffic guards enabled"))return null;const{$state:t,$stateParams:n}=hi,{project:a,application:i}=n,r=`home.${a?"project":"applications"}.application.config`,s={project:a,application:i,section:"traffic-guards"},o=t.href(r,s);return ot.createElement("p",null,ot.createElement("a",{href:o},"Configure Traffic Guards for this application"))}}class Pc extends ot.Component{getBaseState(){const{$stateParams:e}=hi;return`home.${e.project?"project":"applications"}.application`}getParams(e){const{project:t,application:n}=hi.$stateParams;return{project:t,application:n,...e}}render(){const{errorMessage:e,task:t}=this.props,{$state:n}=hi;if(!e)return null;const a=t.id?n.href(this.getBaseState()+".tasks.taskDetails",this.getParams({taskId:t.id})):null;return ot.createElement("div",{className:"col-md-12 overlay-modal-error"},ot.createElement("div",{className:"alert"},ot.createElement("h4",null,ot.createElement("i",{className:"fa fa-exclamation-triangle"})," Error:"),ot.createElement("p",null,ot.createElement(Sr,{message:e})),ot.createElement(Qc,{errorMessage:e})),a&&ot.createElement("p",null,ot.createElement("a",{href:a},"View this failed task in the tasks pane.")))}}class Rc extends ot.Component{render(){const{item:e}=this.props,t=Cn(["glyphicon","status-glyph",{"glyphicon-time":e.hasNotStarted,"glyphicon-play":e.isRunning,"fa fa-check":e.isCompleted,"fa fa-exclamation-triangle":e.isFailed||"TERMINATED"===e.status,"glyphicon-stop":e.isCanceled,"glyphicon-pause":e.isSuspended||e.isPaused}]);return ot.createElement("span",{className:t})}}function Uc(e){const t=["stageStart","stageEnd","determineTargetServerGroup"];let n=[];return e&&(n=e.filter((e=>!t.includes(e.name)||"TERMINAL"===e.status))),n}const zc="spinnaker.pipelines.stages.common.displayableTasks.filter";n(zc,[]).filter("displayableTasks",(function(){return Uc}));const Gc=({monitor:e})=>{const t=sl();return Xo(e.statusUpdatedStream,(()=>t())),e.task?ot.createElement(ot.Fragment,null,ot.createElement("ul",{className:"task task-progress"},Uc(e.task.steps).map(((e,t)=>ot.createElement("li",{key:t},ot.createElement(Rc,{item:e})," ",yr(e.name)," ",e.startTime&&ar(e.runningTimeInMs))))),e.task.isRunning&&ot.createElement("ul",{className:"task task-progress task-progress-running"},ot.createElement("li",null,ot.createElement(bs,{size:"small"}))),e.task.isCompleted&&ot.createElement("ul",{className:"task task-progress task-progress-refresh"},ot.createElement("li",null,ot.createElement("span",{className:"far fa-check-circle"})," ",ot.createElement("strong",null,"Operation succeeded!"))),e.task.id&&!e.error&&e.application&&ot.createElement("p",null,"You can"," ",ot.createElement("a",{href:hi.$state.href("home.applications.application.tasks.taskDetails",{application:e.application.name,taskId:e.task.id})},"monitor this task from the Tasks view"),".")):ot.createElement("ul",{className:"task"},"submitting task...")},jc=({monitor:e})=>{const t=sl();return lt((()=>{var n;const a=null==(n=null==e?void 0:e.statusUpdatedStream)?void 0:n.subscribe((()=>t()));return()=>null==a?void 0:a.unsubscribe()}),[e]),e&&(e.submitting||e.error)?ot.createElement(ea,{appear:!0,classNames:"overlay-modal",timeout:0,in:!0},ot.createElement("div",{className:"overlay overlay-modal vertical"},ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,e.title)),ot.createElement(qt.Body,null,ot.createElement("div",{className:"clearfix"},e.task&&ot.createElement("div",{className:"col-md-8 col-md-offset-2 overlay-modal-status"},ot.createElement(Gc,{monitor:e})),ot.createElement(Pc,{errorMessage:e.errorMessage,task:e.task}))),!e.error&&ot.createElement(qt.Footer,null,ot.createElement("button",{className:"btn btn-primary",onClick:e.closeModal},"Close")),e.error&&ot.createElement(qt.Footer,null,ot.createElement("button",{className:"btn btn-primary",onClick:()=>e.tryToFix()},"Go back and try to fix this"),ot.createElement("button",{className:"btn btn-default",onClick:e.closeModal},"Cancel")))):null};class Lc extends ot.Component{constructor(){super(...arguments),this.stepsElement=ot.createRef(),this.formikRef=ot.createRef(),this.state={pages:[],initialized:!1,currentPage:null},this.onWizardPageAdded=e=>{this.setState((t=>{const n=t.pages.concat(e);return{pages:n,currentPage:t.currentPage||n[0]}}),this.revalidate)},this.onWizardPageRemoved=e=>{this.setState((t=>{const n=M(t.pages,e);return{pages:n,currentPage:t.currentPage||n[0]}}),this.revalidate)},this.setCurrentPage=e=>{e&&this.stepsElement.current&&e.ref.current&&(this.stepsElement.current.scrollTop=e.ref.current.offsetTop),this.setState({currentPage:e})},this.handleStepsScroll=e=>{const t=this.state.pages.map((e=>e.ref.current.offsetTop)),n=e.currentTarget.scrollTop;let a=t.reverse().findIndex((e=>n>=e));void 0===a&&(a=t.length-1);const i=t.length-(a+1),r=this.state.pages[i];r!==this.state.currentPage&&this.setState({currentPage:r})},this.validate=e=>{const t=this.props.validate||(()=>({}));return this.state.pages.map((t=>t.validate(e))).concat(t(e)).reduce(((e,t)=>d(e,t)),{})},this.revalidate=()=>this.formik&&this.formik.validateForm()}static incrementer(){let e=0;return()=>++e}get formik(){return this.formikRef.current&&this.formikRef.current.getFormikBag()}componentDidMount(){this.setState({initialized:!0})}onWizardPageStateChanged(e){this.forceUpdate()}render(){const{formClassName:e,heading:t,initialValues:n,loading:a,submitButtonLabel:i,taskMonitor:r,closeModal:s,dismissModal:o}=this.props,{currentPage:l,initialized:c,pages:p}=this.state,d=ot.createElement("div",{className:"row"},ot.createElement(bs,{size:"large"})),u=p.sort(((e,t)=>e.state.order-t.state.order)).map((e=>ot.createElement(Tc,{key:e.props.label,current:e===l,onClick:this.setCurrentPage,page:e}))),m=()=>{const e=this.formik,t=Lc.incrementer();return e?this.props.render({formik:e,nextIdx:t,wizard:this}):null},g=r&&r.submitting,h=p.some((e=>"loading"===e.state.status));return ot.createElement(ot.Fragment,null,r&&ot.createElement(jc,{monitor:r}),ot.createElement(Gs,{ref:this.formikRef,initialValues:n,onSubmit:s,validate:this.validate,render:n=>ot.createElement(Vn,{className:`form-horizontal ${e}`},ot.createElement(Nc,{dismiss:o}),ot.createElement(qt.Header,null,t&&ot.createElement(qt.Title,null,t)),ot.createElement(qt.Body,null,a||!c?d:ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-3 hidden-sm hidden-xs"},ot.createElement("ul",{className:"steps-indicator wizard-navigation"},u)),ot.createElement("div",{className:"col-md-9 col-sm-12"},ot.createElement("div",{className:"steps",ref:this.stepsElement,onScroll:this.handleStepsScroll},m())))),ot.createElement(qt.Footer,null,ot.createElement("button",{className:"btn btn-default",disabled:g,onClick:o,type:"button"},"Cancel"),ot.createElement(Dc,{isDisabled:!n.isValid||g||h||a,submitting:g,isFormSubmit:!0,label:i})))}))}}class Oc{constructor(e){this.$scope=e}$onInit(){this.render=!1!==this.render,this.markCleanOnView=!1!==this.markCleanOnView,this.markCompleteOnView=!1!==this.markCompleteOnView,this.state={blocked:!1,current:!1,rendered:this.render,done:this.done||!this.mandatory,dirty:!1,required:this.mandatory,markCleanOnView:this.markCleanOnView,markCompleteOnView:this.markCompleteOnView},Ic.registerPage(this.key,this.label,this.state),this.$scope.$on("$destroy",(()=>Ic.setRendered(this.key,!1)))}}Oc.$inject=["$scope"];const Yc={bindings:{mandatory:"<",done:"<",markCleanOnView:"<",markCompleteOnView:"<",key:"@",label:"@",render:"<"},transclude:!0,templateUrl:"core/src/modal/wizard/v2wizardPage.component.html",controller:Oc};n("spinnaker.core.modal.wizard.wizardPage.component",[]).component("v2WizardPage",Yc),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/modal/wizard/v2wizardPage.component.html",'<div class="modal-page" ng-if="$ctrl.state.rendered" waypoint="{{ $ctrl.key }}">\n <div class="wizard-subheading sticky-header">\n <h4\n ng-class="{\n default: !$ctrl.state.done,\n current: $ctrl.state.current,\n done: $ctrl.state.done,\n dirty: $ctrl.state.dirty\n }"\n >\n {{ $ctrl.label }}\n </h4>\n </div>\n <div class="wizard-page-body" ng-transclude></div>\n</div>\n')}]);oi("v2-modal-wizard .modal-header,\n.wizard-modal .modal-header {\n /* Set to keep sticky section headings beneath modal header*/\n position: relative;\n z-index: 5;\n}\nv2-modal-wizard ul.wizard-navigation,\n.wizard-modal ul.wizard-navigation {\n margin: 0;\n padding: 0;\n list-style-type: none;\n height: auto;\n position: relative;\n background-color: var(--color-white);\n z-index: 5;\n}\nv2-modal-wizard ul.wizard-navigation:before,\n.wizard-modal ul.wizard-navigation:before,\nv2-modal-wizard ul.wizard-navigation:after,\n.wizard-modal ul.wizard-navigation:after {\n display: table;\n content: \" \";\n}\nv2-modal-wizard ul.wizard-navigation:after,\n.wizard-modal ul.wizard-navigation:after {\n clear: both;\n}\nv2-modal-wizard ul.wizard-navigation li,\n.wizard-modal ul.wizard-navigation li {\n display: block;\n width: 100%;\n text-align: left;\n padding: 0;\n position: relative;\n}\nv2-modal-wizard ul.wizard-navigation li a,\n.wizard-modal ul.wizard-navigation li a {\n color: var(--color-dovegray);\n display: block;\n line-height: 15px;\n text-decoration: none;\n text-transform: uppercase;\n transition: 0.25s;\n width: 100%;\n font-weight: normal;\n padding: 10px 5px 10px 32px;\n}\nv2-modal-wizard ul.wizard-navigation li a:before,\n.wizard-modal ul.wizard-navigation li a:before {\n position: absolute;\n left: 10px;\n top: 10px;\n width: 14px;\n height: 14px;\n border-radius: 100%;\n background-color: transparent;\n content: '';\n transition: 0.25s;\n font-size: 110%;\n font-family: 'Glyphicons Halflings';\n}\nv2-modal-wizard ul.wizard-navigation li.done a:before,\n.wizard-modal ul.wizard-navigation li.done a:before {\n background-color: var(--color-success);\n}\nv2-modal-wizard ul.wizard-navigation li.default,\n.wizard-modal ul.wizard-navigation li.default {\n pointer-events: auto;\n}\nv2-modal-wizard ul.wizard-navigation li.default a:before,\n.wizard-modal ul.wizard-navigation li.default a:before {\n background-color: var(--color-dovegray);\n}\nv2-modal-wizard ul.wizard-navigation li.current,\n.wizard-modal ul.wizard-navigation li.current,\nv2-modal-wizard ul.wizard-navigation li:hover,\n.wizard-modal ul.wizard-navigation li:hover,\nv2-modal-wizard ul.wizard-navigation li:active,\n.wizard-modal ul.wizard-navigation li:active {\n transition: 0.25s;\n background-color: var(--color-cirrus);\n}\nv2-modal-wizard ul.wizard-navigation li.current a,\n.wizard-modal ul.wizard-navigation li.current a,\nv2-modal-wizard ul.wizard-navigation li:hover a,\n.wizard-modal ul.wizard-navigation li:hover a,\nv2-modal-wizard ul.wizard-navigation li:active a,\n.wizard-modal ul.wizard-navigation li:active a {\n color: var(--color-mineshaft);\n font-weight: 600;\n}\nv2-modal-wizard ul.wizard-navigation li.current a:before,\n.wizard-modal ul.wizard-navigation li.current a:before,\nv2-modal-wizard ul.wizard-navigation li:hover a:before,\n.wizard-modal ul.wizard-navigation li:hover a:before,\nv2-modal-wizard ul.wizard-navigation li:active a:before,\n.wizard-modal ul.wizard-navigation li:active a:before {\n background-color: var(--color-accent);\n content: '';\n}\nv2-modal-wizard ul.wizard-navigation li.dirty a:before,\n.wizard-modal ul.wizard-navigation li.dirty a:before {\n color: var(--color-danger);\n background-color: transparent;\n content: '\\e088';\n}\nv2-modal-wizard ul.wizard-navigation li.waiting a:before,\n.wizard-modal ul.wizard-navigation li.waiting a:before {\n background-color: var(--color-seashell);\n}\nv2-modal-wizard .steps,\n.wizard-modal .steps {\n overflow-y: auto;\n overflow-x: hidden;\n clear: both;\n max-height: calc(100vh - 215px);\n}\nv2-modal-wizard .steps .wizard-subheading,\n.wizard-modal .steps .wizard-subheading {\n padding: 0;\n margin-bottom: 10px;\n}\nv2-modal-wizard .steps .wizard-subheading h4,\n.wizard-modal .steps .wizard-subheading h4 {\n padding: 10px;\n margin-bottom: 0;\n color: var(--color-primary);\n background-color: var(--color-accent-g2);\n}\n@media (max-width: 992px) {\n v2-modal-wizard .steps .wizard-subheading h4,\n .wizard-modal .steps .wizard-subheading h4 {\n padding-left: 0;\n }\n v2-modal-wizard .steps .wizard-subheading h4:before,\n .wizard-modal .steps .wizard-subheading h4:before {\n display: inline-block;\n margin: 0 10px;\n width: 14px;\n height: 14px;\n border-radius: 100%;\n background-color: var(--color-dovegray);\n content: '';\n transition: 0.25s;\n font-size: 15px;\n }\n v2-modal-wizard .steps .wizard-subheading h4.done:before,\n .wizard-modal .steps .wizard-subheading h4.done:before {\n background-color: var(--color-success);\n }\n v2-modal-wizard .steps .wizard-subheading h4.dirty:before,\n .wizard-modal .steps .wizard-subheading h4.dirty:before {\n color: var(--color-danger);\n background-color: transparent;\n content: '\\e088';\n font-family: 'Glyphicons Halflings';\n }\n v2-modal-wizard .steps .wizard-subheading h4.waiting:before,\n .wizard-modal .steps .wizard-subheading h4.waiting:before {\n background-color: var(--color-seashell);\n }\n}\nv2-modal-wizard .steps .wizard-page-body,\n.wizard-modal .steps .wizard-page-body {\n padding: 10px 0 20px;\n}\n");class $c{constructor(e){this.$scope=e,this.wizard=Ic}$onInit(){this.$scope.$on("waypoints-changed",((e,t)=>{t.lastWindow.map((e=>e.elem)).filter((e=>Ic.getPage(e))).reverse().forEach((e=>{Ic.setCurrentPage(Ic.getPage(e),!0)}))})),Ic.setHeading(this.heading)}$onDestroy(){Ic.resetWizard()}}$c.$inject=["$scope"];const Hc={bindings:{heading:"@",taskMonitor:"<",dismiss:"&"},transclude:!0,templateUrl:"core/src/modal/wizard/v2modalWizard.component.html",controller:$c},Vc="spinnaker.core.modal.wizard.wizard.component";n(Vc,["spinnaker.core.modal.wizard.wizardPage.component"]).component("v2ModalWizard",Hc),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/modal/wizard/v2modalWizard.component.html",'<div modal-page>\n <task-monitor ng-if="$ctrl.taskMonitor" monitor="$ctrl.taskMonitor"></task-monitor>\n <modal-close dismiss="$ctrl.dismiss()"></modal-close>\n <div class="modal-header" ng-if="$ctrl.wizard.heading">\n <h4 class="modal-title">{{ $ctrl.wizard.heading }}</h4>\n </div>\n <div ng-class="{ \'modal-body\': !$ctrl.notReallyModal }">\n <div class="row">\n <div class="col-md-3 hidden-sm hidden-xs">\n <ul class="steps-indicator wizard-navigation">\n <li\n ng-repeat="page in $ctrl.wizard.renderedPages"\n ng-class="{\n default: !page.state.done,\n current: page.state.current,\n done: page.state.done,\n dirty: page.state.dirty\n }"\n >\n <a href ng-click="$ctrl.wizard.setCurrentPage(page)">{{ page.label }}</a>\n </li>\n </ul>\n </div>\n <div class="col-md-9 col-sm-12">\n <div\n class="steps"\n ng-transclude\n sticky-headers\n waypoint-container\n waypoint-offset="120"\n waypoint-container-key="#modal-wizard"\n ></div>\n </div>\n </div>\n </div>\n</div>\n')}]);class Jc extends ot.Component{constructor(e){super(e),this.tooltipTemplate=ot.createElement("span",null,ot.createElement("p",null,"Task not completing?"),ot.createElement("p",null,"By default, Spinnaker does not consider cloud provider health (i.e. whether your instances have launched and are running) as a reliable indicator of instance health."),ot.createElement("p",null,"If your instances do not provide a health indicator known to Spinnaker (e.g. a discovery service or load balancers), you should configure your application to consider only cloud provider health when executing tasks. This option is available under Application Attributes in the ",ot.createElement("b",null,"Config tab"),"."));let t=!1;const n=e.task.getValueFor("lastCapacityCheck");if(n){const a=n.up+n.down+n.outOfService+n.unknown+n.succeeded+n.failed;t=e.task.execution.stages.some((t=>("cloneServerGroup"===t.type||"createServerGroup"===t.type)&&t.tasks.some((t=>t.startTime===e.step.startTime))))&&"waitForUpInstances"===e.step.name&&e.step.runningTimeInMs>bn.fromObject({minutes:5}).as("milliseconds")&&n.unknown>0&&n.unknown===a&&!m(e.application,"attributes.platformHealthOnly")}this.state={showMessage:t}}render(){return this.state.showMessage?ot.createElement(Ps,{template:this.tooltipTemplate},ot.createElement("i",{className:"fa fa-exclamation-circle",style:{fontSize:"smaller"}})):null}}class Wc{static addRunningTime(e){const t=Object.getOwnPropertyDescriptor(e,"runningTime");t&&!t.enumerable||Object.defineProperties(e,{runningTimeInMs:{get:this.calculateRunningTime(e)}})}static shouldReplace(e,t){return(u(e)||""===e)&&!(u(t)||""===t)}static defineProperties(e){const t=Object.getOwnPropertyDescriptor(e,"runningTime");t&&!t.enumerable||(e.getValueFor=t=>{var n;if(e.context)return e.context[t];if(!e.variables)return null;const a=e.variables.find((e=>e.key===t));if(a)return a.value;const i=null==(n=e.execution)?void 0:n.stages;if(i&&Array.isArray(i)&&i.length>0){const n=i.map((e=>e.context&&m(e.context,t))).reduce(((e,t)=>Wc.shouldReplace(e,t)?t:e),null);if(!u(n)&&""!==n)return e.variables.push({key:t,value:n}),n}return a?a.value:null},e.getDisplayUser=()=>{var t,n,a;const i=null!=(a=null==(n=null==(t=e.execution)?void 0:t.authentication)?void 0:n.user)?a:"unknown user",r=e.getValueFor("user");return null===r||r===i?i:`${r} (${i})`},e.originalStatus=e.status,Object.defineProperties(e,{failureMessage:{get:()=>this.mergeExceptions(e)},isCompleted:{get:()=>["SUCCEEDED","SKIPPED"].includes(e.status)},isRunning:{get:()=>"RUNNING"===e.status},isFailed:{get:()=>["TERMINAL","FAILED_CONTINUE","STOPPED"].includes(e.status)},isStopped:{get:()=>"STOPPED"===e.status},isActive:{get:()=>["RUNNING","SUSPENDED","NOT_STARTED","PAUSED"].includes(e.status)},hasNotStarted:{get:()=>["NOT_STARTED","BUFFERED"].includes(e.status)},isBuffered:{get:()=>"BUFFERED"===e.status},isCanceled:{get:()=>"CANCELED"===e.status},isSuspended:{get:()=>"SUSPENDED"===e.status},isPaused:{get:()=>"PAUSED"===e.status},status:{get:()=>this.normalizeStatus(e),set:t=>{e.originalStatus=t,this.normalizeStatus(e)}},runningTime:{get:()=>{const t=Date.now(),n=new Date(t-this.calculateRunningTime(e)());return vn(n,t,{includeSeconds:!0})},configurable:!0},runningTimeInMs:{get:this.calculateRunningTime(e),configurable:!0}}))}static mergeExceptions(e){const t=[this.getCustomException(e),this.getGeneralException(e),this.getOrchestrationException(e)].filter((e=>!!e));return 0===t.length?null:t.join("\n\n")}static getOrchestrationException(e){const t=e.getValueFor("kato.tasks");if(t&&t.length){const e=t.find((e=>e.status&&e.status.failed));if(!e)return null;const n=e.history,a=e.exception;if(a)return a.message;if(n&&n.length)return n[n.length-1].status}return null}static getLockFailureException(e){const t=e.getValueFor("exception");if(t){const e=t.details;if(e&&e.currentLockValue){let t,n;return"orchestration"===e.currentLockValue.type?(t="task",n=hi.$state.href("home.applications.application.tasks.taskDetails",{application:e.currentLockValue.application,taskId:e.currentLockValue.id})):(t="pipeline",n=hi.$state.href("home.applications.application.pipelines.executionDetails.execution",{application:e.currentLockValue.application,executionId:e.currentLockValue.id})),`Failed to acquire lock. An <a href="${n}">existing ${t}</a> is currently operating on the cluster.`}}return null}static getCustomException(e){const t=e.getValueFor("exception");return t&&t.exceptionType&&"LockFailureException"===t.exceptionType?this.getLockFailureException(e):null}static getGeneralException(e){var t,n,a,i;const r=e.getValueFor("exception");if(r){const e=(null!=(n=null==(t=r.details)?void 0:t.errors)?n:[]).filter((e=>!!e));return e.length?e.join("\n\n"):null!=(i=null==(a=r.details)?void 0:a.error)?i:null}return null}static calculateRunningTime(e){return()=>{if(!e.startTime)return null;const t=Math.max(Date.now(),e.startTime);return(e.endTime||t)-e.startTime}}static normalizeStatus(e){switch(e.originalStatus){case"SKIPPED":return"SKIPPED";case"COMPLETED":case"SUCCEEDED":return"SUCCEEDED";case"STARTED":case"EXECUTING":case"RUNNING":return"RUNNING";case"FAILED":case"TERMINAL":return"TERMINAL";case"STOPPED":return"STOPPED";case"SUSPENDED":case"DISABLED":return"SUSPENDED";case"NOT_STARTED":return"NOT_STARTED";case"CANCELED":return"CANCELED";case"UNKNOWN":return"UNKNOWN";case"TERMINATED":return"TERMINATED";case"PAUSED":return"PAUSED";case"FAILED_CONTINUE":return"FAILED_CONTINUE";case"BUFFERED":return"BUFFERED";default:return e.originalStatus&&Xe.warn("Unrecognized status:",e.originalStatus),e.originalStatus}}}class Kc{static getTasks(e,t=[]){return Si("/applications").path(e,"tasks").query({statuses:t.join(",")}).get().then((e=>(e.forEach((e=>this.setTaskProperties(e))),e.filter((e=>!e.getValueFor("dryRun"))))))}static getRunningTasks(e){return this.getTasks(e,this.activeStatuses)}static getTask(e){return Si("/tasks").path(e).get().then((e=>(this.setTaskProperties(e),e.execution&&(Wc.defineProperties(e.execution),e.execution.stages&&e.execution.stages.forEach((e=>Wc.defineProperties(e)))),e))).catch((t=>{Xe.warn("There was an issue retrieving taskId: ",e,t)}))}static waitUntilTaskMatches(e,t,n,a=1e3,i){const r=Ze.defer();return e?t(e)?r.resolve(e):n&&n(e)?r.reject(e):e.poller=_e((()=>{this.getTask(e.id).then((s=>{this.updateTask(e,s),null==i||i.next(),this.waitUntilTaskMatches(e,t,n,a,i).then(r.resolve,r.reject)}))}),a):r.reject(null),r.promise}static waitUntilTaskCompletes(e,t=1e3,n){return this.waitUntilTaskMatches(e,(e=>e.isCompleted),(e=>e.isFailed),t,n)}static updateTask(e,t){t&&(e.status=t.status,e.variables=t.variables,e.steps=t.steps,e.endTime=t.endTime,e.execution=t.execution,e.history=t.history)}static setTaskProperties(e){Wc.defineProperties(e),e.steps&&e.steps.length&&e.steps.forEach((e=>Wc.defineProperties(e)))}}Kc.activeStatuses=["RUNNING","SUSPENDED","NOT_STARTED"];class qc{constructor(e){this.config=e,this.statusUpdatedStream=new At,this.closeModal=e=>{try{e&&e.stopPropagation(),this.modalInstance.dismiss()}catch(e){}},this.tryToFix=()=>{this.error=null,this.onTaskRetry&&this.onTaskRetry(),this.statusUpdatedStream.next()},this.submit=e=>{this.startSubmit(),(e||this.submitMethod)().then((e=>this.handleTaskSuccess(e))).catch((e=>this.setError(e)))},this.title=e.title,this.application=e.application,this.modalInstance=e.modalInstance,this.onTaskComplete=e.onTaskComplete,this.onTaskRetry=e.onTaskRetry,this.monitorInterval=e.monitorInterval||1e3,this.submitMethod=e.submitMethod,this.modalInstance&&this.modalInstance.result.then((()=>this.onModalClose()),(()=>this.onModalClose()))}static modalInstanceEmulation(e,t){const n=Ze.defer();return n.promise.catch((()=>{})),{deferred:n,result:n.promise,close:t=>(n.resolve(t),e(t)),dismiss:a=>(n.reject(a),(t||e)(a))}}onModalClose(){this.task&&this.task.poller&&_e.cancel(this.task.poller)}startSubmit(){this.submitting=!0,this.task=null,this.error=!1,this.errorMessage=null,document.activeElement&&document.activeElement.blur(),this.statusUpdatedStream.next()}setError(e){e?(this.task=e,this.errorMessage=e.failureMessage||"There was an unknown server error."):this.errorMessage="There was an unknown server error.",this.submitting=!1,this.error=!0,this.statusUpdatedStream.next()}handleTaskComplete(){var e;null==(e=this.onTaskComplete)||e.call(this),this.statusUpdatedStream.next()}handleTaskSuccess(e){this.task=e,this.application&&this.application.getDataSource("runningTasks")&&this.application.getDataSource("runningTasks").refresh(),Kc.waitUntilTaskCompletes(e,this.monitorInterval,this.statusUpdatedStream).then((()=>this.handleTaskComplete())).catch((()=>this.setError(e))),this.statusUpdatedStream.next()}callPreconfiguredSubmit(e){this.startSubmit(),this.submitMethod(e).then((e=>this.handleTaskSuccess(e))).catch((e=>this.setError(e)))}}class Xc extends ot.Component{render(){return ot.createElement("div",{className:"row",style:{marginTop:"10px",marginBottom:"10px"}},ot.createElement("div",{className:"col-md-3 sm-label-right"},"Reason"),ot.createElement("div",{className:"col-md-7"},ot.createElement("textarea",{className:"form-control",value:this.props.reason,onChange:e=>this.props.onChange(e.target.value),"ng-model":"vm.command.reason",rows:3,placeholder:"(Optional) anything that might be helpful to explain the reason for this change; HTML is okay"})))}}const Zc=[];const _c=new class{constructor(){this.api=Si,this.plugins={sharedLibraries:{}}}addInjectable(e){Zc.push(e)}};window&&(window.spinnaker=_c),window.spinnaker=_c;n("spinnaker.core.utils.consoleDebug",[]).run(["$injector",e=>{_c.$injector=e,Zc.forEach((t=>_c[t]=e.get(t)))}]);class ep{static postTaskCommand(e){return Si("/tasks").post(e)}static cancelTask(e){return Si("/tasks").path(e,"cancel").put().then((()=>Kc.getTask(e).then((e=>Kc.waitUntilTaskMatches(e,(e=>"CANCELED"===e.status))))))}}_c.TaskWriter=ep;class tp{static executeTask(e){const t=e.application||e.project||{name:"ad-hoc"};return e.application&&e.application.name&&(e.application=e.application.name),e.project&&e.project.name&&(e.project=e.project.name),"aws"===e.job[0].providerType&&delete e.job[0].providerType,e.job.forEach((e=>e.user=ri.getAuthenticatedUser().name)),ep.postTaskCommand(e).then((e=>{const n=e.ref.split("/").pop();return t.runningTasks&&t.runningTasks.refresh&&t.runningTasks.refresh(),Kc.getTask(n)}),(e=>{var t;const n=(null==(t=e.data)?void 0:t.message)||"Sorry, no more information.",a={status:e.status,message:e.statusText,log:n,failureMessage:n};return Ze.reject(a)}))}}class np extends ot.Component{constructor(e){super(e),this.close=()=>{this.props.dismissModal()},this.submitTask=e=>{const{application:t,description:n}=this.props,a=qc.modalInstanceEmulation((e=>this.props.closeModal(e)),(e=>this.props.dismissModal(e))),i=new qc({application:t,modalInstance:a,title:n,onTaskComplete:()=>t.serverGroups.refresh()}),r=this.props.mapValuesToTask(e);r.description=this.props.description;i.submit((()=>{const e=tp.executeTask(r),t=()=>this.setState({isSubmitting:!1});return e.then(t,t),e})),this.setState({taskMonitor:i,isSubmitting:!0})},this.state={taskMonitor:null,isSubmitting:!1}}render(){const{isSubmitting:e}=this.state;return ot.createElement("div",null,ot.createElement(jc,{monitor:this.state.taskMonitor}),ot.createElement(Gs,{initialValues:this.props.initialValues,onSubmit:this.submitTask,render:t=>ot.createElement(Vn,{className:"form-horizontal"},ot.createElement(Nc,{dismiss:this.close}),ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,this.props.title)),ot.createElement(qt.Body,{className:"entity-tag-editor-modal"},ot.createElement($s,{value:po},this.props.render(t))),ot.createElement(qt.Footer,null,ot.createElement("button",{className:"btn btn-default",disabled:e,onClick:this.close,type:"button"},"Cancel"),ot.createElement(Dc,{isDisabled:!t.isValid||e,submitting:e,isFormSubmit:!0,label:"Submit"})))}))}}const{useEffect:ap,useState:ip}=ot;function rp(e){const{label:t,account:n}=e,[a,i]=ip("");if(e.account&&e.expectedValue)throw new Error("Supply either the 'account' or the 'expectedValue' prop, but not both");const r=e.expectedValue||n,s=a===r,[o,l]=ip(!0);ap((()=>{n&&Di.challengeDestructiveActions(n).then(l)}),[n]);const c=n&&!o;ap((()=>e.onValidChange(c||s)),[s,c]);const p=ot.createElement(ot.Fragment,null,"Type the name of the account (",ot.createElement("span",{className:"verification-text"},r),") to continue"),d="form-control input-sm highlight-pristine "+(s?"":"ng-invalid");return c?null:ot.createElement("div",{className:"row verification user-verification"},ot.createElement("div",{className:"col-sm-12"},ot.createElement("div",{className:"form-inline"},ot.createElement("div",{className:"form-group"},ot.createElement("div",{className:"form-control-static"},t?ot.createElement(Sr,{tag:"span",message:t}):p)," ",ot.createElement(_s,{id:"user.verification"}),ot.createElement("input",{type:"text",className:d,value:a,onChange:e=>i(e.target.value)})))))}oi(".multi-task-monitor .overlay-modal-status {\n font-size: 90%;\n}\n.multi-task-monitor ul.task-progress {\n padding-left: 0;\n}\n");const sp=({monitors:e=[],title:t,closeModal:n})=>{const[a,i]=ot.useState(e.some((e=>e.error)));return e.some((e=>e.submitting||e.error))?ot.createElement("div",{className:"overlay overlay-modal multi-task-monitor"},ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,t)),ot.createElement(qt.Body,null,ot.createElement("div",{className:"clearfix"},e.map(((e,t)=>{var n,a;return ot.createElement("div",{className:"col-md-6 overlay-modal-status",key:`${null!=(a=null==(n=e.task)?void 0:n.id)?a:t}`},ot.createElement("h4",null,e.title),ot.createElement(Gc,{monitor:e}),ot.createElement(Pc,{task:e.task,errorMessage:e.errorMessage}))})))),ot.createElement(qt.Footer,null,!a&&ot.createElement("button",{className:"btn btn-primary",onClick:n},"Close"),a&&ot.createElement(ot.Fragment,null,ot.createElement("button",{className:"btn btn-primary",onClick:()=>{e.forEach((e=>e.error=null)),i(!1)}},"Go back and try to fix this"),ot.createElement("button",{className:"btn btn-default",onClick:n},"Cancel")))):null},op=e=>{const{account:t,verificationLabel:n,textToVerify:a,taskMonitor:i,taskMonitors:r,closeModal:s,dismissModal:o}=e,{useState:l,useEffect:c}=ot,[p,d]=l(!1),[u,m]=l(!1),[g,h]=l(!t&&!n&&!a),[f,v]=l({isError:!1}),[A,E]=l(),[b,y]=l();rl((()=>o())),c((()=>{if(i&&!i.modalInstance&&(i.modalInstance=qc.modalInstanceEmulation(s,o)),null==i?void 0:i.onTaskRetry){const{onTaskRetry:e}=i;i.onTaskRetry=()=>{m(!0),d(!1),e()}}}),[i]);const C=t||n&&a,w=p||!g,x=e=>{v({isError:!0,message:e}),d(!1)},k=(i||r)&&e.askForReason||e.submitJustWithReason,B=u&&e.retryBody||e.bodyContent||f.isError||e.platformHealthOnlyShowOverride||e.askForReason||e.submitJustWithReason;return ot.createElement("div",null,ot.createElement(jc,{monitor:i}),ot.createElement(sp,{monitors:r,title:e.multiTaskTitle,closeModal:()=>o({source:"taskmonitor"})}),ot.createElement(Nc,{dismiss:()=>o({source:"header"})}),ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,e.header)),B&&ot.createElement(qt.Body,null,e.bodyContent,e.platformHealthOnlyShowOverride&&ot.createElement(Sc,{interestingHealthProviderNames:b,showHelpDetails:!0,platformHealthType:e.platformHealthType,onChange:y}),f.isError&&ot.createElement("div",{className:"alert alert-danger"},ot.createElement("h4",null,"An error occurred:"),ot.createElement("p",null,f.message||"No details provided.")),u&&e.retryBody&&ot.createElement(Sr,{message:e.retryBody}),k&&ot.createElement(Xc,{reason:A,onChange:E})),ot.createElement(qt.Footer,null,!p&&C&&ot.createElement(rp,{onValidChange:h,account:t,expectedValue:a,label:n}),ot.createElement("button",{className:"btn btn-default",type:"button",onClick:()=>o({source:"footer"})},e.cancelButtonText),ot.createElement("button",{className:"btn btn-primary",type:"button",onClick:()=>{const{submitMethod:t,submitJustWithReason:n}=e;w||(d(!0),r?r.forEach((e=>e.callPreconfiguredSubmit({reason:A}))):i?i.submit((()=>t({interestingHealthProviderNames:b,reason:A}))):n?t({reason:A}).then(s,x):t?t().then(s,x):s())},disabled:w},p&&ot.createElement(bs,{mode:"circular"}),e.buttonText)))};class lp{static confirm(e){const t={...this.defaults,...e};e.body&&(t.bodyContent=Mr(e.body));const{taskMonitorConfig:n,taskMonitorConfigs:a}=e;n&&(t.taskMonitor=new qc(n)),a&&(t.taskMonitors=a.map((e=>new qc(e))));const{promise:i,resolve:r,reject:s}=Ze.defer();return si.show(op,t).then(r,s),i.catch((()=>{})),i}}lp.defaults={buttonText:"Confirm",cancelButtonText:"Cancel"};class cp{constructor(){this.builders={}}register(e,t){this.builders[e]=t}getBuilder(e){return this.builders[e]}}class pp extends ot.Component{constructor(e){super(e),this.cancel=()=>{this.props.dismissModal()},this.selectProvider=()=>{this.props.closeModal(this.state.selectedProvider)},this.state={}}static show(e){return si.show(pp,e,{})}setProvider(e){this.setState({selectedProvider:e})}render(){const{selectedProvider:e}=this.state,{providerOptions:t}=this.props;return ot.createElement(ot.Fragment,null,ot.createElement(Nc,{dismiss:this.cancel}),ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,"Select Your Provider")),ot.createElement(qt.Body,null,ot.createElement("div",{className:"card-choices"},t.map((t=>ot.createElement("div",{className:`card vertical center middle ${e===t&&"active"}`,key:t,onClick:()=>this.setProvider(t)},Ni.hasValue(t,"logo.path")&&ot.createElement("img",{src:Ni.getValue(t,"logo.path"),alt:t,width:"100%",height:"auto"}),!Ni.hasValue(t,"logo.path")&&ot.createElement("h3",{className:"card-label"},t)))))),ot.createElement(qt.Footer,null,ot.createElement("button",{className:"btn btn-default",onClick:this.cancel},"Cancel"),ot.createElement("button",{className:"btn btn-primary",onClick:this.selectProvider,disabled:!e},"Next")))}}class dp{static selectProvider(e,t,n){return Di.applicationAccounts(e).then((a=>{let i=[];t&&(i=a.filter((e=>Ni.hasValue(e.cloudProvider,t)))),n&&(i=i.filter((t=>n(e,t,Ni.getProvider(t.cloudProvider)))));const r=f(i.filter((e=>!Ni.isDisabled(e.cloudProvider))).map((e=>(Ni.getProvider(e.cloudProvider)[t]||{}).useProvider||e.cloudProvider)));let s;return r.length>1?pp.show({providerOptions:r}):(s=1===r.length?Ze.when(r[0]):Ze.when(di.defaultProvider||"aws"),s)}))}static isDisabled(e){return Di.applicationAccounts(e).then((e=>{let t=!1;return 0===e.filter((e=>!Ni.isDisabled(e.cloudProvider))).length&&(t=!0),t}))}}class up extends ot.Component{constructor(e){super(e),this.state={label:this.getProviderLabel(e.provider)}}getProviderLabel(e){return Ni.getValue(e,"name")||e}componentWillReceiveProps(e){this.setState({label:this.getProviderLabel(e.provider)})}render(){return ot.createElement("span",null,this.state.label)}}oi(".cloud-provider-logo {\n display: inline-block;\n margin-right: 3px;\n}\n.cloud-provider-logo .icon {\n display: inline-block;\n vertical-align: sub;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-position: 50% 50%;\n mask-position: 50% 50%;\n -webkit-mask-size: cover;\n mask-size: cover;\n background-color: var(--color-success);\n}\n.cloud-provider-logo svg {\n fill: var(--color-success);\n}\n.disabled .cloud-provider-logo .icon {\n background-color: var(--color-dovegray);\n}\n.disabled .cloud-provider-logo svg {\n fill: var(--color-success);\n}\n.header-text .cloud-provider-logo {\n margin-right: 10px;\n}\n");const mp=({height:e,provider:t,showTooltip:n,width:a})=>{const[i,r]=ot.useState(void 0),s=Ni.getValue(t,"cloudProviderLogo");ot.useEffect((()=>{n&&r(Ni.getValue(t,"name")||t)}),[n]);const o=s?ot.createElement(s,{height:e,width:a}):ot.createElement("span",{className:`icon icon-${t}`,style:{height:e,width:a}});return i?ot.createElement(Ps,{value:i},o):ot.createElement("span",{className:"cloud-provider-logo"},o)};class gp{constructor(e,t){this.$injector=e,this.$q=t}hasDelegate(e,t){const n=Ni.getValue(e,t);return P(n)||C(n)&&this.$injector.has(n)}getDelegate(e,t){const n=Ni.getValue(e,t);if(C(n)&&this.$injector.has(n))return this.$injector.get(n,"providerDelegate");if(P(n))return new n(this.$q);throw new Error('No "'+t+'" service found for provider "'+e+'"')}}gp.$inject=["$injector","$q"];const hp="spinnaker.core.cloudProvider.service.delegate";n(hp,[]).service("providerServiceDelegate",gp);const fp={list:()=>Si("/jobs/preconfigured").useCache().get()},vp={BITBUCKET_FILE:/bitbucket\/file/,CUSTOM_OBJECT:/custom\/object/,DOCKER_IMAGE:/docker\/image/,EMBEDDED_BASE64:/embedded\/base64/,GCS_OBJECT:/gcs\/object/,GITHUB_FILE:/github\/file/,GIT_REPO:/git\/repo/,GITLAB_FILE:/gitlab\/file/,GCE_MACHINE_IMAGE:/gce\/image/,JENKINS_FILE:/jenkins\/file/,KUBERNETES:/kubernetes\/(.*)/,S3_OBJECT:/s3\/object/,HELM_CHART:/helm\/chart/,IVY_FILE:/ivy\/file/,MAVEN_FILE:/maven\/file/,HTTP_FILE:/http\/file/,FRONT50_PIPELINE_TEMPLATE:/front50\/pipelineTemplate/,ORACLE_OBJECT:/oracle\/object/},Ap=(...e)=>Object.keys(vp).map((e=>vp[e])).filter((t=>!e.includes(t)));class Ep extends ot.Component{constructor(e,t){if(super(e),this.onVersionChange=e=>{const t=p(this.props.artifact);t.version=e,this.props.onChange(t)},e.artifact.type!==t&&"custom-artifact"!==e.artifact.artifactAccount){const n=p(e.artifact);n.type=t,n.customKind=!1,e.onChange(n)}}}const bp=e=>e.current===e.name?ot.createElement("div",{className:"step-section-details"},e.children):null;class yp extends ot.Component{render(){const e=m(this.props.stage,"context.execution.logs");return e?ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-12"},ot.createElement("div",{className:"well alert alert-info"},ot.createElement("a",{target:"_blank",href:e},"View Execution Logs")))):null}}class Cp{static observe(e){return this.message$.pipe(Tt((t=>t.key===e)),St((e=>e.payload)))}static publish(e,t){this.message$.next({key:e,payload:t})}}Cp.message$=new At;var wp,xp=Object.defineProperty,kp=Object.getOwnPropertyDescriptor;(wp||(wp={})).NO_REASON_PROVIDED="No reason provided.";let Bp=class extends ot.Component{constructor(e){super(e),this.state=this.getState(e)}getState(e){const{stage:t}=e;if(t&&(t.isFailed||t.isStopped)){const n=(t.tasks||[]).find((e=>"TERMINAL"===e.status||"STOPPED"===e.status));let a,i,r=t.name;if(!n||!e.message&&0===e.messages.length){const e=m(t.context,"exception.source");if(e)r=e.stageName,a=e.executionId,i=e.stageId;else if(t.after){const e=t.after.find((e=>"TERMINAL"===e.status||"STOPPED"===e.status));e&&(r=yr(e.name),i=e.id)}}return{isFailed:!0,failedTask:n,failedExecutionId:a,failedStageName:r,failedStageId:i}}return{failedTask:void 0,isFailed:!1}}componentWillReceiveProps(e){this.setState(this.getState(e))}render(){var e,t;const{message:n,messages:a,stage:i}=this.props,{isFailed:r,failedTask:s,failedExecutionId:o,failedStageName:l,failedStageId:c}=this.state;let p=n&&!a.length?[n]:a;if(p.length>0){const d=r?a.length?"Exceptions":"Exception":"Warning";if((r&&!(null==(e=i.context)?void 0:e.failOnFailedExpressions)||(null==(t=i.context)?void 0:t.skipExpressionEvaluation))&&(p=p.filter((e=>!e.startsWith("Failed to evaluate"))),0===p.length))return null;const u=p.map(((e,t)=>ot.createElement(Sr,{key:t,message:e||wp.NO_REASON_PROVIDED,className:"break-word"})));if(u)return ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-12"},ot.createElement("div",{className:"alert "+("Warning"===d?"alert-warning":"alert-danger")},ot.createElement("div",null,ot.createElement("h5",null,d," ",s&&ot.createElement("span",null,"( ",yr(s.name)," )")),u,ot.createElement(Qc,{errorMessage:n||a.join(",")})))));if(void 0!==c){const e=hi.$state.current,t={stageId:c};return void 0!==o&&(t.executionId=o),ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-12"},ot.createElement("div",{className:"alert alert-danger"},ot.createElement("div",null,"Stage"," ",ot.createElement(Dn,{to:e.name,params:t},ot.createElement("a",null,l))," ","failed."))))}Cp.publish("stage-failure-message:no-reason",{params:{...hi.$state.params}})}return null}};function Sp(e){const{action:t,stage:n}=e;return ot.createElement(bp,{name:e.name,current:e.current},ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-9"},ot.createElement("dl",{className:"dl-narrow dl-horizontal"},ot.createElement("dt",null,"Account"),ot.createElement("dd",null,ot.createElement(ns,{account:n.context.credentials})),ot.createElement("dt",null,"Region"),ot.createElement("dd",null,n.context.region),ot.createElement("dt",null,"Server Group"),ot.createElement("dd",null,n.context.serverGroupName)))),ot.createElement(Bp,{stage:n,message:n.failureMessage}),n.isCompleted&&n.context.serverGroupName&&ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-12"},ot.createElement("div",{className:"well alert alert-info"},ot.createElement("strong",null,t,": "),n.context.serverGroupName))),ot.createElement(yp,{stage:n}))}Bp.defaultProps={messages:[]},Bp=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?kp(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&xp(t,n,r),r})([na],Bp);const Mp=[{key:"sunday",label:"Sun",ordinal:1},{key:"monday",label:"Mon",ordinal:2},{key:"tuesday",label:"Tue",ordinal:3},{key:"wednesday",label:"Wed",ordinal:4},{key:"thursday",label:"Thu",ordinal:5},{key:"friday",label:"Fri",ordinal:6},{key:"saturday",label:"Sat",ordinal:7}],Np="The pipeline will proceed immediately, continuing to the next step in the stage.";class Dp extends ot.Component{constructor(e){var t;super(e),this.finishWaiting=e=>{const{executionService:t}=hi;e.target.blur();const{application:n,execution:a,stage:i}=this.props,r=e=>"RUNNING"!==e.stages.find((e=>e.id===i.id)).status,s={skipRemainingWait:!0};lp.confirm({header:"Really skip execution window?",buttonText:"Skip",body:i.context.skipWindowText||`<p>${Np}</p>`,submitMethod:()=>t.patchExecution(a.id,i.id,s).then((()=>t.waitUntilExecutionMatches(a.id,r))).then((e=>t.updateExecution(n,e)))})};const n=null==(t=e.stage.context.restrictedExecutionWindow)?void 0:t.days;let a="Everyday";n&&n.length>0&&(a=this.replaceDays(n).join(", ")),this.state={dayText:a}}replaceDays(e){const t=new Set(e);return Mp.filter((e=>t.has(e.ordinal))).map((e=>e.label))}render(){const{stage:e}=this.props;return ot.createElement("div",null,ot.createElement("h5",null,"Execution Windows Configuration"),ot.createElement("strong",null,"Stage execution can only run:"),ot.createElement("dl",{className:"dl-narrow dl-horizontal"},m(e,"context.restrictedExecutionWindow.whitelist",[]).map(((e,t)=>ot.createElement("div",{key:t},ot.createElement("dt",null,"From"),ot.createElement("dd",null,or({hours:e.startHour,minutes:e.startMin}),ot.createElement("strong",{style:{display:"inline-block",margin:"0 5px"}}," to "),or({hours:e.endHour,minutes:e.endMin}),ot.createElement("strong",null," ",ot.createElement(tr,null)," "))))),ot.createElement("dt",null,"On"),ot.createElement("dd",null,this.state.dayText)),e.context.skipRemainingWait&&ot.createElement("div",null,ot.createElement("span",null,"(skipped "),e.context.lastModifiedBy&&ot.createElement("span",null," by ",e.context.lastModifiedBy),")"),e.isSuspended&&ot.createElement("div",{className:"action-buttons"},ot.createElement("button",{className:"btn btn-xs btn-primary",onClick:this.finishWaiting},ot.createElement("span",{style:{marginRight:"5px"},className:"small glyphicon glyphicon-fast-forward"}),"Skip remaining window")))}}const Ip=({stage:e,execution:t,application:n})=>{const{conditions:a}=e.outputs;return ot.createElement("div",null,ot.createElement("div",null,a&&a.length>0&&ot.createElement("ul",{className:"nostyle",style:{marginBottom:"10px"}},a.map((({name:e,description:t},n)=>ot.createElement("li",{key:e+n},ot.createElement("b",null,e),": ",t)))),"SKIPPED"===e.context.status&&ot.createElement("span",null,"(skipped after ",ar(e.runningTimeInMs),")")),e.isSuspended&&ot.createElement("div",{className:"action-buttons"},ot.createElement("button",{className:"btn btn-xs btn-primary",onClick:a=>((e,t,n,a)=>{const{executionService:i}=hi;e.target.blur();const r=({stages:e})=>"RUNNING"!==e.find((e=>e.id===t.id)).status,s={status:"SKIPPED"};lp.confirm({header:"Really skip wait?",buttonText:"Skip",body:t.context.skipWaitText||"The pipeline will proceed immediately, marking this stage completed.",submitMethod:()=>i.patchExecution(n.id,t.id,s).then((()=>i.waitUntilExecutionMatches(n.id,r))).then((e=>i.updateExecution(a,e)))})})(a,e,t,n)},ot.createElement("span",{style:{marginRight:"5px"},className:"small glyphicon glyphicon-fast-forward"}),"Skip remaining wait")))};class Fp extends ot.Component{constructor(e){super(e),this.mounted=!1,this.hydrate=()=>{const{application:e,execution:t}=this.props;this.requiresHydration()&&t&&hi.executionService.hydrate(e,t).then((()=>{this.mounted&&!this.state.hydrated&&this.setState({hydrated:!0})}))},this.requiresHydration=()=>{const{stage:e}=this.props,{suspendedStageTypes:t}=e;return e.labelComponent!==Fp||["restrictExecutionDuringTimeWindow","waitForCondition"].some((e=>t.has(e)))},this.DefaultLabel=()=>{const{stage:e,application:t,execution:n}=this.props,a=e.labelComponent,i=ot.createElement(Zt,{id:e.id},ot.createElement(a,{application:t,execution:n,stage:e}));return ot.createElement(Xt,{placement:"top",overlay:i},this.props.children)},this.getExecutionWindowTemplate=()=>{const{stage:e,application:t,execution:n}=this.props,a=e.stages.find((e=>"restrictExecutionDuringTimeWindow"===e.type));return ot.createElement("div",null,ot.createElement("div",null,ot.createElement("b",null,e.name)," (waiting for execution window)"),ot.createElement(Dp,{application:t,execution:n,stage:a}))},this.getWaitForConditionTemplate=()=>{const{stage:e,application:t,execution:n}=this.props,a=e.stages.find((e=>"waitForCondition"===e.type));return ot.createElement("div",null,ot.createElement("p",null,ot.createElement("b",null,e.name)," (waiting until conditions are met)"),"Conditions:",ot.createElement(Ip,{application:t,execution:n,stage:a}))},this.state={hydrated:e.execution&&e.execution.hydrated}}componentDidMount(){this.mounted=!0}componentWillUnmount(){this.mounted=!1}getRenderableStageName(){const{stage:e}=this.props;let t=e.name?e.name:e.type;const n=hi.$uiRouter.globals.params;if("group"===e.type&&e.groupStages&&e.index===Number(n.stage)){const a=Number(n.subStage);if(!Number.isNaN(a)){const n=e.groupStages[a];n&&(t+=`: ${n.name}`)}}return t}render(){const{stage:e,executionMarker:t}=this.props,{suspendedStageTypes:n}=e,{getExecutionWindowTemplate:a,getWaitForConditionTemplate:i,DefaultLabel:r}=this;if(t){let e=null;return this.requiresHydration()&&!this.state.hydrated?e=ot.createElement(bs,{size:"small"}):n.has("restrictExecutionDuringTimeWindow")?e=a():n.has("waitForCondition")&&(e=i()),e?ot.createElement("span",{onMouseEnter:this.hydrate},ot.createElement(qs,{template:e},this.props.children)):ot.createElement(r,null)}return ot.createElement("span",null,this.getRenderableStageName())}}const Tp=["RUNNING","SUSPENDED"];class Qp{constructor(e,t){this.item=e,this.updateCallback=t,this.checkStatus()}checkStatus(e=this.item){e&&e!==this.item&&(this.item=e),Tp.includes(this.item.status)||(this.reset(),this.updateCallback(this.item.runningTimeInMs)),Tp.includes(this.item.status)&&!this.updateInterval&&(this.updateInterval=setInterval((()=>this.updateCallback(Date.now()-this.item.startTime)),1e3),this.updateCallback(Date.now()-this.item.startTime))}reset(){this.updateInterval&&(clearInterval(this.updateInterval),this.updateInterval=void 0)}}class Pp extends ot.Component{componentWillUnmount(){this.runningTime&&this.runningTime.reset()}componentDidMount(){const{item:e}=this.props,t=(e.tasks||[]).find((e=>"RUNNING"===e.status));t&&(this.runningTime=new Qp(t,(e=>this.setState({runningTimeInMs:e}))))}render(){const{item:e}=this.props;return ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-9"},ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-9"},ot.createElement("strong",null,"Task")),ot.createElement("div",{className:"col-md-3 text-right"},ot.createElement("strong",null,"Duration"))),Uc(e.tasks||[]).map(((e,t)=>ot.createElement("div",{key:t,className:"row"},ot.createElement("div",{className:"col-md-9"},ot.createElement("span",{className:"small"},ot.createElement(Rc,{item:e}))," ",yr(e.name)),ot.createElement("div",{className:"col-md-3 text-right"},ar(e.runningTimeInMs)))))))}}function Rp(e){return ot.createElement(bp,{name:e.name,current:e.current},ot.createElement(Pp,{item:e.stage}))}(Rp||(Rp={})).title="taskStatus";const Up=({stage:e})=>e.isSuspended||e.suspendedStageTypes.size>0?ot.createElement("span",{className:"far fa-clock sp-margin-xs-right"}):null,zp=e=>ot.createElement("div",{className:null!=e.groupClassName?e.groupClassName:"form-group"},ot.createElement("label",{className:`col-md-${e.labelColumns||3} sm-label-right`},ot.createElement("span",{className:"label-text"},e.label," "),e.helpKey&&ot.createElement(_s,{id:e.helpKey})),ot.createElement("div",{className:`col-md-${e.fieldColumns||8}`},e.children)),Gp=(e,t)=>{const n=e.stages.filter((e=>e.type===t&&"RUNNING"===e.status));if(n.forEach((e=>{e.status="SUSPENDED",e.tasks.forEach((function(e){e.status="SUSPENDED"}))})),n.length>0&&"RUNNING"===e.status){e.stages.some((e=>"RUNNING"===e.status))||(e.status="SUSPENDED")}};class jp{static convertJsonKeysToBracketedList(e,t=[]){const n=[],a=[],i=[];for(n.push(e);0!==n.length;){const e=n.pop(),r=Object.keys(e),s=i.pop()||"";this.processKeys(r,e,i,s,n,a,t)}return a}static escapeForRegEx(e){return e?e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"):null}static processKeys(e,t,n,a,i,r,s){e.forEach((e=>{const o=isFinite(parseInt(e,10))?`${a}[${parseInt(e,10)}]`:`${a}['${e}']`,l=t[e];j(l)||Array.isArray(l)||s.some((e=>{const t=`['${e}`;return o.substr(0,t.length)===t}))||r.push({leaf:o,value:l}),j(t[e])&&(n.push(o),i.push(t[e]))}))}}class Lp{constructor(e,t){this.$q=e,this.executionService=t,this.executionCache={},this.brackets=[{open:"(",close:")"},{open:"[",close:"]"}],this.quotes=[{open:"'",close:"'"},{open:'"',close:'"'}],this.helperFunctions=["alphanumerical","readJson","fromUrl","propertiesFromUrl","jsonFromUrl","judgment","stage","toBoolean","toFloat","toInt","toJson","toBase64","fromBase64","cfServiceKey"],this.helperParams=["execution","parameters","trigger","scmInfo","scmInfo.sha1","scmInfo.branch","deployedServerGroups"],this.codedHelperParams=this.helperParams.map((e=>({name:e,type:"param"}))),this.textcompleteConfig=[{id:"SpEL wrapper",match:/\$(\w*)$/,search:function(e,t){t(["${...}"])},index:1,replace:function(){return["${ "," }"]}},{id:"match quotes",match:/(["'])(\w*)$/,index:1,search:(e,t)=>{t(this.quotes.filter((t=>0===t.open.indexOf(e))))},template:function(){return"'...'"},replace:function(){return["'","'"]}},{id:"match brackets",match:/([[('])(\w*)$/,index:1,search:(e,t)=>{t(this.brackets.filter((t=>0===t.open.indexOf(e))))},template:e=>`${e.open}...${e.close}`,replace:e=>[`${e.open} `,` ${e.close}`]}]}paramInList(e){return t=>e.name===t.name}addToTextcompleteConfig(e,t){const n=t.slice(0);for(const a of e)0===t.filter((e=>e.id===a.id)).length&&n.push(a);return n}listSearchFn(e){return(t,n)=>{n(e.filter((e=>{if(e.leaf.includes(t))return e})))}}leafTemplateFn(e){return`${e.leaf} <span class="glyphicon glyphicon-triangle-right spel-value-separator"/> <span class="marker value"\n title="${e.value}">${e.value.length>90?`${e.value.slice(0,90)}...`:e.value}</span>`}addExecutionForAutocomplete(e,t){if(e){const n=jp.convertJsonKeysToBracketedList(e,["task"]),a=[{id:`execution: ${e.id}`,match:/execution(\w*|\s*)$/,index:1,search:this.listSearchFn(n),template:this.leafTemplateFn,replace:e=>`execution${e.leaf}`}];return this.addToTextcompleteConfig(a,t)}return t}addDeployedServerGroupsForAutoComplete(e,t){if(e&&e.context&&e.context.deploymentDetails){const n=jp.convertJsonKeysToBracketedList(e.context.deploymentDetails),a=[{id:`deploymentServerGroups: ${e.id}`,match:/deployedServerGroups(\w*|\s*)$/,index:1,search:this.listSearchFn(n),template:this.leafTemplateFn,replace:e=>`deployedServerGroups${e.leaf}`}];return this.addToTextcompleteConfig(a,t)}return t}addStageDataForAutocomplete(e,t){if(e&&e.stages){const n=e.stages.map((e=>{const t=jp.convertJsonKeysToBracketedList(e,["task"]);return{id:`stage config for ${e.name}`,match:new RegExp(`#stage\\(\\s*'${jp.escapeForRegEx(e.name)}'\\s*\\)(.*)$`),index:1,search:this.listSearchFn(t),template:this.leafTemplateFn,replace:t=>`#stage('${e.name}')${t.leaf}`}}));return this.addToTextcompleteConfig(n,t)}return t}addManualJudgementConfigForAutocomplete(e,t){if(e&&e.stages){const n=e.stages.filter((e=>"manualJudgment"===e.type)).map((e=>{const t=jp.convertJsonKeysToBracketedList(e);return{id:`judgement config for ${e.name}`,match:new RegExp(`#judgment\\(\\s*'\\s*${jp.escapeForRegEx(e.name)}'\\s*\\)(.*)$`),index:1,search:this.listSearchFn(t),template:this.leafTemplateFn,replace:t=>`#judgement('${e.name}')${t.leaf}`}}));return this.addToTextcompleteConfig(n,t)}return t}addTriggerConfigForAutocomplete(e,t){if(e&&e.trigger){const n=[e.trigger].map((e=>{const t=jp.convertJsonKeysToBracketedList(e);return{id:`trigger config: ${e.type}`,match:/trigger(\w*|\s*)$/,index:1,search:this.listSearchFn(t),template:this.leafTemplateFn,replace:e=>`trigger${e.leaf}`}}));return this.addToTextcompleteConfig(n,t)}return t}addParameterConfigForAutocomplete(e,t){if(e&&e.parameterConfig){const n=[e.parameterConfig].map((e=>{const t=jp.convertJsonKeysToBracketedList(e);return{id:`parameter config: ${Object.keys(e).join(",")}`,match:/parameters(\w*|\s*)$/,index:1,search:this.listSearchFn(t),template:this.leafTemplateFn,replace:e=>`parameters${e.leaf}`}}));return this.addToTextcompleteConfig(n,t)}return t}hasBuildTriggerOrStage(e,...t){return t.some((t=>e.triggers&&e.triggers.some((e=>e.type===t))||e.stages.some((e=>e.type===t))))}addStageNamesToCodeHelperList(e,t){if(e&&e.stages){let n=this.codedHelperParams.slice(0);const a=e.parameterConfig&&e.parameterConfig.length;n=a?n:n.filter((e=>"parameters"!==e.name)),n=this.hasBuildTriggerOrStage(e,"jenkins","concourse")?n:n.filter((e=>!e.name.includes("scmInfo"))),e.stages.forEach((e=>{const t={name:e.name,type:e.type};0===n.filter(this.paramInList(t)).length&&n.push({name:e.name,type:"stage"})}));const i=[{id:"params",match:/(\s*|\w*)\?(\s*|\w*|')$/,index:2,search:(e,t)=>{t(n.filter((t=>t.name.includes(e)||t.type.includes(e))))},template:e=>`<span class="marker ${e.type}"/> ${e.name}`,replace:e=>`${e.name}`}];return this.addToTextcompleteConfig(i,t)}return t}addHelperFunctionsBasedOnStages(e,t){if(e&&e.stages){let n=this.helperFunctions.slice(0);e.stages.some((e=>"manualJudgment"===e.type))||(n=this.helperFunctions.filter((e=>"judgment"!==e)));e.stages.some((e=>"createServiceKey"===e.type))||(n=this.helperFunctions.filter((e=>"cfServiceKey"!==e)));const a=[{id:"helper functions",match:/#([\w.]*)$/,index:1,search:(e,t)=>{t(n.filter((t=>t.startsWith(e))))},template:e=>`<span class="marker function"/> #${e}`,replace:e=>"toJson"===e?[`#${e}(`,")"]:[`#${e}( '`,"' )"]}];return this.addToTextcompleteConfig(a,t)}return t}getLastExecutionByPipelineConfig(e){return this.executionCache[e.id]?this.$q.when(this.executionCache[e.id]):this.executionService.getLastExecutionForApplicationByConfigId(e.application,e.id).then((t=>t?(this.executionCache[e.id]=t,t):null))}buildTextCompleteConfig(e){return this.addStageNamesToCodeHelperList(e,this.addStageDataForAutocomplete(e,this.addManualJudgementConfigForAutocomplete(e,this.addTriggerConfigForAutocomplete(e,this.addParameterConfigForAutocomplete(e,this.addHelperFunctionsBasedOnStages(e,this.addExecutionForAutocomplete(e,this.addDeployedServerGroupsForAutoComplete(e,this.textcompleteConfig.slice(0)))))))))}addPipelineInfo(e){return e&&e.id?this.getLastExecutionByPipelineConfig(e).then((t=>t||e)).then((e=>this.buildTextCompleteConfig(e))):this.$q.when(this.textcompleteConfig)}}const Op=class{static addDeploymentTargets(e){const t=[];e.stages.forEach((e=>{const n=$m.pipeline.getStageConfig(e);n&&n.accountExtractor&&t.push(...n.accountExtractor(e))})),e.deploymentTargets=f(t).filter((e=>!!e)).sort()}static siblingStageSorter(e,t){return e.startTime||t.startTime?e.startTime?t.startTime?e.startTime-t.startTime:-1:1:0}static flattenStages(e,t){const n=t;return n.groupStages?(n.groupStages.forEach((t=>this.flattenStages(e,t))),e):(t.before&&t.before.length&&(t.before.sort(((e,t)=>this.siblingStageSorter(e,t))),t.before.forEach((t=>this.flattenStages(e,t)))),t.masterStage?e.push(t.masterStage):e.push(t),t.after&&t.after.length&&(t.after.sort(((e,t)=>this.siblingStageSorter(e,t))),t.after.forEach((t=>this.flattenStages(e,t)))),e)}static flattenAndFilter(e){return this.flattenStages([],e).filter((e=>e.isFailed||!this.hiddenStageTypes.includes(e.type)&&!0!==e.initializationStage))}static getCurrentStages(e){const t=e.stageSummaries.filter((e=>e.isRunning));if(!t.length){const n=e.stageSummaries.find((e=>e.hasNotStarted));n&&t.push(n)}return t}static setMasterStageStartTime(e,t){const n=e.filter((e=>e.startTime)).map((e=>e.startTime));n.length&&(t.startTime=Math.min(...n))}static getCurrentStage(e){const t=e[e.length-1],n=L(e,(e=>e.hasNotStarted)),a=L(e,(e=>e.isFailed)),i=L(e,(e=>e.isRunning)),r=L(e,(e=>e.isCanceled)),s=L(e,(e=>e.isStopped));return i||a||s||r||n||t}static cleanupLockStages(e){const t=(e,t)=>{let n=!1;return t.filter((t=>{if(t.type===e){if(n)return!1;n=!0}return!0}))};return t("releaseLock",t("acquireLock",e).reverse()).reverse()}static transformStage(e){const t=this.cleanupLockStages(this.flattenAndFilter(e));if(t.length){if(e.masterStage){this.setMasterStageStartTime(t,e);const n=this.getCurrentStage(t);e.status=n.status,n.endTime||delete e.endTime;const a=O(t,"endTime");n.endTime&&a.endTime&&(e.endTime=Math.max(n.endTime,a.endTime,e.endTime))}e.stages=t}}static cleanRequisiteStageRefIds(e,t){const{stages:n}=e;n.forEach((e=>{e.context&&e.context.requisiteIds&&(e.context.requisiteIds=f(e.context.requisiteIds)),e.requisiteStageRefIds=f(e.requisiteStageRefIds||[]),e.requisiteStageRefIds=e.requisiteStageRefIds.filter((e=>!!t[e]))}))}static getStagesMappedByRefId(e){const t={};return e.stages.forEach((e=>t[e.refId]=e)),t}static applyPhasesAndLink(e,t){const n=e.stages;let a=!0;n.forEach((e=>{let n=!0,i=0;void 0!==e.phase||e.requisiteStageRefIds.length?(e.requisiteStageRefIds.forEach((e=>{const a=t[e];a&&void 0!==a.phase?i=Math.max(i,a.phase):n=!1})),n?e.phase=i+1:a=!1):e.phase=i})),e.stages=Y(n,"phase","refId"),a||this.applyPhasesAndLink(e,t)}static addStageWidths(e){e.stageWidth=100/e.stageSummaries.length+"%"}static styleStage(e,t){t=t||e;const n=$m.pipeline.getStageConfig(t);n&&(e.labelComponent=n.executionLabelComponent||Fp,e.markerIcon=n.markerIcon||Up,e.useCustomTooltip=!!n.useCustomTooltip,e.extraLabelLines=n.extraLabelLines)}static findNearestBuildInfo(e){return H(e,"trigger.buildInfo.number")?e.trigger.buildInfo:H(e,"trigger.parentExecution")?this.findNearestBuildInfo(e.trigger.parentExecution):null}static addBuildInfo(e){e.buildInfo=this.findNearestBuildInfo(e),H(e,"trigger.buildInfo.lastBuild.number")&&(e.buildInfo=e.trigger.buildInfo.lastBuild);const t=e.stages.find((e=>"deploy"===e.type)),n=m(t,"context.deploymentDetails")||m(e,"context.deploymentDetails");if(n&&n.length&&n[0].jenkins){const t=n[0].jenkins;e.buildInfo={number:t.number,url:n[0].buildInfoUrl||`${t.host}job/${t.name}/${t.number}`}}}static transformStageSummary(e,t){e.index=t,e.stages=this.flattenAndFilter(e),e.stages.forEach((e=>delete e.stages)),e.masterStageIndex=e.stages.includes(e.masterStage)?e.stages.indexOf(e.masterStage):0,this.filterStages(e),this.setFirstActiveStage(e),this.setSuspendedStageTypes(e),this.transformStage(e),this.styleStage(e),Wc.defineProperties(e),"group"===e.type&&e.groupStages.forEach(((e,t)=>this.transformStageSummary(e,t)))}static filterStages(e){const t=$m.pipeline.getStageConfig(e.masterStage);t&&t.stageFilter&&(e.stages=e.stages.filter((e=>t.stageFilter(e))))}static setSuspendedStageTypes(e){e.suspendedStageTypes=new Set(e.stages.filter((({isSuspended:e})=>e)).map((({type:e})=>e)))}static setFirstActiveStage(e){e.firstActiveStage=0;const t=e.stages||[];t.find((e=>e.isRunning))&&(e.firstActiveStage=t.findIndex((e=>e.isRunning))),t.find((e=>e.isFailed))&&(e.firstActiveStage=t.findIndex((e=>e.isFailed))),t.find((e=>e.isFailed&&!!e.failureMessage))&&(e.firstActiveStage=t.findIndex((e=>e.isFailed&&!!e.failureMessage)))}static transformExecution(e,t){t.trigger&&(t.isStrategy=!1===t.trigger.isPipeline&&"pipeline"===t.trigger.type);const n=this.getStagesMappedByRefId(t);this.cleanRequisiteStageRefIds(t,n),this.applyPhasesAndLink(t,n),$m.pipeline.getExecutionTransformers().forEach((n=>{n.transform(e,t)})),t.context=t.context||{},t.stages.forEach(((e,t)=>{e.before=e.before||[],e.after=e.after||[],e.index=t,Wc.defineProperties(e),e.tasks&&e.tasks.length&&e.tasks.forEach((e=>Wc.addRunningTime(e)))})),t.stages.forEach((e=>{const n=V(t.stages,{id:e.parentStageId});n&&("STAGE_BEFORE"===e.syntheticStageOwner&&n.before.push(e),"STAGE_AFTER"===e.syntheticStageOwner&&n.after.push(e));const a=e.context||{};e.cloudProvider=a.cloudProvider||a.cloudProviderType,a.alias&&(e.alias=a.alias)})),Wc.defineProperties(t),this.processStageSummaries(t),t.graphStatusHash=Op.calculateGraphStatusHash(t)}static calculateGraphStatusHash(e){return(e.stageSummaries||[]).map((e=>{const t=$m.pipeline.getStageConfig(e);return t&&t.extraLabelLines?[t.extraLabelLines(e),e.status].join("-"):e.status})).join(":")}static calculateRunningTime(e){return()=>{if(e.groupStages.forEach((t=>{t.startTime&&t.startTime<e.startTime&&(e.startTime=t.startTime),t.endTime&&t.endTime>e.endTime&&(e.endTime=t.endTime)})),!e.startTime)return null;const t=Math.max(Date.now(),e.startTime);return(e.endTime||t)-e.startTime}}static processStageSummaries(e){let t=[];e.stages.forEach((e=>{if(!e.syntheticStageOwner&&!this.hiddenStageTypes.includes(e.type)){"RUNNING"===e.status&&e.after.some((e=>"STOPPED"===e.status))&&(e.status="STOPPED");const n=e.context||{},a={after:e.after,before:e.before,cloudProvider:e.cloudProvider,comments:n.comments||null,endTime:e.endTime,group:n.group,id:e.id,index:void 0,graphRowOverride:n.graphRowOverride||0,masterStage:e,name:e.name,refId:e.refId,requisiteStageRefIds:e.requisiteStageRefIds&&"*"===e.requisiteStageRefIds[0]?[]:e.requisiteStageRefIds||[],stages:[],startTime:e.startTime,status:e.status,type:e.type};t.push(a)}}));const n={};t=t.reduce(((e,t)=>{if(!t.group)return e.push(t),e;let a=e.find((e=>"group"===e.type&&e.name===t.group));return a||(a={activeStageType:void 0,after:void 0,before:t.before,cloudProvider:t.cloudProvider,comments:"",endTime:t.endTime,groupStages:[],id:t.group,index:void 0,masterStage:void 0,name:t.group,refId:t.group,requisiteStageRefIds:t.requisiteStageRefIds&&"*"===t.requisiteStageRefIds[0]?[]:t.requisiteStageRefIds||[],stages:[],startTime:t.startTime,status:void 0,type:"group"},e.push(a)),Wc.defineProperties(t),Object.defineProperties(a,{runningTime:{get:()=>ar(this.calculateRunningTime(a)()),configurable:!0},runningTimeInMs:{get:this.calculateRunningTime(a),configurable:!0}}),n[t.refId]=a.refId,a.groupStages.push(t),e}),[]),t.forEach(((e,a)=>{if("group"!==e.type||e.groupStages||(e.groupStages=[]),"group"===e.type)if(1===e.groupStages.length){const i=e.groupStages[0];e=i,t[a]=i,delete n[i.refId]}else if(e.groupStages.length>1){const t=[];e.groupStages.forEach((e=>{e.comments&&t.push(e.comments)})),e.after=e.groupStages[e.groupStages.length-1].after;const n=this.getCurrentStage(e.groupStages);e.activeStageType=n.type,e.status=n.status,this.styleStage(e,n),e.comments=t.join(", ")}e.requisiteStageRefIds=f(e.requisiteStageRefIds.map((e=>n[e]||e)))})),t.forEach(((e,t)=>this.transformStageSummary(e,t))),e.stageSummaries=t,e.currentStages=this.getCurrentStages(e),this.addStageWidths(e),this.addBuildInfo(e),this.addDeploymentTargets(e)}};let Yp=Op;Yp.hiddenStageTypes=["initialization","pipelineInitialization","waitForRequisiteCompletion","determineTargetServerGroup"];class $p{constructor(e){this.cacheProxy=e}setItem(e,t){try{if(e.includes(di.gateUrl)){const e=JSON.parse(t);if(e.value&&Array.isArray(e.value)&&e.value.length>2&&e.value[2]["content-type"]){const t=e.value[2]["content-type"];if(t&&!t.includes("application/json"))return}}window.localStorage.setItem(e,t),this.cacheProxy[e]=t}catch(n){console.warn("Local Storage Error! Clearing caches and trying again.\nException:",n),this.cacheProxy=Object.create(null),window.localStorage.clear(),window.localStorage.setItem(e,t)}}getItem(e){let t;return t=void 0!==this.cacheProxy[e]?this.cacheProxy[e]:window.localStorage.getItem(e),t}removeItem(e){delete this.cacheProxy[e],window.localStorage.removeItem(e)}}const Hp=class{static getStoragePrefix(e,t){return`angular-cache.caches.${e}:${t}.`}static buildCacheKey(e,t){let n;return n=e&&t?`${e}:${t}`:e||t,n}static bombCorruptedCache(e,t,n){const a=Hp.buildCacheKey(e,t),i=`${Hp.getStoragePrefix(a,n)}${a}`;window.localStorage[`${i}.keys`]&&"[]"!==window.localStorage[`${i}.keys`]||Object.keys(window.localStorage).filter((e=>e.includes(i))).forEach((e=>window.localStorage.removeItem(e)))}static clearPreviousVersions(e,t,n,a){if(n){Hp.bombCorruptedCache(e,t,n);for(let i=0;i<n;i++){const n=Hp.buildCacheKey(e,t);a.exists(n)&&a.get(n).destroy(),a.createCache(n,{storageMode:"localStorage",storagePrefix:Hp.getStoragePrefix(n,i)}),a.get(n).removeAll(),a.get(n).destroy()}}}static getStats(e){const t=e.keys();let n=Date.now(),a=0;return t.forEach((t=>{const i=e.info(t)||{};n=Math.min(n,i.created),a=Math.max(a,i.created)})),{ageMax:a||null,ageMin:n||null,keys:t.length}}static createCache(e,t,n){var a;const i=Hp.buildCacheKey(e,t),r=n.cacheFactory||this.cacheFactory,s=n.version||1;Hp.clearPreviousVersions(e,t,s,r);const o=null!=(a=n.storageMode)?a:"localStorage";r.createCache(i,{deleteOnExpire:"aggressive",maxAge:n.maxAge||bn.fromObject({days:2}).as("milliseconds"),recycleFreq:bn.fromObject({seconds:5}).as("milliseconds"),storageMode:o,storageImpl:"localStorage"===o?new $p(this.cacheProxy):null,storagePrefix:Hp.getStoragePrefix(i,s)});const l=r.get(i);return this.caches[i]=l,l.getStats=Hp.getStats.bind(null,this.caches[i]),l.config=n,l}static clearCache(e,t){this.caches[t]&&this.caches[t].destroy&&(this.caches[t].destroy(),this.createCache(e,t,this.caches[t].config))}static getCache(e=null,t=null){return this.caches[Hp.buildCacheKey(e,t)]}};let Vp=Hp;Vp.cacheFactory=new Mn,Vp.caches=Object.create(null),Vp.cacheProxy=Object.create(null);class Jp{constructor(){this.caches=Object.create(null)}createCache(e,t){return Vp.createCache(this.getNamespace(),e,t),this.caches[e]=Vp.getCache(this.getNamespace(),e),this.caches[e]}get(e){return this.caches[e]}clearCaches(){Object.keys(this.caches).forEach((e=>this.clearCache(e)))}destroyCaches(){this.caches=Object.create(null)}}const Wp=class extends Jp{getNamespace(){return Wp.NAMESPACE}clearCache(e){const t=this.caches[e];t&&t.destroy&&(t.destroy(),this.createCache(e,t.config))}};let Kp=Wp;Kp.NAMESPACE="viewStateCache";const qp=new Kp,Xp=class{static removeImmutableFields(e){Xp.immutableFields.forEach((t=>delete e[t]))}static clone(e){const t=J(e,(e=>{e&&e.$$hashKey&&delete e.$$hashKey}));return Xp.removeImmutableFields(t),t}};let Zp=Xp;var _p,ed;Zp.immutableFields=new Set(["name","application","index","id","$$hashKey"]),(ed=_p||(_p={})).Triggers="triggers",ed.Notifications="notifications",ed.ParameterConfig="parameterConfig",ed.ExpectedArtifacts="expectedArtifacts";const td=class{static createPipelineTemplate(e,t){return{id:pr.generateUuid(),metadata:{description:`A pipeline template derived from pipeline "${e.name}" in application "${e.application}"`,name:pa.random(),owner:t,scopes:["global"]},pipeline:Zp.clone(e),protect:!1,schema:td.schema,variables:[]}}static isV2PipelineConfig(e){return e.schema===td.schema}static idForTemplate(e){const{id:t,digest:n=""}=e;return`${t}:${n}`}static getTemplateVersion({digest:e,tag:t,id:n}){return e?`${n}@sha256:${e}`:t?`${n}:${t}`:n}static convertTemplateVersionToId(e){const t=e.split("@");return t.length>1?t[0]:t[0].split(":")[0]}static getPipelineTemplateConfigV2(e){return{schema:td.schema,template:{artifactAccount:"front50ArtifactCredentials",reference:this.prefixSource(e),type:"front50/pipelineTemplate"},type:"templatedPipeline"}}static prefixSource(e=""){const t="spinnaker://";return e.startsWith(t)?e:`spinnaker://${e}`}static filterInheritedConfig(e){return td.inheritedKeys.forEach((t=>{if(Array.isArray(e[t])){const n=e[t];e[t]=n.filter((e=>!e.inherited))}})),e}};let nd=td;nd.schema="v2",nd.inheritedKeys=new Set([_p.Triggers,_p.Notifications,_p.ParameterConfig,_p.ExpectedArtifacts]);const ad=class{static buildViewStateCacheKey(e,t){return`${e}:${t}`}static getPipelinesForApplication(e){return Si("/applications").path(e,"pipelineConfigs").get().then((e=>(e.forEach((e=>e.stages=e.stages||[])),this.sortPipelines(e))))}static getStrategiesForApplication(e){return Si("/applications").path(e,"strategyConfigs").get().then((e=>(e.forEach((e=>e.stages=e.stages||[])),this.sortPipelines(e))))}static getHistory(e,t,n=20){return Si(t?"strategyConfigs":"pipelineConfigs").path(e,"history").query({limit:n}).get()}static deletePipeline(e,t,n){const a=t.strategy?"strategies":"pipelines";return Si(a).path(e,n.trim()).delete()}static savePipeline(e){let t=p(e);delete t.isNew,t.name=t.name.trim(),Array.isArray(t.stages)&&t.stages.forEach((function(e){delete e.isNew,e.name||delete e.name})),nd.isV2PipelineConfig(t)&&(t=nd.filterInheritedConfig(t));const n=t.strategy?"strategies":"pipelines";return Si(n).query({staleCheck:!0}).post(t)}static reorderPipelines(e,t,n=!1){const a=n?"strategies":"pipelines";return Si("/actions").path(a,"reorder").post({application:e,idsToIndices:t})}static renamePipeline(e,t,n,a){this.configViewStateCache.remove(this.buildViewStateCacheKey(e,n)),t.name=a.trim();const i=t.strategy?"strategies":"pipelines";return Si(i).path(t.id).put(t)}static triggerPipeline(e,t,n={}){return n.user=ri.getAuthenticatedUser().name,Si("/pipelines/v2").path(e,t).post(n).then((e=>e.ref.split("/").pop()))}static getDownstreamStageIds(e,t){if(!e||!t)return[];let n=[];const a=e.get(t);return a&&a.length&&(n=n.concat(a),a.forEach((t=>{n=n.concat(ad.getDownstreamStageIds(e,t))}))),f(n)}static getDependencyCandidateStages(e,t){const n=ad.groupStagesByRequisiteStageRefIds(e),a=ad.getDownstreamStageIds(n,t.refId);return e.stages.filter((e=>t!==e&&e.requisiteStageRefIds&&!a.includes(e.refId)&&t.requisiteStageRefIds&&!t.requisiteStageRefIds.includes(e.refId)))}static groupStagesByRequisiteStageRefIds(e){return e.stages.reduce(((e,t)=>{const n=t.refId;return t.requisiteStageRefIds.forEach((t=>{const a=e.get(t);a&&a.length?a.push(n):e.set(t,[n])})),e}),new Map)}static getAllUpstreamDependencies(e,t){if(!e||!t)return[];let n=[];return t.requisiteStageRefIds&&t.requisiteStageRefIds.length&&e.stages.forEach((a=>{t.requisiteStageRefIds.includes(a.refId)&&(n.push(a),n=n.concat(this.getAllUpstreamDependencies(e,a)))})),f(n)}static sortPipelines(e){const t=Y(e,["index","name"]),n=[];return t&&t.length&&(t.forEach(((e,t)=>{e.index!==t&&(e.index=t,n.push(this.savePipeline(e)))})),n.length)?Ze.all(n).then((()=>t)):Ze.resolve(t)}};let id=ad;id.configViewStateCache=qp.createCache("pipelineConfig",{version:2});class rd{static configureFilterModel(e,t){return t.forEach((e=>e.param=e.param||e.model)),e.config=t,e.groups=[],e.tags=[],e.displayOptions={},e.sortFilter=rd.mapRouterParamsToSortFilter(e,{}),e.addTags=()=>{e.tags=[],t.filter((e=>!e.displayOption)).forEach((t=>this.addTagsForSection(e,t)))},e.clearFilters=()=>{t.forEach((function(t){t.displayOption||(e.sortFilter[t.model]=t.clearValue)}))},e.activate=()=>{},e.applyParamsToUrl=()=>{const t=rd.mapSortFilterToRouterParams(e);hi.$state.go(".",t,{location:"replace"})},e}static mapSortFilterToRouterParams(e){const{sortFilter:t,config:n}=e;return n.reduce(((e,n)=>({...e,[n.param]:t[n.model]})),{})}static mapRouterParamsToSortFilter(e,t){const n={trueKeyObject:{},string:"",boolean:!1,"inverse-boolean":!0};return e.config.reduce(((e,a)=>{const i=n[a.type],r=t[a.param],s=u(r)?i:r;return{...e,[a.model]:p(s)}}),{})}static registerRouterHooks(e,t){const{transitionService:n}=hi.$uiRouter,a=e.config.map((e=>e.param));let i={};n.onSuccess({exiting:t,retained:"**.application"},(e=>{const t=e.params("from");i=W(t,a)})),n.onBefore({entering:t,retained:"**.application"},(e=>{const t=e.params(),n=a.some((e=>!u(t[e]))),r=i,s=a.some((e=>!u(r[e])));return!n&&s?e.targetState().withParams(r):null})),n.onStart({exiting:"**.application"},(()=>{i={}})),n.onBefore({to:t},(t=>{const n=t.params();Object.assign(e.sortFilter,rd.mapRouterParamsToSortFilter(e,n))}))}static isFilterable(e){return K(e)>0&&q(e)}static getCheckValues(e){return X(e,(function(e,t,n){return t&&e.push(n),e}),[]).sort()}static checkAccountFilters(e){return t=>{if(this.isFilterable(e.sortFilter.account)){const n=this.getCheckValues(e.sortFilter.account);return Z(n,t.account)}return!0}}static checkRegionFilters(e){return t=>{if(this.isFilterable(e.sortFilter.region)){const n=this.getCheckValues(e.sortFilter.region);return Z(n,t.region)}return!0}}static checkStackFilters(e){return t=>{if(this.isFilterable(e.sortFilter.stack)){const n=this.getCheckValues(e.sortFilter.stack);return n.includes("(none)")&&(n.push(""),n.push(null),n.push(void 0)),Z(n,t.stack)}return!0}}static checkDetailFilters(e){return t=>{if(this.isFilterable(e.sortFilter.detail)){const n=this.getCheckValues(e.sortFilter.detail);return n.includes("(none)")&&(n.push(""),n.push(null),n.push(void 0)),Z(n,t.detail)}return!0}}static checkStatusFilters(e){return t=>{if(this.isFilterable(e.sortFilter.status)){const n=this.getCheckValues(e.sortFilter.status);return Z(n,"Up")&&0===t.instanceCounts.down||Z(n,"Down")&&t.instanceCounts.down>0||Z(n,"OutOfService")&&t.instanceCounts.outOfService>0||Z(n,"Starting")&&t.instanceCounts.starting>0||Z(n,"Disabled")&&t.isDisabled||Z(n,"Unknown")&&t.instanceCounts.unknown>0}return!0}}static checkProviderFilters(e){return t=>{if(this.isFilterable(e.sortFilter.providerType)){const n=this.getCheckValues(e.sortFilter.providerType);return Z(n,t.type)||Z(n,t.provider)}return!0}}static addTagsForSection(e,t){const n=t.model,a=t.filterLabel||t.model,i=t.filterTranslator||{},r=t.clearValue,s=e.tags,o=e.sortFilter[n];return"trueKeyObject"===t.type?ee(o,((t,r)=>{t&&s.push({key:n,label:a,value:i[r]||r,clear(){delete e.sortFilter[n][r],e.applyParamsToUrl()}})})):null!=o&&""!==o&&!1!==o&&s.push({key:n,label:a,value:i[o]||o,clear(){e.sortFilter[n]=r,e.applyParamsToUrl()}}),s}}const sd=e=>{const{heading:t,isCloudProvider:n,name:a,onChange:i,onChangeEvent:r,sortFilterType:s}=e;return ot.createElement("div",{className:"checkbox"},ot.createElement("label",null,ot.createElement("input",{type:"checkbox",checked:Boolean(s&&s[t]),onChange:r||(e=>{const n=e.target,a="checkbox"===n.type?n.checked:n.value;s[t]=Boolean(a),i()}),name:a}),n?ot.createElement(ot.Fragment,null,ot.createElement(mp,{provider:"heading",height:"'14px'",width:"'14px'"}),ot.createElement(up,{provider:t})):t))};oi(".filters-toggle {\n position: absolute;\n}\n.filters-toggle .filters-hidden {\n margin-top: 11px;\n}\n.filters-toggle .filters-open {\n background-color: var(--color-accent-g2);\n height: 32px;\n font-size: 16px;\n margin-top: 6px;\n}\n@media (min-width: 768px) and (max-width: 992px) {\n .filters-toggle .filters-open {\n width: 104px;\n }\n}\n@media (min-width: 992px) {\n .filters-toggle .filters-open {\n width: 124px;\n }\n}\n@media (min-width: 1200px) {\n .filters-toggle .filters-open {\n width: 154px;\n }\n}\n@media (min-width: 1400px) {\n .filters-toggle .filters-open {\n width: 184px;\n }\n}\n@media (min-width: 1600px) {\n .filters-toggle .filters-open {\n width: 214px;\n }\n}\n@media (min-width: 1800px) {\n .filters-toggle .filters-open {\n width: 224px;\n }\n}\n@media (min-width: 2000px) {\n .filters-toggle .filters-open {\n width: 254px;\n }\n}\n.filters-toggle button {\n height: 22px;\n line-height: 12px;\n}\n.filters-toggle .show-filter-text {\n border-left: 1px solid var(--color-accessory-light);\n}\n");class od extends ot.Component{constructor(){super(...arguments),this.onClick=e=>{hi.insightFilterStateModel.pinFilters(e),qe.$apply(),this.setState({})}}render(){const{filtersExpanded:e}=hi.insightFilterStateModel;return ot.createElement("div",{className:"filters-toggle layer-medium"},!e&&ot.createElement("div",{className:"filters-placeholder filters-hidden"},ot.createElement(Ps,{value:"Show filters"},ot.createElement("button",{className:"btn btn-xs btn-default pin clickable sp-padding-xs",onClick:()=>this.onClick(!0),style:{display:e?"none":"inherit"}},ot.createElement("i",{className:"fa fa-forward"}),ot.createElement("span",{className:"show-filter-text"}," Show filters")))),e&&ot.createElement("div",{className:"filters-placeholder filters-open horizontal middle"},ot.createElement(Ps,{value:"Hide filters"},ot.createElement("button",{className:"btn btn-xs btn-default unpin clickable sp-margin-s-xaxis sp-margin-2xs-yaxis sp-padding-xs",onClick:()=>this.onClick(!1),style:{display:e?"inherit":"none"}},ot.createElement("i",{className:"fa fa-backward"}))),ot.createElement("div",{className:"horizontal center flex-1 sp-margin-xl-right"},"Filters")))}}const ld={securityGroups:{version:4,storageMode:"memory"},healthChecks:{version:2},certificates:{version:2},backendServices:{version:2},addresses:{version:2}},cd=class extends Jp{getNamespace(){return cd.NAMESPACE}clearCache(e){const t=this.caches[e];t&&t.removeAll&&(t.keys()&&t.keys().forEach((e=>t.remove(e))),t.onReset&&t.onReset.forEach((e=>e())))}createCache(e,t){const n=super.createCache(e,t);return n.onReset=t.onReset,n}};let pd=cd;pd.NAMESPACE="infrastructure";const dd=new pd;class ud{static getAllEntityTagsForApplication(e){return Si("/tags").query({maxResults:di.entityTags.maxResults||5e3,application:e}).get().then((e=>this.flattenTagsAndAddMetadata(e)))}static addTagsToServerGroups(e){if(!di.feature.entityTags)return;const t=e.entityTags.data,n=t.filter((({entityRef:e})=>"servergroup"===e.entityType)),a=t.filter((({entityRef:e})=>"cluster"===e.entityType));e.serverGroups.data.forEach((e=>{e.entityTags=n.find((({entityRef:t})=>t.entityId===e.name&&t.account===e.account&&t.region===e.region)),e.clusterEntityTags=a.filter((({entityRef:t})=>!(t.entityId!==e.cluster||"*"!==t.account&&t.account!==e.account||"*"!==t.region&&t.region!==e.region)))}))}static addTagsToServerGroupManagers(e){if(!di.feature.entityTags)return;const t=e.entityTags.data.filter((({entityRef:e})=>"servergroupmanager"===e.entityType));e.serverGroupManagers.data.forEach((e=>{e.entityTags=t.find((({entityRef:t})=>t.entityId===e.name&&t.account===e.account&&t.region===e.region))}))}static addTagsToLoadBalancers(e){if(!di.feature.entityTags)return;const t=e.entityTags.data.filter((({entityRef:e})=>"loadbalancer"===e.entityType));e.loadBalancers.data.forEach((e=>{e.entityTags=t.find((({entityRef:t})=>t.entityId===e.name&&t.account===e.account&&t.region===e.region))}))}static addTagsToFunctions(e){if(!di.feature.entityTags||!di.feature.functions)return;const t=e.entityTags.data.filter((({entityRef:e})=>"function"===e.entityType));e.functions.data.forEach((e=>{e.entityTags=t.find((({entityRef:t})=>t.entityId===e.functionName&&t.account===e.account&&t.region===e.region))}))}static addTagsToSecurityGroups(e){if(!di.feature.entityTags)return;const t=e.entityTags.data.filter((({entityRef:e})=>"securitygroup"===e.entityType));e.securityGroups.data.forEach((e=>{e.entityTags=t.find((({entityRef:t})=>t.entityId===e.name&&t.account===e.account&&t.region===e.region))}))}static addTagsToExecutions(e){if(!di.feature.entityTags)return;const t=e.entityTags.data.filter((({entityRef:e})=>"execution"===e.entityType));e.executions.data.forEach((e=>{e.entityTags=t.find((({entityRef:t})=>t.entityId===e.id))}))}static addTagsToPipelines(e){if(!di.feature.entityTags)return;const t=e.entityTags.data.filter((({entityRef:e})=>"pipeline"===e.entityType));e.pipelineConfigs.data.forEach((e=>{e.entityTags=t.find((({entityRef:t})=>t.entityId===e.id))}))}static getEntityTagsForId(e,t){return t?Si("/tags").query({entityType:e.toLowerCase(),entityId:t}).get().then((e=>this.flattenTagsAndAddMetadata(e))).catch((()=>Ze.when([]))):Ze.when([])}static flattenTagsAndAddMetadata(e){const t=[];return e.forEach((e=>{e.tags.forEach((t=>this.addTagMetadata(e,t))),e.alerts=e.tags.filter((e=>e.name.startsWith("spinnaker_ui_alert:"))),e.notices=e.tags.filter((e=>e.name.startsWith("spinnaker_ui_notice:"))),e.creationMetadata=e.tags.find((e=>"spinnaker:metadata"===e.name)),t.push(e)})),t}static addTagMetadata(e,t){const n=e.tagsMetadata.find((e=>e.name===t.name));n&&(t.created=n.created,t.createdBy=n.createdBy,t.lastModified=n.lastModified,t.lastModifiedBy=n.lastModifiedBy)}}const md=class{static parseServerGroupName(e){const t={application:"",stack:"",freeFormDetails:"",cluster:""};if(!e)return t;const n=e.split("-"),a=md.VERSION_PATTERN.test(n[n.length-1]);return t.application=n[0],a&&n.pop(),n.length>1&&(t.stack=n[1]),n.length>2&&(t.freeFormDetails=n.slice(2,n.length).join("-")),t.cluster=md.getClusterNameFromServerGroupName(e),t}static parseClusterName(e){return md.parseServerGroupName(e)}static getClusterName(e,t,n){let a=e;return t&&(a+=`-${t}`),!t&&n&&(a+="-"),n&&(a+=`-${n}`),a}static getClusterNameFromServerGroupName(e){const t=e.split("-");return md.VERSION_PATTERN.test(t[t.length-1])&&t.pop(),t.join("-")}static getSequence(e){return u(e)?null:`v${b(e.toString(),3,"0")}`}static parseLoadBalancerName(e){const t=e.split("-"),n={application:t[0],stack:"",freeFormDetails:"",cluster:""};return t.length>1&&(n.stack=t[1]),t.length>2&&(n.freeFormDetails=t.slice(2,t.length).join("-")),n.cluster=md.getClusterName(n.application,n.stack,n.freeFormDetails),n}static parseSecurityGroupName(e){return md.parseLoadBalancerName(e)}static getMoniker(e,t,n){return te({app:e,stack:t,detail:n})}static getMonikerForInstance(e,t,n){return n.ready().then((()=>{const a=n.getDataSource("serverGroups").data,i=n.getDataSource("loadBalancers").data,r=i.map((e=>e.serverGroups)).reduce(((e,t)=>e.concat(t)),[]),s=[].concat(a).concat(i).concat(r).find((n=>n.cloudProvider===e&&(n.instances||[]).some((e=>e.id===t))));return s&&s.moniker}))}};let gd=md;gd.VERSION_PATTERN=/(v\d{3})/;class hd{static get DEFAULT_PAGE_SIZE(){return 500}static search(e,t=null){const n={...e,...{pageSize:hd.DEFAULT_PAGE_SIZE}};let a=Bi.one("search").query(n);return t&&(a=a.useCache(t)),a.get().then((e=>e[0]||{results:[]})).catch((e=>(Xe.error(e.data,e),{results:[]})))}}class fd{constructor(e){this.providerServiceDelegate=e}normalizeSecurityGroup(e){return this.providerServiceDelegate.getDelegate(e.provider||e.type,"securityGroup.transformer").normalizeSecurityGroup(e)}}fd.$inject=["providerServiceDelegate"];n("spinnaker.core.securityGroup.transformer.service",[hp]).service("securityGroupTransformer",fd);const vd=class{constructor(e,t,n,a){this.$log=e,this.$q=t,this.securityGroupTransformer=n,this.providerServiceDelegate=a}static indexSecurityGroups(e){const t={};return e.forEach((e=>{const n=e.account;t[n]={};const a=t[n];ee(e.securityGroups,((e,t)=>{const i={};a[t]=i,e.forEach((e=>{e.accountName=n,e.region=t,i[e.id]=e,i[e.name]=e}))}))})),t}static attachUsageFields(e){e.usages||(e.usages={loadBalancers:[],serverGroups:[]})}static sortUsages(e){e.usages&&(e.usages.serverGroups.sort(((e,t)=>t.name.localeCompare(e.name))),e.usages.loadBalancers.sort(((e,t)=>t.name.localeCompare(e.name))))}resolve(e,t,n){return this.providerServiceDelegate.getDelegate(t.provider||t.type||t.cloudProvider,"securityGroup.reader").resolveIndexedSecurityGroup(e,t,n)}addLoadBalancerSecurityGroups(e){let t=!1;const n=[];return e.getDataSource("loadBalancers").data.forEach((a=>{a.securityGroups&&a.securityGroups.forEach((i=>{try{const t=this.resolve(e.securityGroupsIndex,a,i);vd.attachUsageFields(t),t.usages.loadBalancers.some((e=>e.name===a.name))||t.usages.loadBalancers.push({name:a.name}),n.push(t)}catch(e){this.$log.warn("could not attach firewall to load balancer:",a.name,i,e),t=!0}}))})),n.forEach(vd.sortUsages),{notFoundCaught:t,securityGroups:n}}addNameBasedSecurityGroups(e,t){let n=!1;const a=[];return t.forEach((t=>{try{const n=this.resolve(e.securityGroupsIndex,t,t.id);vd.attachUsageFields(n),a.push(n)}catch(e){this.$log.warn("could not initialize application firewall:",t),n=!0}})),{notFoundCaught:n,securityGroups:a}}addServerGroupSecurityGroups(e){let t=!1;const n=new Set;e.getDataSource("serverGroups").data.forEach((a=>{a.securityGroups&&a.securityGroups.forEach((i=>{try{const t=this.resolve(e.securityGroupsIndex,a,i);if(vd.attachUsageFields(t),!t.usages.serverGroups.some((e=>e.name===a.name))){const{account:e,isDisabled:n,name:i,cloudProvider:r,region:s}=a;t.usages.serverGroups.push({account:e,isDisabled:n,name:i,cloudProvider:r,region:s})}n.add(t)}catch(e){this.$log.warn("could not attach firewall to server group:",a.name,i),t=!0}}))}));const a=Array.from(n);return a.forEach(vd.sortUsages),{notFoundCaught:t,securityGroups:a}}clearCacheAndRetryAttachingSecurityGroups(e,t){return dd.clearCache("securityGroups"),this.loadSecurityGroups().then((n=>(e.securityGroupsIndex=n,this.attachSecurityGroups(e,t,!1))))}addNamePartsToSecurityGroup(e){const t=gd.parseSecurityGroupName(e.name);e.stack=t.stack,e.detail=t.freeFormDetails,e.moniker=gd.getMoniker(t.application,t.stack,t.freeFormDetails)}attachSecurityGroups(e,t,n){let a=[],i=!1;if(t){e.getDataSource("securityGroups").data=[];const n=this.addNameBasedSecurityGroups(e,t);i=n.notFoundCaught,n.notFoundCaught||(a=n.securityGroups)}else a=e.getDataSource("securityGroups").data.filter((e=>!e.usages.serverGroups.length&&!e.usages.loadBalancers.length));if(!i){const t=this.addLoadBalancerSecurityGroups(e);if(i=t.notFoundCaught,!i){a=a.concat(t.securityGroups.filter((e=>!a.includes(e))));const n=this.addServerGroupSecurityGroups(e);i=n.notFoundCaught,i||(a=a.concat(n.securityGroups.filter((e=>!a.includes(e)))))}}return a=f(a),i&&n?(this.$log.warn("Clearing firewall cache and trying again..."),this.clearCacheAndRetryAttachingSecurityGroups(e,t)):(a.forEach((e=>this.addNamePartsToSecurityGroup(e))),this.$q.all(a.map((e=>this.securityGroupTransformer.normalizeSecurityGroup(e)))).then((()=>a)))}getAllSecurityGroups(){const e=dd.get("securityGroups"),t=e?e.get("allGroups"):null;return t?this.$q.resolve(this.decompress(p(t))):(this.getAllSecurityGroupsPromise||(this.getAllSecurityGroupsPromise=Si("/securityGroups").get().then((t=>(e&&e.put("allGroups",this.compress(t)),t))).finally((()=>{delete this.getAllSecurityGroupsPromise}))),this.getAllSecurityGroupsPromise)}compress(e){const t={};return Object.keys(e).forEach((n=>{t[n]={},Object.keys(e[n]).forEach((a=>{if(t[n][a]={},Object.keys(e[n][a]).forEach((t=>{e[n][a][t].forEach((e=>delete e.moniker))})),this.providerServiceDelegate.hasDelegate(a,"securityGroup.transformer")){const i=this.providerServiceDelegate.getDelegate(a,"securityGroup.transformer");i.supportsCompression?Object.keys(e[n][a]).forEach((r=>{t[n][a][r]=i.compress(e[n][a][r])})):t[n][a]=e[n][a]}else t[n][a]=e[n][a]}))})),t}decompress(e){return Object.keys(e).forEach((t=>{Object.keys(e[t]).forEach((n=>{if(this.providerServiceDelegate.hasDelegate(n,"securityGroup.transformer")){const a=this.providerServiceDelegate.getDelegate(n,"securityGroup.transformer");a&&a.supportsCompression&&Object.keys(e[t][n]).forEach((i=>{e[t][n][i]=a.decompress(e[t][n][i])}))}}))})),e}getApplicationSecurityGroup(e,t,n,a){let i=null;return H(e.securityGroupsIndex,[t,n,a])&&(i=e.securityGroupsIndex[t][n][a]),i}getApplicationSecurityGroups(e,t){return this.loadSecurityGroups().then((t=>{e.securityGroupsIndex=t})).then((()=>this.$q.all([e.getDataSource("serverGroups").ready(),e.getDataSource("loadBalancers").ready()]).then((()=>this.attachSecurityGroups(e,t,!0)))))}getSecurityGroupDetails(e,t,n,a,i,r){return Si("/securityGroups").path(t,a,r).query({provider:n,vpcId:i}).get().then((n=>(n&&n.inboundRules&&(n.ipRangeRules=n.inboundRules.filter((e=>e.range)),n.securityGroupRules=n.inboundRules.filter((e=>e.securityGroup)),n.securityGroupRules.forEach((t=>{const a=t.securityGroup;if(!a.name){const t=this.getApplicationSecurityGroup(e,a.accountName,n.region,a.id);t?a.name=t.name:(a.name=a.id,a.inferredName=!0)}}))),di.feature.entityTags&&e.isStandalone?ud.getEntityTagsForId("securitygroup",n.name).then((e=>(n.entityTags=e.find((e=>e.entityRef.entityId===n.name&&e.entityRef.account===t&&e.entityRef.region===a)),n))):n)))}loadSecurityGroups(){return this.getAllSecurityGroups().then((e=>{const t=[];return ee(e,((e,n)=>ee(e,((a,i)=>{ee(a,(e=>{e.forEach((e=>{e.provider=i,e.account=n}))})),t.push({account:n,provider:i,securityGroups:e[i]})})))),vd.indexSecurityGroups(t)}))}loadSecurityGroupsByApplicationName(e){return hd.search({q:e,type:"securityGroups",pageSize:1e3}).then((t=>{let n=[];return t&&t.results?n=ne(t.results,{application:e}):this.$log.warn("WARNING: Gate firewall endpoint appears to be down."),n}))}};let Ad=vd;Ad.$inject=["$log","$q","securityGroupTransformer","providerServiceDelegate"];const Ed="spinnaker.core.securityGroup.read.service";n(Ed,["spinnaker.core.securityGroup.transformer.service",hp]).service("securityGroupReader",Ad);class bd{constructor(e,t,n){this.$q=e,this.securityGroupReader=t,this.providerServiceDelegate=n,this.cacheConfig=p(ld),this.initializers={securityGroups:[()=>this.securityGroupReader.getAllSecurityGroups()]}}setConfigDefaults(e,t){t.version=t.version||1,t.maxAge=t.maxAge||bn.fromObject({days:2}).as("milliseconds"),t.initializers=t.initializers||this.initializers[e]||[],t.onReset=t.onReset||[i]}extendConfig(){return Object.keys(this.cacheConfig).forEach((e=>{this.setConfigDefaults(e,this.cacheConfig[e])})),Di.listProviders().then((e=>Ni.listRegisteredProviders().forEach((t=>{if(e.includes(t)&&this.providerServiceDelegate.hasDelegate(t,"cache.configurer")){const e=this.providerServiceDelegate.getDelegate(t,"cache.configurer");Object.keys(e).forEach((t=>{this.setConfigDefaults(t,e[t]),this.cacheConfig[t]||(this.cacheConfig[t]=e[t]),this.cacheConfig[t].initializers=f(this.cacheConfig[t].initializers.concat(e[t].initializers)),this.cacheConfig[t].onReset=f(this.cacheConfig[t].onReset.concat(e[t].onReset)),this.cacheConfig[t].version=Math.max(this.cacheConfig[t].version,e[t].version),this.cacheConfig[t].maxAge=Math.min(this.cacheConfig[t].maxAge,e[t].maxAge)}))}}))))}initializeCache(e){if(dd.createCache(e,this.cacheConfig[e]),this.cacheConfig[e].initializers){const t=this.cacheConfig[e].initializers,n=[];return t.forEach((e=>{n.push(e())})),this.$q.all(n)}return this.$q.resolve(void 0)}initialize(){return this.extendConfig().then((()=>{const e=[];return Object.keys(this.cacheConfig).forEach((t=>{e.push(this.initializeCache(t))})),this.$q.all(e)}))}refreshCache(e){return dd.clearCache(e),this.initializeCache(e)}refreshCaches(){const e=[];return Object.keys(this.cacheConfig).forEach((t=>{e.push(this.refreshCache(t))})),this.$q.all(e)}}bd.$inject=["$q","securityGroupReader","providerServiceDelegate"];const yd="spinnaker.core.cache.initializer";n(yd,[Ed]).service("cacheInitializer",bd);const Cd=({clearFilters:e,tags:t,tagCleared:n})=>{const a=(null==t?void 0:t.length)>5,[i,r]=ot.useState(a&&Ms.isExpanded("filterTags")),s=!a||i?t:t.slice(0,5);return ot.createElement("div",{className:"col-md-12 filter-tags"},s&&s.length>0&&ot.createElement("span",null,ot.createElement("span",null,"Filtered by: "),s.map((e=>ot.createElement("span",{className:"filter-tag",key:[e.label,e.value].join(":")},ot.createElement("strong",null,e.label),": ",e.value,ot.createElement("a",{className:"clickable clear-filters",onClick:()=>(e=>{e.clear(),n(),Ui.log({category:"Filter Tags",action:"Individual tag removed"})})(e)},ot.createElement("span",{className:"glyphicon glyphicon-remove-sign"}))))),a&&ot.createElement("span",{className:"filter-toggle",onClick:()=>{Ms.setExpanded("filterTags",!i),r(!i)}},i?"Hide List":`See all ${t.length} current filters`),s.length>1&&ot.createElement("a",{className:"clickable clear-filters",onClick:()=>{e&&e(),Ui.log({category:"Filter Tags",action:"Clear All clicked"})}},"Clear All")))};function wd(e){return function(t,n){const{headings:a,pool:i}=t;return a[n]=A(i).map(n).uniq().compact().value().sort(),function(e,t){if(!t)return;const n=new Set(e);Object.keys(t).forEach((e=>{n.has(e)||delete t[e]}))}(a[n],e[n]),t.pool=function(e,t,n){const a=n[t];if(!Object.keys(te(a,ae)).length)return e;return e.filter((e=>a[e[t]]))}(i,n,e),t}}function xd({pool:e,dependencyOrder:t,sortFilter:n}){return t.reduce(wd(n),{pool:e,headings:{}}).headings}const kd=[{model:"filter",param:"q",clearValue:"",type:"string",filterLabel:"search"},{model:"account",param:"acct",type:"trueKeyObject"},{model:"region",param:"reg",type:"trueKeyObject"},{model:"stack",param:"stack",type:"trueKeyObject"},{model:"detail",param:"detail",type:"trueKeyObject"},{model:"category",param:"category",type:"trueKeyObject"},{model:"status",type:"trueKeyObject",filterTranslator:{Up:"Healthy",Down:"Unhealthy",OutOfService:"Out of Service"}},{model:"availabilityZone",param:"zone",type:"trueKeyObject",filterLabel:"availability zone"},{model:"instanceType",type:"trueKeyObject",filterLabel:"instance type"},{model:"providerType",type:"trueKeyObject",filterLabel:"provider"},{model:"minInstances",type:"int",filterLabel:"instance count (min)"},{model:"maxInstances",type:"int",filterLabel:"instance count (max)"},{model:"showAllInstances",param:"hideInstances",displayOption:!0,type:"inverse-boolean"},{model:"listInstances",displayOption:!0,type:"boolean"},{model:"instanceSort",displayOption:!0,type:"string",defaultValue:"launchTime"},{model:"multiselect",displayOption:!0,type:"boolean"},{model:"clusters",type:"trueKeyObject"},{model:"labels",type:"trueKeyObject",filterLabel:"label",clearValue:{}}];class Bd{constructor(){this.asFilterModel=rd.configureFilterModel(this,kd),rd.registerRouterHooks(this.asFilterModel,"**.application.insight.clusters.**"),this.asFilterModel.activate()}}function Sd(e){return e?X(e,((e,t)=>(e[`${t.key}:${t.value}`]=!0,e)),{}):{}}function Md(e){return e?X(e,((e,t,n)=>{let[a,i]=n.split(":");return"null"===a&&(a=null),"null"===i&&(i=null),e.concat([{key:a,value:i}])}),[]):[]}var Nd=Object.defineProperty,Dd=Object.getOwnPropertyDescriptor;class Id{constructor(){this.groupsUpdatedStream=new At,this.isFilterable=rd.isFilterable}updateClusterGroups(e){if(!e&&(e=this.lastApplication,!this.lastApplication))return null;const t=[],n=this.filterServerGroupsForDisplay(e.getDataSource("serverGroups").data),a=ie(n,"account");ee(a,((n,a)=>{const i=ie(n,"category"),r=[];ee(i,((t,n)=>{const i=ie(t,"cluster");ee(i,((t,i)=>{const s=ie(t,"region"),o=[];ee(s,((e,t)=>{o.push({heading:t,category:n,serverGroups:e,key:`${t}:${n}`,entityTags:(e[0].clusterEntityTags||[]).find((e=>e.entityRef.region===t)),isManaged:!!e[0].isManaged,managedResourceSummary:e[0].managedResourceSummary})}));const l=(e.clusters||[]).find((e=>e.account===a&&e.name===i&&e.category===n));if(l){const e=o.every((({isManaged:e})=>e));r.push({heading:i,category:n,key:`${i}:${n}`,cluster:l,subgroups:Y(o,"heading"),entityTags:(t[0].clusterEntityTags||[]).find((e=>"*"===e.entityRef.region||void 0===e.entityRef.region)),isManaged:e,managedResourceSummary:e?o[0].managedResourceSummary:void 0})}}))})),t.push({heading:a,key:a,subgroups:Y(r,["heading","category"])})})),this.sortGroupsByHeading(t),Wd.filterModel.asFilterModel.addTags(),this.lastApplication=e,this.addHealthFlags(),this.groupsUpdatedStream.next(Wd.filterModel.asFilterModel.groups)}clearFilters(){Wd.filterModel.asFilterModel.clearFilters(),Wd.filterModel.asFilterModel.applyParamsToUrl()}shouldShowInstance(e){const t=Wd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(t.availabilityZone)){if(!rd.getCheckValues(t.availabilityZone).includes(e.availabilityZone))return!1}if(this.isFilterable(t.status)){const n=rd.getCheckValues(t.status).filter((e=>"Disabled"!==e));return!n.length||(!!t.status.Disabled||n.includes(e.healthState))}return!0}overrideFiltersForUrl(e){if(e.href.includes("/clusters")){Wd.filterModel.asFilterModel.clearFilters();const t=Wd.filterModel.asFilterModel.sortFilter;if(t.filter=e.serverGroup?e.serverGroup:e.cluster?"cluster:"+e.cluster:"",e.account){const n={};n[e.account]=!0,t.account=n}if(e.region){const n={};n[e.region]=!0,t.region=n}if(e.stack){const n={};n[e.stack]=!0,t.stack=n}if(e.detail){const n={};n[e.detail]=!0,t.detail=n}if(e.category){const n={};n[e.category]=!0,t.category=n}hi.$stateParams.application===e.application&&this.updateClusterGroups()}}filterServerGroupsForDisplay(e){const t=e.filter((e=>this.textFilter(e))).filter((e=>this.instanceCountFilter(e))).filter((e=>rd.checkAccountFilters(Wd.filterModel.asFilterModel)(e))).filter((e=>rd.checkRegionFilters(Wd.filterModel.asFilterModel)(e))).filter((e=>rd.checkStackFilters(Wd.filterModel.asFilterModel)(e))).filter((e=>rd.checkDetailFilters(Wd.filterModel.asFilterModel)(e))).filter((e=>rd.checkStatusFilters(Wd.filterModel.asFilterModel)(e))).filter((e=>rd.checkProviderFilters(Wd.filterModel.asFilterModel)(e))).filter((e=>this.instanceTypeFilters(e))).filter((e=>this.instanceFilters(e))).filter((e=>this.labelFilters(e)));return this.updateMultiselectInstanceGroups(t),this.updateMultiselectServerGroups(t),t}updateMultiselectInstanceGroups(e){const t=Wd.filterModel.asFilterModel.sortFilter;t.listInstances&&t.multiselect?(Wd.multiselectModel.instanceGroups.forEach((t=>{const n=e.find((e=>e.name===t.serverGroup&&e.region===t.region&&e.account===t.account&&e.type===t.cloudProvider));if(n){const e=n.instances.filter((e=>this.shouldShowInstance(e)));t.selectAll?t.instanceIds=e.map((e=>e.id)):t.instanceIds=e.filter((e=>t.instanceIds.includes(e.id))).map((e=>e.id))}else t.instanceIds.length=0})),Wd.multiselectModel.instancesStream.next(),Wd.multiselectModel.syncNavigation()):Wd.multiselectModel.instanceGroups.length=0}updateMultiselectServerGroups(e){if(Wd.filterModel.asFilterModel.sortFilter.multiselect){if(Wd.multiselectModel.serverGroups.length){const t=e.map((e=>Wd.multiselectModel.makeServerGroupKey(e))),n=[];Wd.multiselectModel.serverGroups.forEach(((e,a)=>{t.includes(e.key)||n.push(a)})),n.reverse().forEach((e=>Wd.multiselectModel.serverGroups.splice(e,1)))}Wd.multiselectModel.serverGroupsStream.next(),Wd.multiselectModel.syncNavigation()}}instanceTypeFilters(e){const t=Wd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(t.instanceType)){return rd.getCheckValues(t.instanceType).includes(e.instanceType)}return!0}instanceFilters(e){return!this.shouldFilterInstances()||e.instances.some((e=>this.shouldShowInstance(e)))}shouldFilterInstances(){const e=Wd.filterModel.asFilterModel.sortFilter;return this.isFilterable(e.availabilityZone)||this.isFilterable(e.status)&&!e.status.hasOwnProperty("Disabled")}instanceCountFilter(e){let t=!0;const n=Wd.filterModel.asFilterModel.sortFilter;return n.minInstances&&!isNaN(n.minInstances)&&(t=e.instances.length>=n.minInstances),t&&null!==n.maxInstances&&!isNaN(n.maxInstances)&&(t=e.instances.length<=n.maxInstances),t}labelFilters(e){const t=Md(Wd.filterModel.asFilterModel.sortFilter.labels);return!!re(t)||se(t,(({key:t,value:n})=>null===t||null===n||q(e.labels||{},((e,a)=>t&&t===a&&(n&&n===e)))))}textFilter(e){const t=Wd.filterModel.asFilterModel.sortFilter.filter.toLowerCase();if(!t)return!0;if(t.includes("clusters:")){return t.split("clusters:")[1].replace(/\s/g,"").split(",").includes(e.cluster)}if(t.includes("vpc:")){const n=t.split("vpc:")[1];return e.vpcName.toLowerCase()===n.toLowerCase()}if(t.includes("tag:")){let n=!1;const[,a]=t.split("tag:");let i=null,r=null;return a.includes("=")&&([i,r]=a.split("=")),oe(e.tags||{},((e,t)=>{i?i.toLowerCase()===t.toLowerCase()&&e.toLowerCase().includes(r.toLowerCase())&&(n=!0):e.toLowerCase().includes(a.toLowerCase())&&(n=!0)})),n}if(t.includes("detail:")){const n=t.split("detail:")[1];return e.detail===n.toLowerCase()}if(t.includes("cluster:")){const n=t.split("cluster:")[1];return e.cluster===n}if(t.includes("labels:")){const t=Wd.filterModel.asFilterModel.sortFilter.filter.split("labels:")[1].split(",").map((e=>e.trim()));return se(t,(t=>{let n,a;return t.includes("=")&&([n,a]=t.split("=")),!(!n||!a)&&q(e.labels||{},((e,t)=>n===t&&e===a))}))}return this.addSearchField(e),t.split(" ").every((t=>e.searchField.includes(t)))}addSearchField(e){if(e.searchField)return;let t="";e.buildInfo&&e.buildInfo.jenkins&&(t=["#"+e.buildInfo.jenkins.number,e.buildInfo.jenkins.host,e.buildInfo.jenkins.name].join(" ").toLowerCase()),e.searchField||(e.searchField=[e.region.toLowerCase(),e.name.toLowerCase(),e.account.toLowerCase(),t,(e.loadBalancers||[]).join(" "),(e.instances||[]).map((e=>e.id)).join(" ")].join(" "))}sortGroupsByHeading(e){this.diffSubgroups(Wd.filterModel.asFilterModel.groups,e),Wd.filterModel.asFilterModel.groups.sort(((e,t)=>e.heading.localeCompare(t.heading)))}addHealthFlags(){Wd.filterModel.asFilterModel.groups.forEach((e=>{e.subgroups.forEach((e=>{e.hasDiscovery=e.subgroups.some((e=>this.hasDiscovery(e))),e.hasLoadBalancers=e.subgroups.some((e=>this.hasLoadBalancers(e)))}))}))}hasDiscovery(e){return e.serverGroups.some((e=>(e.instances||[]).some((e=>(e.health||[]).some((e=>"Discovery"===e.type))))))}hasLoadBalancers(e){return e.serverGroups.some((e=>(e.instances||[]).some((e=>(e.health||[]).some((e=>"LoadBalancer"===e.type))))))}diffSubgroups(e,t){const n=[];e.forEach(((e,a)=>{const i=(t||[]).find((t=>t.key===e.key));if(i){if(i.hasOwnProperty("subgroups")&&this.diffSubgroups(e.subgroups,i.subgroups),i.hasOwnProperty("cluster")&&(e.cluster=i.cluster,this.diffSubgroups(e.subgroups,i.subgroups)),i.hasOwnProperty("serverGroups")&&this.diffServerGroups(e,i),(e.entityTags||i.entityTags)&&(e.entityTags=i.entityTags),e.hasOwnProperty("isManaged")||i.hasOwnProperty("isManaged")){const t=e,n=i;t.isManaged=n.isManaged,t.managedResourceSummary=n.managedResourceSummary}}else n.push(a)})),n.reverse().forEach((t=>{e.splice(t,1)})),t.forEach((t=>{e.find((e=>e.key===t.key))||e.push(t)}))}diffServerGroups(e,t){if(e.category!==t.category)return;const n=[];e.serverGroups.forEach(((a,i)=>{const r=t.serverGroups.find((e=>e.name===a.name&&e.account===a.account&&e.region===a.region));r?(a.stringVal!==r.stringVal&&(Xe.debug("change detected, updating server group:",a.name,a.account,a.region,a.category),e.serverGroups[i]=r),(a.runningExecutions||r.runningExecutions)&&(a.runningExecutions=r.runningExecutions),(a.runningTasks||r.runningTasks)&&(a.runningTasks=r.runningTasks)):(Xe.debug("server group no longer found, removing:",a.name,a.account,a.region,a.category),n.push(i))})),n.reverse().forEach((t=>{e.serverGroups.splice(t,1)})),t.serverGroups.forEach((t=>{e.serverGroups.find((e=>e.name===t.name&&e.account===t.account&&e.region===t.region))||(Xe.debug("new server group found, adding",t.name,t.account,t.region),e.serverGroups.push(t))}))}}((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Dd(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);a&&r&&Nd(t,n,r)})([da(25)],Id.prototype,"updateClusterGroups",1);class Fd{constructor(){this.instanceGroups=[],this.instancesStream=new At,this.serverGroups=[],this.serverGroupsStream=new At}syncNavigation(){const{$state:e}=hi;if(!Wd.filterModel.asFilterModel.sortFilter.multiselect&&e.params.multiselect&&e.go(".",{multiselect:null},{inherit:!0}),Wd.filterModel.asFilterModel.sortFilter.multiselect&&!e.params.multiselect&&e.go(".",{multiselect:!0},{inherit:!0}),e.includes("**.multipleInstances")&&!Wd.filterModel.asFilterModel.sortFilter.multiselect)return this.deselectAllInstances(),void e.go("^");if(e.includes("**.multipleServerGroups")&&!Wd.filterModel.asFilterModel.sortFilter.multiselect)return this.clearAllServerGroups(),void e.go("^");const t=this.instanceGroups.reduce(((e,t)=>e+t.instanceIds.length),0);e.includes("**.multipleInstances")&&!t&&e.go("^"),!e.includes("**.multipleInstances")&&t&&(this.isClusterChildState()?e.go("^.multipleInstances"):e.go(".multipleInstances")),!e.includes("**.multipleServerGroups")||this.serverGroups.length?!e.includes("**.multipleServerGroups")&&this.serverGroups.length&&(this.isClusterChildState()?e.go("^.multipleServerGroups"):e.go(".multipleServerGroups")):e.go("^")}deselectAllInstances(){this.instanceGroups.forEach((e=>{e.instanceIds.length=0,e.selectAll=!1}))}clearAllInstanceGroups(){this.instanceGroups.length=0,this.instancesStream.next()}clearAllServerGroups(){this.serverGroups.length=0,this.serverGroupsStream.next()}clearAll(){this.clearAllInstanceGroups(),this.clearAllServerGroups()}getOrCreateInstanceGroup(e){const t=e.name,n=e.account,a=e.region,i=e.type;let r=this.instanceGroups.find((e=>e.serverGroup===t&&e.account===n&&e.region===a&&e.cloudProvider===i));if(!r){const s=hi.$state.params,o=(e.instances||[]).filter((e=>e.provider===s.provider&&e.id===s.instanceId)).map((e=>e.id));r={serverGroup:t,account:n,region:a,cloudProvider:i,instanceIds:o,instances:[],selectAll:!1},this.instanceGroups.push(r)}return r}makeServerGroupKey(e){return[e.type,e.account,e.region,e.name,e.category].join(":")}serverGroupIsSelected(e){if(!this.serverGroups.length)return!1;const t=this.makeServerGroupKey(e);return this.serverGroups.filter((e=>e.key===t)).length>0}toggleServerGroup(e){const{$state:t}=hi;if(!Wd.filterModel.asFilterModel.sortFilter.multiselect){const n={provider:e.type,accountId:e.account,region:e.region,serverGroup:e.name,job:e.name};if(this.isClusterChildState()){if(t.includes("**.serverGroup",n))return;t.go("^."+e.category,n)}else t.go("."+e.category,n);return}this.deselectAllInstances();const n=this.makeServerGroupKey(e),a=this.serverGroups.find((e=>e.key===n));a?this.serverGroups.splice(this.serverGroups.indexOf(a),1):this.serverGroups.push({key:n,account:e.account,region:e.region,provider:e.type,name:e.name,moniker:e.moniker}),this.serverGroupsStream.next(),this.syncNavigation()}toggleInstance(e,t){const{$state:n}=hi;if(!Wd.filterModel.asFilterModel.sortFilter.multiselect){const a={provider:e.type,instanceId:t};if(this.isClusterChildState()){if(n.includes("**.instanceDetails",a))return;n.go("^.instanceDetails",a)}else n.go(".instanceDetails",a);return}this.clearAllServerGroups();const a=this.getOrCreateInstanceGroup(e);a.instanceIds.includes(t)?(a.instanceIds.splice(a.instanceIds.indexOf(t),1),a.selectAll=!1):a.instanceIds.push(t),this.instancesStream.next(),this.syncNavigation()}toggleSelectAll(e,t){const n=this.getOrCreateInstanceGroup(e);n.selectAll=!n.selectAll,n.instanceIds=n.selectAll?t:[],n.selectAll&&this.clearAllServerGroups(),this.instancesStream.next(),this.syncNavigation()}instanceIsSelected(e,t){return this.getOrCreateInstanceGroup(e).instanceIds.includes(t)}isClusterChildState(){return"clusters"!==hi.$state.$current.name.split(".").pop()}}const Td=[{model:"account",param:"acct",type:"trueKeyObject"},{model:"detail",param:"detail",type:"trueKeyObject"},{model:"filter",param:"q",clearValue:"",type:"string",filterLabel:"search"},{model:"providerType",type:"trueKeyObject",filterLabel:"provider"},{model:"region",param:"reg",type:"trueKeyObject"}];class Qd{constructor(){this.asFilterModel=rd.configureFilterModel(this,Td),rd.registerRouterHooks(this.asFilterModel,"**.application.insight.functions.**"),this.asFilterModel.activate()}}var Pd=Object.defineProperty,Rd=Object.getOwnPropertyDescriptor;class Ud{constructor(){this.groupsUpdatedStream=new At}addSearchFields(e){e.searchField||(e.searchField=[e.functionName,e.region.toLowerCase(),e.account].join(" "))}checkSearchTextFilter(e){const t=Zd.filterModel.asFilterModel.sortFilter.filter;if(!t)return!0;if(t.includes("vpc:")){const[,n]=/vpc:([\w-]*)/.exec(t);return e.vpcName.toLowerCase()===n.toLowerCase()}return this.addSearchFields(e),t.split(" ").every((t=>e.searchField.includes(t)))}filterFunctionsForDisplay(e){return A(e).filter((e=>this.checkSearchTextFilter(e))).filter((e=>rd.checkAccountFilters(Zd.filterModel.asFilterModel)(e))).filter((e=>rd.checkRegionFilters(Zd.filterModel.asFilterModel)(e))).filter((e=>rd.checkProviderFilters(Zd.filterModel.asFilterModel)(e))).value()}sortGroupsByHeading(){Zd.filterModel.asFilterModel.groups.sort(((e,t)=>e.heading.localeCompare(t.heading)))}clearFilters(){Zd.filterModel.asFilterModel.clearFilters(),Zd.filterModel.asFilterModel.applyParamsToUrl()}getFunctionGroups(e){const t=[];return ee(e,((e,n)=>{const a=I(ie(e,"region")).map((e=>e.map((e=>e.functionName)))),i=a.length>1?h(...a).reduce(((e,t)=>(e[t]=!0,e)),{}):{},r=ie(e,(e=>`${e.functionName}:${e.region}`)),s=[];ee(r,((e,t)=>{const[n,a]=t.split(":"),r=[];e.forEach((e=>{r.push({heading:e.region,functionDef:e})}));const o=`${n}${i[n]&&a?` (${a})`:""}`;s.push({heading:o,subgroups:Y(r,"heading")})})),t.push({heading:n,subgroups:Y(s,"heading")})})),t}updateFunctionGroups(e){if(!e&&(e=this.lastApplication,!this.lastApplication))return null;const t=this.filterFunctionsForDisplay(e.functions.data),n=ie(t,"account"),a=this.getFunctionGroups(n);Zd.filterModel.asFilterModel.groups=a,this.sortGroupsByHeading(),Zd.filterModel.asFilterModel.addTags(),this.lastApplication=e,this.groupsUpdatedStream.next(a)}}((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Rd(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);a&&r&&Pd(t,n,r)})([da(25)],Ud.prototype,"updateFunctionGroups",1);const zd=[{model:"account",param:"acct",type:"trueKeyObject"},{model:"availabilityZone",param:"zone",type:"trueKeyObject",filterLabel:"availability zone"},{model:"detail",param:"detail",type:"trueKeyObject"},{model:"filter",param:"q",clearValue:"",type:"string",filterLabel:"search"},{model:"loadBalancerType",param:"loadBalancerType",filterLabel:"type",type:"trueKeyObject"},{model:"providerType",type:"trueKeyObject",filterLabel:"provider"},{model:"region",param:"reg",type:"trueKeyObject"},{model:"showInstances",displayOption:!0,type:"boolean"},{model:"showServerGroups",param:"hideServerGroups",displayOption:!0,type:"inverse-boolean"},{model:"stack",param:"stack",type:"trueKeyObject"},{model:"status",type:"trueKeyObject",filterTranslator:{Up:"Healthy",Down:"Unhealthy",OutOfService:"Out of Service"}}];class Gd{constructor(){this.asFilterModel=rd.configureFilterModel(this,zd),rd.registerRouterHooks(this.asFilterModel,"**.application.insight.loadBalancers.**"),this.asFilterModel.activate()}}var jd=Object.defineProperty,Ld=Object.getOwnPropertyDescriptor;class Od{constructor(){this.groupsUpdatedStream=new At,this.isFilterable=rd.isFilterable,this.getCheckValues=rd.getCheckValues}addSearchFields(e){e.searchField||(e.searchField=[e.name,e.region.toLowerCase(),e.account,F(e.serverGroups,"name").join(" "),F(e.instances,"id").join(" ")].join(" "))}checkSearchTextFilter(e){const t=qd.filterModel.asFilterModel.sortFilter.filter;if(!t)return!0;if(t.includes("vpc:")){const[,n]=/vpc:([\w-]*)/.exec(t);return e.vpcName.toLowerCase()===n.toLowerCase()}return this.addSearchFields(e),t.split(" ").every((t=>e.searchField.includes(t)))}checkLoadBalancerTypeFilters(e){const t=qd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(t.loadBalancerType)){return!!this.getCheckValues(t.loadBalancerType).includes(e.loadBalancerType)}return!0}filterLoadBalancersForDisplay(e){return A(e).filter((e=>this.checkSearchTextFilter(e))).filter((e=>this.checkLoadBalancerTypeFilters(e))).filter((e=>rd.checkAccountFilters(qd.filterModel.asFilterModel)(e))).filter((e=>rd.checkRegionFilters(qd.filterModel.asFilterModel)(e))).filter((e=>rd.checkStackFilters(qd.filterModel.asFilterModel)(e))).filter((e=>rd.checkDetailFilters(qd.filterModel.asFilterModel)(e))).filter((e=>rd.checkStatusFilters(qd.filterModel.asFilterModel)(e))).filter((e=>rd.checkProviderFilters(qd.filterModel.asFilterModel)(e))).filter((e=>this.instanceFilters(e))).value()}instanceFilters(e){return!this.shouldFilterInstances()||q(e.instances,(e=>this.shouldShowInstance(e)))}shouldFilterInstances(){const e=qd.filterModel.asFilterModel.sortFilter;return this.isFilterable(e.status)||this.isFilterable(e.availabilityZone)}shouldShowInstance(e){const t=qd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(t.availabilityZone)){if(!this.getCheckValues(t.availabilityZone).includes(e.zone))return!1}if(this.isFilterable(t.status)){const n=this.getCheckValues(t.status),a=M(n,"Disabled");return!a.length||Z(a,e.healthState)}return!0}diffSubgroups(e,t){const n=[];e.forEach(((e,a)=>{const i=V(t,{heading:e.heading});i?(i.loadBalancer&&(e.loadBalancer=i.loadBalancer),i.serverGroups&&this.diffServerGroups(e,i),i.subgroups&&this.diffSubgroups(e.subgroups,i.subgroups),(e.hasOwnProperty("isManaged")||i.hasOwnProperty("isManaged"))&&(e.isManaged=i.isManaged,e.managedResourceSummary=i.managedResourceSummary)):n.push(a)})),n.reverse().forEach((t=>{e.splice(t,1)})),t.forEach((t=>{V(e,{heading:t.heading})||e.push(t)}))}diffServerGroups(e,t){const n=[];e.serverGroups.forEach(((a,i)=>{a.stringVal=a.stringVal||JSON.stringify(a,this.jsonReplacer);const r=V(t.serverGroups,{name:a.name,account:a.account,region:a.region});r?(r.stringVal=r.stringVal||JSON.stringify(r,this.jsonReplacer),a.stringVal!==r.stringVal&&(Xe.debug("change detected, updating server group:",a.name,a.account,a.region),e.serverGroups[i]=r)):(Xe.debug("server group no longer found, removing:",a.name,a.account,a.region),n.push(i))})),n.reverse().forEach((t=>{e.serverGroups.splice(t,1)})),t.serverGroups.forEach((t=>{V(e.serverGroups,{name:t.name,account:t.account,region:t.region})||(Xe.debug("new server group found, adding",t.name,t.account,t.region),e.serverGroups.push(t))}))}sortGroupsByHeading(e){this.diffSubgroups(qd.filterModel.asFilterModel.groups,e),qd.filterModel.asFilterModel.groups.sort(((e,t)=>e.heading<t.heading?-1:e.heading>t.heading?1:0))}clearFilters(){qd.filterModel.asFilterModel.clearFilters(),qd.filterModel.asFilterModel.applyParamsToUrl()}filterServerGroups(e){return this.shouldFilterInstances()?e.serverGroups.filter((e=>e.instances.some((e=>this.shouldShowInstance(e))))):e.serverGroups}jsonReplacer(e,t){return"string"==typeof e&&"$"===e.charAt(0)&&"$"===e.charAt(1)&&(t=void 0),t}updateLoadBalancerGroups(e){if(!e&&(e=this.lastApplication,!this.lastApplication))return null;const t=[],n=this.filterLoadBalancersForDisplay(e.loadBalancers.data),a=ie(n,"account");ee(a,((e,n)=>{const a=I(ie(e,"loadBalancerType")).map((e=>e.map((e=>e.name)))),i=a.length>1?h(...a).reduce(((e,t)=>(e[t]=!0,e)),{}):{},r=ie(e,(e=>`${e.name}:${e.loadBalancerType}`)),s=[];ee(r,((e,t)=>{const[n,a]=t.split(":"),r=[];e.forEach((e=>{r.push({heading:e.region,loadBalancer:e,serverGroups:this.filterServerGroups(e),isManaged:!!e.isManaged,managedResourceSummary:e.managedResourceSummary})}));const o=`${n}${i[n]&&a?` (${a})`:""}`,l=r.every((({isManaged:e})=>e));s.push({heading:o,subgroups:Y(r,"heading"),isManaged:l,managedResourceSummary:l?r[0].managedResourceSummary:void 0})})),t.push({heading:n,subgroups:Y(s,"heading")})})),this.sortGroupsByHeading(t),qd.filterModel.asFilterModel.addTags(),this.lastApplication=e,this.groupsUpdatedStream.next(t)}}((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Ld(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);a&&r&&jd(t,n,r)})([da(25)],Od.prototype,"updateLoadBalancerGroups",1);const Yd=[{model:"awaitingJudgement",type:"boolean",clearValue:!1},{model:"filter",param:"q",clearValue:"",type:"string",filterLabel:"search"},{model:"pipeline",param:"pipeline",type:"trueKeyObject",clearValue:{}},{model:"status",type:"trueKeyObject",clearValue:{}},{model:"tags",type:"trueKeyObject",clearValue:{}}];class $d{constructor(){this.expandSubject=new At;const{transitionService:e}=hi.$uiRouter;this.configViewStateCache=qp.createCache("executionFilters",{version:2,maxAge:24*di.maxPipelineAgeDays*60*60*1e3}),this.asFilterModel=rd.configureFilterModel(this,Yd),rd.registerRouterHooks(this.asFilterModel,"**.application.pipelines.executions.**"),this.asFilterModel.activate(),e.onBefore({entering:e=>!(!e.self.name.match(".application.pipelines.executions$")&&!e.self.name.match(".application.pipelines.executionDetails.execution$"))},(e=>{this.mostRecentApplication=e.params().application,this.assignViewStateFromCache()})),Object.defineProperty(this.asFilterModel.sortFilter,"count",{get:()=>this.groupCount,set:e=>{this.groupCount=e,this.cacheConfigViewState()}}),Object.defineProperty(this.asFilterModel.sortFilter,"groupBy",{get:()=>this.groupBy,set:e=>{this.groupBy=e,this.cacheConfigViewState()}}),Object.defineProperty(this.asFilterModel.sortFilter,"showDurations",{get:()=>this.showDurations,set:e=>{this.showDurations=e,this.cacheConfigViewState()}}),this.asFilterModel.activate()}assignViewStateFromCache(){const e=this.getCachedViewState();this.groupCount=e.count,this.groupBy=e.groupBy,this.showDurations=e.showDurations}getCachedViewState(e){e=e||this.mostRecentApplication||"#global";const t=this.configViewStateCache.get(e)||{},n=this.configViewStateCache.get("#global")||{};return this.configViewStateCache.touch(e),le({count:2,groupBy:"name",showDurations:!0},t,null!=n.showDurations?{showDurations:n.showDurations}:void 0)}cacheConfigViewState(){const e=this.getCachedViewState();e.showDurations=this.showDurations,Object.keys(this.asFilterModel.sortFilter.pipeline).length||(e.count=this.groupCount,e.groupBy=this.groupBy);const t=this.mostRecentApplication||"#global";if(this.configViewStateCache.put(t,e),"#global"!==t){const e=this.getCachedViewState("#global");e.showDurations=this.showDurations,this.configViewStateCache.put("#global",e)}}}const Hd=[{model:"account",param:"acct",type:"trueKeyObject"},{model:"detail",param:"detail",type:"trueKeyObject"},{model:"filter",param:"q",clearValue:"",type:"string",filterLabel:"search"},{model:"providerType",type:"trueKeyObject",filterLabel:"provider"},{model:"region",param:"reg",type:"trueKeyObject"},{model:"showLoadBalancers",param:"hideLoadBalancers",displayOption:!0,type:"inverse-boolean"},{model:"showServerGroups",param:"hideServerGroups",displayOption:!0,type:"inverse-boolean"},{model:"stack",param:"stack",type:"trueKeyObject"}];class Vd{constructor(){this.asFilterModel=rd.configureFilterModel(this,Hd),rd.registerRouterHooks(this.asFilterModel,"**.application.insight.firewalls.**"),this.asFilterModel.activate()}}n("spinnaker.core.securityGroup.filter.model",[]).service("securityGroupFilterModel",Vd);class Jd{constructor(){this.groupsUpdatedStream=new At}addSearchFields(e){e.searchField||(e.searchField=[e.name,e.id,e.accountName,e.region,e.vpcName,e.vpcId,F(e.usages.serverGroups,"name").join(" "),F(e.usages.loadBalancers,"name").join(" ")].join(" "))}checkSearchTextFilter(e){const t=Xd.filterModel.asFilterModel.sortFilter.filter;if(!t)return!0;if(t.includes("vpc:")){const[,n]=/vpc:([\w-]*)/.exec(t);return e.vpcName.toLowerCase()===n.toLowerCase()}return this.addSearchFields(e),t.split(" ").every((t=>e.searchField.includes(t)))}clearFilters(){Xd.filterModel.asFilterModel.clearFilters(),Xd.filterModel.asFilterModel.applyParamsToUrl()}filterSecurityGroupsForDisplay(e){const t=rd,n=Xd.filterModel.asFilterModel;return A(e).filter((e=>this.checkSearchTextFilter(e))).filter((e=>t.checkAccountFilters(n)(e))).filter((e=>t.checkRegionFilters(n)(e))).filter((e=>t.checkStackFilters(n)(e))).filter((e=>t.checkDetailFilters(n)(e))).filter((e=>t.checkProviderFilters(n)(e))).value()}sortGroupsByHeading(e){const t=Xd.filterModel.asFilterModel.groups;this.diffSubgroups(t,e),t.sort(((e,t)=>e.heading<t.heading?-1:e.heading>t.heading?1:0))}diffSubgroups(e,t){const n=[];e.forEach(((e,a)=>{const i=(t||[]).find((t=>t.heading===e.heading&&t.vpcName===e.vpcName));i?(i.securityGroup&&(e.securityGroup=i.securityGroup),i.subgroups&&this.diffSubgroups(e.subgroups,i.subgroups),(e.hasOwnProperty("isManaged")||i.hasOwnProperty("isManaged"))&&(e.isManaged=i.isManaged,e.managedResourceSummary=i.managedResourceSummary)):n.push(a)})),n.reverse().forEach((t=>{e.splice(t,1)})),t.forEach((t=>{V(e,{heading:t.heading})||e.push(t)}))}updateSecurityGroups(e){if(!e&&(e=this.lastApplication,!this.lastApplication))return null;const t=[],n=this.filterSecurityGroupsForDisplay(e.securityGroups.data),a=ie(n,"account");ee(a,((e,n)=>{const a=ie(e,"name"),i=[];ee(a,((e,t)=>{const n=[];e.forEach((e=>{const t=e.vpcName?`${e.region} (${e.vpcName})`:e.region;n.push({heading:t,vpcName:e.vpcName,securityGroup:e,isManaged:!!e.isManaged,managedResourceSummary:e.managedResourceSummary})}));const a=n.every((({isManaged:e})=>e));i.push({heading:t,subgroups:Y(n,["heading","vpcName"]),isManaged:a,managedResourceSummary:a?n[0].managedResourceSummary:void 0})})),t.push({heading:n,subgroups:Y(i,"heading")})})),this.sortGroupsByHeading(t),Xd.filterModel.asFilterModel.addTags(),this.lastApplication=e,this.groupsUpdatedStream.next(t)}}const Wd={},Kd={},qd={},Xd={},Zd={};function _d(){Wd.filterModel=new Bd,Wd.filterService=new Id,Wd.multiselectModel=new Fd,Kd.filterModel=new $d,qd.filterModel=new Gd,qd.filterService=new Od,Zd.filterModel=new Qd,Zd.filterService=new Ud,Xd.filterModel=new Vd,Xd.filterService=new Jd,di.checkForUpdates&&no.initialize()}var eu=Object.defineProperty,tu=Object.getOwnPropertyDescriptor;const nu=[{name:"Today",after:()=>En.local().startOf("day").toMillis()},{name:"Yesterday",after:()=>En.local().startOf("day").minus(bn.fromObject({days:1})).toMillis()},{name:"This Week",after:()=>En.local().startOf("week").toMillis()},{name:"Last Week",after:()=>En.local().startOf("week").minus(bn.fromObject({weeks:1})).toMillis()},{name:"Last Month",after:()=>En.local().startOf("month").toMillis()},{name:"This Year",after:()=>En.local().startOf("year").toMillis()},{name:"Prior Years",after:()=>0}];class au{static groupByTimeBoundary(e){return ie(e,(e=>nu.find((t=>(e.startTime||e.buildTime)>t.after())).name))}static updateExecutionGroups(e=this.lastApplication){if(!e)return null;(e.executions.data||[]).forEach((t=>this.fixName(t,e)));const t=this.filterExecutionsForDisplay(e.executions.data,e),n=this.groupExecutions(t,e);this.applyGroupsToModel(n),Kd.filterModel.asFilterModel.addTags(),this.lastApplication=e,this.groupsUpdatedStream.next(n)}static doesPipelineMatchCheckedTags(e,t){if(0===t.length||!e.tags||0===e.tags.length)return!1;const n=t.map((e=>e.split(":").map(decodeURIComponent))).map((([e,t])=>({name:e,value:t}))),a=ie(n,"name");return Object.keys(a).every((t=>{const n=a[t].map((e=>e.value)),i=(e.tags||[]).filter((e=>e.name===t)).map((e=>e.value));return n.some((e=>i.includes(e)))}))}static tagsFilter(e,t){const n=Kd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(n.tags)){const a=t.pipelineConfigs.data.filter((e=>this.doesPipelineMatchCheckedTags(e,rd.getCheckValues(n.tags))));return Z(a.map((e=>e.id)),e.pipelineConfigId)}return!0}static pipelineNameFilter(e){const t=Kd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(t.pipeline)){const n=rd.getCheckValues(t.pipeline);return Z(n,e.name)}return!0}static getValuesAsString(e,t=[]){return"string"==typeof e?e:"number"==typeof e?""+e:e instanceof Array?e.map((e=>this.getValuesAsString(e,t))).join(" "):e instanceof Object?Object.keys(e).map((n=>t.includes(n)?"":this.getValuesAsString(e[n],t))).join(" "):""}static addSearchText(e){if(e.searchField)return;const t=[e.name];t.push(e.id),t.push(this.getValuesAsString(e.trigger,["parentExecution"])),e.searchField=t.join(" ").toLowerCase()}static textFilter(e){const t=Kd.filterModel.asFilterModel.sortFilter.filter.toLowerCase();return!t||(this.addSearchText(e),e.searchField.includes(t))}static statusFilter(e){const t=Kd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(t.status)){const n=rd.getCheckValues(t.status);return Z(n,e.status)}return!0}static awaitingJudgementFilter(e){return!Kd.filterModel.asFilterModel.sortFilter.awaitingJudgement||e.stages.some((({type:e,status:t})=>"manualJudgment"===e&&"RUNNING"===t))}static filterExecutionsForDisplay(e,t){return A(e).filter((e=>this.textFilter(e))).filter((e=>this.tagsFilter(e,t))).filter((e=>this.pipelineNameFilter(e))).filter((e=>this.statusFilter(e))).filter((e=>this.awaitingJudgementFilter(e))).value()}static addEmptyPipelines(e,t){const n=(t.pipelineConfigs.data||[]).concat(t.strategyConfigs.data||[]),a=Kd.filterModel.asFilterModel.sortFilter,i={};e.forEach((e=>i[e.heading]=!0));let r=[];r=this.isFilterable(a.pipeline)||this.isFilterable(a.status)||a.filter||this.isFilterable(a.tags)?n.filter((e=>{const t=(a.filter||"").toLowerCase().includes(e.name.toLowerCase()),n=this.doesPipelineMatchCheckedTags(e,rd.getCheckValues(a.tags));return!i[e.name]&&(a.pipeline[e.name]||t||n)})):n.filter((e=>!i[e.name])),r.forEach((t=>{e.push({heading:t.name,config:t,executions:[],targetAccounts:this.extractAccounts(t),fromTemplate:t&&"templatedPipeline"===t.type||!1})}))}static extractAccounts(e){if(!e)return[];const t=[];return(e.stages||[]).forEach((e=>{const n=$m.pipeline.getStageConfig(e);n&&n.configAccountExtractor&&t.push(...n.configAccountExtractor(e))})),f(ce(t)).filter((e=>!e.includes("${")))}static fixName(e,t){const n=t.pipelineConfigs.data.find((t=>t.id===e.pipelineConfigId));n&&(e.name=n.name)}static groupExecutions(e,t){const n=[];let a=[];ee(ie(e,"name"),(e=>{a=a.concat(e.sort(((e,t)=>this.executionSorter(e,t))))})),a.forEach((e=>{const n=t.pipelineConfigs.data.find((t=>t.id===e.pipelineConfigId));null!=n&&"templatedPipeline"===n.type&&(e.fromTemplate=!0)}));const i=Kd.filterModel.asFilterModel.sortFilter;if("name"===i.groupBy){const e=ie(a,"name");ee(e,((e,a)=>{var i,r;const s=t.pipelineConfigs.data.concat(null!=(r=null==(i=t.strategyConfigs)?void 0:i.data)?r:[]).find((t=>t.id===e[0].pipelineConfigId));e.sort(((e,t)=>this.executionSorter(e,t))),n.push({heading:a,config:s||null,executions:e,runningExecutions:e.filter((e=>e.isActive)),targetAccounts:this.extractAccounts(s),fromTemplate:s&&"templatedPipeline"===s.type||!1})})),this.addEmptyPipelines(n,t)}if("timeBoundary"===i.groupBy){const e=this.groupByTimeBoundary(a);ee(e,((e,t)=>{e.sort(((e,t)=>this.executionSorter(e,t))),n.push({heading:t,config:null,executions:e,runningExecutions:e.filter((e=>e.isActive))})}))}return"none"===i.groupBy&&(a.sort(((e,t)=>this.executionSorter(e,t))),n.push({heading:"",executions:a,runningExecutions:[]})),n}static diffExecutionGroups(e,t){const n=[];return t.forEach((t=>{const a=e.find((e=>e.heading===t.heading));a?this.executionsAreDifferent(a,t)?n.push(t):n.push(a):n.push(t)})),e.forEach((e=>e.executions.sort(((e,t)=>this.executionSorter(e,t))))),n}static executionsAreDifferent(e,t){let n=!1;return e.executions.forEach((e=>{const a=t.executions.find((t=>t.id===e.id));a?e.stringVal!==a.stringVal&&(n=!0,Xe.debug("change detected, updating execution:",e.id)):(n=!0,Xe.debug("execution no longer found, removing:",e.id))})),t.executions.forEach((t=>{e.executions.find((e=>e.id===t.id))||(n=!0,Xe.debug("new execution found, adding",t.id),e.executions.push(t))})),n}static applyGroupsToModel(e){const t=Kd.filterModel.asFilterModel;t.groups=this.diffExecutionGroups(t.groups,e).sort(((e,t)=>this.executionGroupSorter(e,t)))}static executionGroupSorter(e,t){return"timeBoundary"===Kd.filterModel.asFilterModel.sortFilter.groupBy?(t.executions[0].startTime||t.executions[0].buildTime)-(e.executions[0].startTime||e.executions[0].buildTime):e.config&&t.config?e.config.strategy===t.config.strategy?e.config.index-t.config.index:e.config.strategy?1:-1:e.config?-1:t.config?1:e.heading<t.heading?-1:e.heading>t.heading?1:0}static executionSorter(e,t){return e.isActive&&t.isActive?t.startTime-e.startTime:e.isActive?-1:t.isActive?1:e.endTime||t.endTime?e.endTime?t.endTime?t.startTime-e.startTime:1:-1:t.buildTime-e.buildTime}static clearFilters(){Kd.filterModel.asFilterModel.clearFilters(),Kd.filterModel.asFilterModel.applyParamsToUrl()}}au.groupsUpdatedStream=new At,au.lastApplication=null,au.isFilterable=rd.isFilterable,((e,t,n,a)=>{for(var i,r=a>1?void 0:a?tu(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);a&&r&&eu(t,n,r)})([da(25)],au,"updateExecutionGroups",1);class iu{constructor(e,t,n){this.$q=e,this.$state=t,this.$timeout=n,this.runningLimit=di.maxRunningExecutionsToRetrieve||30,this.ignoredStringValFields=["asg","commits","history","hydrator","hydrated","instances","requisiteIds","requisiteStageRefIds","$$hashKey"]}get activeStatuses(){return["RUNNING","SUSPENDED","PAUSED","NOT_STARTED"]}getRunningExecutions(e){return this.getFilteredExecutions(e,this.activeStatuses,this.runningLimit,null,!0)}getFilteredExecutions(e,t,n,a=null,i=!1){const r=t.map((e=>e.toUpperCase())).join(",")||null;return(a?Si("/executions").query({limit:n,pipelineConfigIds:a,statuses:t}).get():Si("/applications").path(e,"pipelines").query({limit:n,statuses:r,pipelineConfigIds:a,expand:i}).get()).then((e=>e?(e.forEach((e=>(e.hydrated=i,this.cleanExecutionForDiffing(e)))),e):[]))}getExecutions(e,t=null,n=!1){const a=Kd.filterModel.asFilterModel.sortFilter,i=rd.getCheckValues(a.tags),r=Object.keys(a.pipeline),s=Object.keys(te(a.status||{},ae)),o=a.count;return t&&(r.length||i.length)?this.getConfigIdsFromFilterModel(t).then((e=>this.getFilteredExecutions(t.name,s,o,e,n))):this.getFilteredExecutions(e,s,o,null,n)}getExecution(e,t=[]){return Si("/pipelines").path(e).get().then((e=>{const{application:n,name:a}=e;if(e.hydrated=!0,this.cleanExecutionForDiffing(e),n&&a){const i=t.find((t=>t.id===e.pipelineConfigId));return i?(e.pipelineConfig=i,Promise.resolve(e)):Si("/applications").path(n,"pipelineConfigs",a).get().then((t=>(e.pipelineConfig=t,e))).catch((()=>e))}return e}))}transformExecutions(e,t,n=[]){t&&t.length&&t.forEach((t=>{const a=this.stringifyExecution(t),i=n.find((e=>e.id===t.id));i&&i.stringVal&&i.stringVal===a||(t.stringVal=a,Yp.transformExecution(e,t))}))}getConfigIdsFromFilterModel(e){const t=Kd.filterModel.asFilterModel.sortFilter,n=rd.getCheckValues(t.tags),a=Object.keys(t.pipeline);return e.pipelineConfigs.activate(),e.pipelineConfigs.ready().then((()=>{const t=e.pipelineConfigs.data.concat(e.strategyConfigs.data),i=a.map((e=>{const n=t.find((t=>t.name===e));return n?n.id:null})).filter((e=>!!e)),r=t.filter((e=>au.doesPipelineMatchCheckedTags(e,n))).map((e=>e.id));return i.concat(f(r))}))}cleanExecutionForDiffing(e){(e.stages||[]).forEach((e=>this.removeInstances(e)))}toggleDetails(e,t,n){const a=this.$state.current.name.endsWith(".executionDetails.execution");if(e.id===this.$state.params.executionId&&this.$state.current.name.includes(".execution")&&void 0===t)return void this.$state.go("^");const i=t||0;let r=m(e,["stageSummaries",i]);if(r&&"group"===r.type){if(void 0===n)return;r=m(r,["groupStages",n])}r=r||{firstActiveStage:0};const s={executionId:e.id,stage:i,subStage:n,step:r.firstActiveStage};if(void 0===n&&"group"===r.type)return s.stage=null,void(s.step=null);this.$state.includes("**.execution",s)?a||this.$state.go("^"):this.$state.current.name.endsWith(".execution")||a?this.$state.go(".",s):this.$state.go(".execution",s)}removeInstances(e){e.context&&(delete e.context.instances,delete e.context.asg,e.context.targetReferences&&e.context.targetReferences.forEach((e=>{delete e.instances,delete e.asg})))}startAndMonitorPipeline(e,t,n){const{executionService:a}=hi;return id.triggerPipeline(e.name,t,n).then((t=>a.waitUntilTriggeredPipelineAppears(e,t)))}waitUntilTriggeredPipelineAppears(e,t){return((e,t=1e3,n=0)=>{let a,i=0;const r=()=>(i++,0===n||i<=n?e().catch((()=>(a=_e(r,t),a))):e());return{promise:r(),cancel:()=>{a&&_e.cancel(a)}}})((()=>this.getExecution(t).then((()=>e.executions.refresh()))),1e3,10)}waitUntilPipelineIsCancelled(e,t){return this.waitUntilExecutionMatches(t,(e=>"CANCELED"===e.status)).then((()=>e.executions.refresh()))}waitUntilPipelineIsDeleted(e,t){const n=this.$q.defer();return this.getExecution(t).then((()=>this.$timeout((()=>this.waitUntilPipelineIsDeleted(e,t).then(n.resolve)),1e3)),(()=>n.resolve())),n.promise.then((()=>e.executions.refresh())),n.promise}cancelExecution(e,t,n,a){return Si("/pipelines").path(t,"cancel").query({force:n,reason:a}).put().then((()=>this.waitUntilPipelineIsCancelled(e,t))).catch((e=>{throw e&&e.data?e.message:null}))}pauseExecution(e,t){return Si("/pipelines").path(t,"pause").put().then((()=>this.waitUntilExecutionMatches(t,(e=>"PAUSED"===e.status)))).then((()=>e.executions.refresh())).catch((e=>{throw e&&e.data?e.message:null}))}resumeExecution(e,t){return Si("/pipelines").path(t,"resume").put().then((()=>this.waitUntilExecutionMatches(t,(e=>"RUNNING"===e.status)))).then((()=>e.executions.refresh())).catch((e=>{throw e&&e.data?e.message:null}))}deleteExecution(e,t){return Si("/pipelines").path(t).delete().then((()=>this.waitUntilPipelineIsDeleted(e,t))).then((()=>e.executions.refresh())).catch((e=>{throw e&&e.data?e.message:null}))}waitUntilExecutionMatches(e,t){return this.getExecution(e).then((n=>t(n)?n:this.$timeout((()=>this.waitUntilExecutionMatches(e,t)),1e3)))}getSectionCacheKey(e,t,n){return["pipeline",e,t,n].join("#")}getProjectExecutions(e,t=1){return Si("/projects").path(e,"pipelines").query({limit:t}).get().then((e=>e&&e.length?(e.forEach((e=>Yp.transformExecution({},e))),e.sort(((e,t)=>t.startTime-(e.startTime||Date.now())))):[]))}addExecutionsToApplication(e,t=[]){if(e.executions.data&&e.executions.data.length&&t.length){const n=e.executions.data,a=e.runningExecutions.data,i=[];return n.forEach(((n,r)=>{const s=t.find((e=>e.id===n.id)),o=a.find((e=>e.id===n.id));s&&n.stringVal&&s.stringVal&&n.stringVal!==s.stringVal&&(n.status!==s.status||n.hydrated===s.hydrated)&&(e.executions.data[r]=s),s||o||i.push(r)})),i.reverse().forEach((e=>n.splice(e,1))),t.forEach((e=>{n.filter((t=>t.id===e.id)).length||n.push(e)})),[...n]}return t}mergeRunningExecutionsIntoExecutions(e){let t=!1;e.runningExecutions.data.forEach((n=>{const a=e.executions.data.findIndex((e=>e.id===n.id));if(-1!==a){const i=e.executions.data[a].stringVal;n.stringVal!==i&&(t=!0,e.executions.data[a]=n)}else t=!0,e.executions.data.push(n)})),e.executions.data.forEach((t=>{var n;t.isActive&&e.runningExecutions.data.every((e=>e.id!==t.id))&&this.getExecution(t.id,null==(n=e.pipelineConfigs)?void 0:n.data).then((t=>{this.updateExecution(e,t)}))})),t&&!e.executions.reloadingForFilters&&e.executions.dataUpdated()}removeCompletedExecutionsFromRunningData(e){const t=e.executions.data,n=e.runningExecutions.data;t.forEach((e=>{const t=n.findIndex((t=>e.id===t.id));-1===t||e.isActive||n.splice(t,1)})),e.runningExecutions.dataUpdated()}updateExecution(e,t,n=e.executions){n.data&&n.data.length&&n.data.forEach(((a,i)=>{t.id===a.id&&(t.stringVal=this.stringifyExecution(t),t.status===a.status&&a.stringVal===t.stringVal||(Yp.transformExecution(e,t),n.data[i]=t,n.dataUpdated()))}))}hydrate(e,t){if(t.hydrator)return t.hydrator;if(t.hydrated)return Promise.resolve(t);const n=this.getExecution(t.id).then((n=>(Yp.transformExecution(e,n),t.stages.forEach(((e,a)=>{const i=n.stages.length===t.stages.length&&n.stages[a].id===e.id?n.stages[a]:n.stages.find((t=>e.id===t.id));i&&(e.context=i.context,e.outputs=i.outputs,e.tasks=i.tasks)})),t.hydrated=!0,t.graphStatusHash=n.graphStatusHash,t.stageSummaries=n.stageSummaries,t)));return t.hydrator=Promise.resolve(n),t.hydrator}getLastExecutionForApplicationByConfigId(e,t){return this.getFilteredExecutions(e,[],1).then((e=>e.filter((e=>e.pipelineConfigId===t)))).then((e=>e[0]))}getExecutionsForConfigIds(e,t={}){const{limit:n,statuses:a,transform:i,application:r}=t;return Si("/executions").query({limit:n,pipelineConfigIds:(e||[]).join(","),statuses:a}).get().then((e=>e?(i&&r&&e.forEach((e=>Yp.transformExecution(r,e))),e.sort(((e,t)=>(t.buildTime||0)-(e.buildTime||0)))):[])).catch((()=>[]))}patchExecution(e,t,n){return Si("/pipelines").path(e,"stages",t).patch(n)}stringifyExecution(e){const t={...e};return t.stages=t.stages.filter((e=>"SUCCEEDED"!==e.status&&"NOT_STARTED"!==e.status)),this.stringify(t)}stringify(e){return Hi.makeSortedStringFromAngularObject({...e},this.ignoredStringValFields)}}const ru="spinnaker.core.pipeline.executions.service";n(ru,[ca]).factory("executionService",["$q","$state","$timeout",(e,t,n)=>new iu(e,t,n)]),_c.addInjectable("executionService");oi("a.spelLink {\n margin-left: 10px;\n -webkit-animation: fadein 1s;\n animation: fadein 1s;\n}\n@keyframes fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@-webkit-keyframes fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\ninput.borderless,\n.borderless select {\n border: none;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.button-input {\n display: flex;\n flex-direction: row;\n align-items: center;\n border: 1px var(--color-alto) solid;\n border-radius: 4px;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n background: var(--color-white);\n}\n.button-input .input {\n display: flex;\n flex-direction: row;\n flex-grow: 1;\n}\n.button-input.invalid {\n border-color: var(--color-danger);\n outline: 0;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px var(--color-danger-light);\n}\n.button-input.focus {\n border-color: var(--color-accent);\n outline: 0;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.button-input .input select,\n.button-input input {\n flex-grow: 1;\n}\n.button-input.number {\n width: 245px;\n}\n.button-input:focus {\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.button-input .btn-group {\n margin-left: 5px;\n}\n.button-input .btn-group button.active {\n font-weight: 700;\n}\n.button-input .btn-group button:focus {\n outline: none;\n}\n.button-input .form-control:focus {\n box-shadow: none;\n}\n.button-input .select2-container .select2-choice,\n.button-input .select2-dropdown-open .select2-choice,\n.button-input .select2-container-active {\n border: none;\n background-image: none;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\nspan.marker {\n display: inline;\n padding: 0.2em 0.6em 0.3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: var(--color-white);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25em;\n}\nspan.marker.param {\n background-color: var(--color-alert);\n color: var(--color-dovegray);\n}\nspan.marker.stage {\n background-color: var(--color-accessory-light);\n color: var(--color-mineshaft);\n}\nspan.marker.function {\n background-color: var(--color-accent-g1);\n color: var(--color-primary);\n}\nspan.marker.value {\n background-color: var(--color-accent-g1);\n color: var(--color-primary);\n}\nspan.marker.param:before {\n content: 'p';\n}\nspan.marker.stage:before {\n content: 'stage';\n}\nspan.marker.function:before {\n content: 'fn';\n}\n.spel-dropdown {\n max-height: 400px;\n overflow-y: scroll;\n}\n.spel-value-separator {\n font-size: 70%;\n color: var(--color-primary);\n}\n.textcomplete-item.active .spel-value-separator {\n color: var(--color-white);\n}\n.monospace {\n font-family: monospace;\n}\n");class su extends ot.Component{constructor(e){super(e),this.destroy$=new At,this.onChange=e=>{this.props.onChange(e.target.value)},this.state={textcompleteConfig:[]},this.autocompleteService=new Lp(Ze,new iu(Ze,{},_e)),vt(this.autocompleteService.addPipelineInfo(this.props.pipeline)).pipe(It(this.destroy$)).subscribe((e=>{this.setState({textcompleteConfig:e})})),this.spelInputRef=ot.createRef()}componentWillUnmount(){this.$input.off("change",this.onChange),this.destroy$.next()}componentDidMount(){this.$input=hn(this.spelInputRef.current),this.renderSuggestions(),this.$input.on("change",this.onChange)}componentDidUpdate(e,t){t.textcompleteConfig!==this.state.textcompleteConfig&&this.renderSuggestions()}renderSuggestions(){this.$input.attr("contenteditable","true"),this.$input.textcomplete(this.state.textcompleteConfig,{maxCount:1e3,zIndex:9e3,dropdownClassName:"dropdown-menu textcomplete-dropdown spel-dropdown"})}render(){return ot.createElement("input",{type:"text",placeholder:this.props.placeholder,className:Cn({"form-control":!0,"no-doc-link":!this.props.docLink}),value:this.props.value||"",onChange:this.onChange,ref:this.spelInputRef})}}su.defaultProps={placeholder:""};const ou=(e,t,n,a,i)=>class extends Ep{constructor(e){super(e,t)}render(){return ot.createElement(zp,{label:n,helpKey:i},ot.createElement(su,{placeholder:a,value:this.props.artifact[e]||"",onChange:n=>{const a=p(this.props.artifact);a[e]=n,a.type=t,this.props.onChange(a)},pipeline:this.props.pipeline,docLink:!0}))}},lu=class extends ot.Component{constructor(e){if(super(e),this.convert=(e,t)=>{if(!t||0===t.length)return[t,""];try{return[e(t),""]}catch(e){return H(lu.DOMBase64Errors,e.code)?["",lu.DOMBase64Errors[e.code]]:["",e.message]}},this.onNameChanged=e=>{const t=p(this.props.artifact);t.name=e,this.props.onChange(t)},this.onContentChanged=e=>{const[t,n]=this.convert(btoa,e.target.value);if(!n){const e=p(this.props.artifact);e.reference=t,this.props.onChange(e)}this.setState({decoded:e.target.value,encodeDecodeError:n})},"embedded/base64"!==e.artifact.type){const t=p(e.artifact);t.type="embedded/base64",e.onChange(t)}const[t,n]=this.convert(atob,e.artifact.reference);this.state={decoded:t,encodeDecodeError:n}}render(){const{pipeline:e}=this.props,{name:t,reference:n}=this.props.artifact,{decoded:a,encodeDecodeError:i}=this.state;return ot.createElement(ot.Fragment,null,ot.createElement(zp,{label:"Name"},ot.createElement(su,{placeholder:"base64-artifact",value:t,pipeline:e,onChange:this.onNameChanged,docLink:!1})),ot.createElement(zp,{label:"Contents"},ot.createElement("textarea",{autoCapitalize:"none",autoComplete:"off",rows:16,className:"form-control code",value:a,onChange:this.onContentChanged}),ot.createElement(zi,{text:n,toolTip:"Copy base64-encoded content to clipboard",analyticsLabel:"Copy Base64 Artifact Content"})),i&&ot.createElement("div",{className:"form-group row"},ot.createElement("div",{className:"col-md-12 error-message"},"Error encoding/decoding artifact content: ",i)))}};let cu=lu;cu.DOMBase64Errors={5:"The string to encode contains characters outside the latin1 range."};const pu={label:"Base64",typePattern:vp.EMBEDDED_BASE64,type:"embedded/base64",description:"An artifact that includes its referenced resource as part of its payload.",key:"base64",isDefault:!1,isMatch:!0,editCmp:ou("name","embedded/base64","Name","base64-artifact","")},du={label:"Base64",typePattern:vp.EMBEDDED_BASE64,type:"embedded/base64",description:"An artifact that includes its referenced resource as part of its payload.",key:"default.base64",isDefault:!0,isMatch:!1,editCmp:cu},uu="bitbucket/file",mu={label:"Bitbucket",typePattern:vp.BITBUCKET_FILE,type:uu,description:"A file stored in git, hosted by Bitbucket.",key:"bitbucket",isDefault:!1,isMatch:!0,editCmp:ou("name",uu,"File path","manifests/frontend.yaml","pipeline.config.expectedArtifact.git.name")},gu={label:"Bitbucket",typePattern:vp.BITBUCKET_FILE,type:uu,description:"A file stored in git, hosted by Bitbucket.",key:"default.bitbucket",isDefault:!0,isMatch:!1,editCmp:class extends Ep{constructor(e){super(e,uu),this.onReferenceChanged=e=>{const t=p(this.props.artifact);t.reference=e,this.props.onChange(t)},this.onFilePathChanged=e=>{const t=p(this.props.artifact);t.name=e,this.props.onChange(t)}}render(){return ot.createElement(ot.Fragment,null,ot.createElement(zp,{label:"Object path",helpKey:"pipeline.config.expectedArtifact.defaultBitbucket.reference"},ot.createElement(su,{placeholder:"https://api.bitbucket.com/rest/api/1.0/$PROJECTS/$PROJECTKEY/repos/$REPONAME/raw/$FILEPATH",value:this.props.artifact.reference,onChange:this.onReferenceChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(zp,{label:"File Path",helpKey:"pipeline.config.expectedArtifact.defaultBitbucket.filepath"},ot.createElement(su,{placeholder:"path/to/file.yml",onChange:this.onFilePathChanged,value:this.props.artifact.name,pipeline:this.props.pipeline,docLink:!0})))}}},hu="custom/object";class fu extends Ep{constructor(e){super(e,hu),this.onTypeChanged=e=>{this.updateArtifact({type:e})},this.onNameChanged=e=>{this.updateArtifact({name:e})},this.onVersionChanged=e=>{this.updateArtifact({version:e})},this.onLocationChanged=e=>{this.updateArtifact({location:e})},this.onReferenceChanged=e=>{this.updateArtifact({reference:e})},this.updateArtifact=e=>{const t=p(this.props.artifact);le(t,e),this.props.onChange(t)}}render(){return ot.createElement(ot.Fragment,null,ot.createElement(zp,{label:"Type"},ot.createElement(su,{placeholder:"",value:this.props.artifact.type,onChange:this.onTypeChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(zp,{label:"Name"},ot.createElement(su,{placeholder:"",value:this.props.artifact.name,onChange:this.onNameChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(zp,{label:"Version"},ot.createElement(su,{placeholder:"",value:this.props.artifact.version,onChange:this.onVersionChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(zp,{label:"Location"},ot.createElement(su,{placeholder:"",value:this.props.artifact.location,onChange:this.onLocationChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(zp,{label:"Reference"},ot.createElement(su,{placeholder:"",value:this.props.artifact.reference,onChange:this.onReferenceChanged,pipeline:this.props.pipeline,docLink:!0})))}}const vu={label:"Custom",typePattern:vp.CUSTOM_OBJECT,type:hu,description:"A custom-defined artifact.",key:"custom",isDefault:!1,isMatch:!0,editCmp:fu},Au={label:"Custom",typePattern:vp.CUSTOM_OBJECT,type:hu,description:"A custom-defined artifact.",key:"default.custom",isDefault:!0,isMatch:!1,editCmp:fu},Eu="docker/image",bu={label:"Docker",typePattern:vp.DOCKER_IMAGE,type:Eu,isDefault:!1,isMatch:!0,description:"A Docker image to be deployed.",key:"docker",editCmp:ou("name",Eu,"Docker image","gcr.io/project/image","pipeline.config.expectedArtifact.docker.name")},yu={label:"Docker",typePattern:vp.DOCKER_IMAGE,type:Eu,isDefault:!0,isMatch:!1,description:"A Docker image to be deployed.",key:"default.docker",editCmp:class extends Ep{constructor(e){super(e,Eu),this.onReferenceChanged=e=>{const t=p(this.props.artifact);t.reference=e,this.props.onChange((e=>{const t=e.reference;if(u(t))return e;const n=t.indexOf("@"),a=t.lastIndexOf(":");if(n>=0){const n=t.split("@");e.name=n[0],e.version=n[1]}else a>0?(e.name=t.substring(0,a),e.version=t.substring(a+1)):e.name=t;return e})(t))}}render(){return ot.createElement(zp,{label:"Object path",helpKey:"pipeline.config.expectedArtifact.defaultDocker.reference"},ot.createElement(su,{placeholder:"gcr.io/project/image@sha256:9efcc2818c9...",value:this.props.artifact.reference,onChange:this.onReferenceChanged,pipeline:this.props.pipeline,docLink:!0}))}}},Cu="gcs/object",wu={label:"GCS",typePattern:vp.GCS_OBJECT,type:Cu,description:"A GCS object.",key:"gcs",isDefault:!1,isMatch:!0,editCmp:ou("name",Cu,"Object path","gs://bucket/path/to/file","pipeline.config.expectedArtifact.gcs.name")},xu={label:"GCS",typePattern:vp.GCS_OBJECT,type:Cu,description:"A GCS object.",key:"default.gcs",isDefault:!0,isMatch:!1,editCmp:class extends Ep{constructor(e){super(e,Cu),this.onReferenceChange=e=>{if(u(e))return;const t=p(this.props.artifact);if(t.reference=e,e.indexOf("#")>=0){const n=e.split("#");t.name=n[0],t.version=n[1]}else t.name=e;this.props.onChange(t)}}render(){return ot.createElement(zp,{label:"Object path",helpKey:"pipeline.config.expectedArtifact.defaultGcs.reference"},ot.createElement(su,{placeholder:"gs://bucket/path/to/file",value:this.props.artifact.reference,onChange:this.onReferenceChange,pipeline:this.props.pipeline,docLink:!0}))}}},ku="github/file",Bu={label:"GitHub",description:"A file stored in git, hosted by GitHub.",key:"github",typePattern:vp.GITHUB_FILE,type:ku,isDefault:!1,isMatch:!0,editCmp:ou("name",ku,"File path","manifests/frontend.yaml","pipeline.config.expectedArtifact.git.name")},Su={label:"GitHub",typePattern:vp.GITHUB_FILE,type:ku,description:"A file stored in git, hosted by GitHub.",key:"default.github",isDefault:!0,isMatch:!1,editCmp:class extends Ep{constructor(e){super(e,ku),this.pathRegex=new RegExp("/repos/[^/]*/[^/]*/contents/(.*)$"),this.onReferenceChange=e=>{const t=this.pathRegex.exec(e),n=p(this.props.artifact);null!==t?(n.name=t[1],n.reference=e):(n.name=e,n.reference=e),this.props.onChange(n)}}render(){return ot.createElement(ot.Fragment,null,ot.createElement(zp,{label:"Content URL",helpKey:"pipeline.config.expectedArtifact.defaultGithub.reference"},ot.createElement(su,{placeholder:"https://api.github.com/repos/$ORG/$REPO/contents/$FILEPATH",value:this.props.artifact.reference,onChange:this.onReferenceChange,pipeline:this.props.pipeline,docLink:!1})),ot.createElement(zp,{label:"Commit/Branch",helpKey:"pipeline.config.expectedArtifact.defaultGithub.version"},ot.createElement(su,{placeholder:"master",value:this.props.artifact.version,onChange:this.onVersionChange,pipeline:this.props.pipeline,docLink:!1})))}}},Mu="gitlab/file",Nu={label:"Gitlab",typePattern:vp.GITLAB_FILE,type:Mu,description:"A file stored in git, hosted by Gitlab.",key:"gitlab",isDefault:!1,isMatch:!0,editCmp:ou("name",Mu,"File path","manifests/frontend.yaml","pipeline.config.expectedArtifact.git.name")},Du={label:"Gitlab",typePattern:vp.GITLAB_FILE,type:Mu,description:"A file stored in git, hosted by Gitlab.",key:"default.gitlab",isDefault:!0,isMatch:!1,editCmp:class extends Ep{constructor(e){super(e,Mu),this.pathRegex=new RegExp("/repos/[^/]*/[^/]*/contents/(.*)$"),this.onReferenceChange=e=>{const t=this.pathRegex.exec(e),n=p(this.props.artifact);null!==t?(n.name=t[1],n.reference=e):(n.name=e,n.reference=e),this.props.onChange(n)}}render(){return ot.createElement(ot.Fragment,null,ot.createElement(zp,{label:"Content URL",helpKey:"pipeline.config.expectedArtifact.defaultGitlab.reference"},ot.createElement(su,{placeholder:"https://gitlab.com/api/v4/projects/$ORG%2F$REPO/repository/files/path%2Fto%2Ffile.yml/raw",value:this.props.artifact.reference,onChange:this.onReferenceChange,pipeline:this.props.pipeline,docLink:!1})),ot.createElement(zp,{label:"Commit/Branch",helpKey:"pipeline.config.expectedArtifact.defaultGitlab.version"},ot.createElement(su,{placeholder:"master",value:this.props.artifact.version,onChange:this.onVersionChange,pipeline:this.props.pipeline,docLink:!1})))}}};class Iu extends ot.Component{constructor(e){var t,n;super(e),this.onIncludesSubPathChange=e=>{this.setState({includesSubPath:e.target.checked})},this.onReferenceChanged=e=>{const t=p(this.props.artifact);t.reference=e,this.props.onChange(t)},this.onVersionChanged=e=>{const t=p(this.props.artifact);t.version=e,this.props.onChange(t)},this.onSubPathChanged=e=>{const t=p(this.props.artifact);t.location=e,this.props.onChange(t)};const{artifact:a}=this.props;this.state={includesSubPath:void 0!==(null!=(n=a.location)?n:null==(t=a.metadata)?void 0:t.subPath)}}render(){var e,t;const{artifact:n}=this.props;return ot.createElement(ot.Fragment,null,ot.createElement(zp,{label:"URL",helpKey:"pipeline.config.expectedArtifact.gitrepo.url"},ot.createElement(su,{placeholder:"https or ssh to your git repo",value:n.reference,onChange:this.onReferenceChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(zp,{label:"Branch",helpKey:"pipeline.config.expectedArtifact.gitrepo.branch"},ot.createElement(su,{placeholder:"master",value:n.version,onChange:this.onVersionChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(zp,{label:"Checkout subpath",helpKey:"pipeline.config.expectedArtifact.gitrepo.checkoutSubpath"},ot.createElement(xo,{checked:this.state.includesSubPath,onChange:this.onIncludesSubPathChange})),this.state.includesSubPath&&ot.createElement(zp,{label:"Subpath",helpKey:"pipeline.config.expectedArtifact.gitrepo.subpath"},ot.createElement(su,{placeholder:"path/to/subdirectory",value:null!=(t=n.location)?t:null==(e=n.metadata)?void 0:e.subPath,onChange:this.onSubPathChanged,pipeline:this.props.pipeline,docLink:!0})))}}const Fu={label:"GitRepo",description:"A Git repository.",key:"gitrepo",typePattern:vp.GIT_REPO,type:"git/repo",isDefault:!1,isMatch:!0,editCmp:Iu},Tu={label:"GitRepo",typePattern:vp.GIT_REPO,type:"git/repo",description:"A Git repository.",key:"default.gitrepo",isDefault:!0,isMatch:!1,editCmp:Iu};class Qu{static getArtifactNames(e,t){return Si("/artifacts/account").path(t,"names").query({type:e}).get()}static getArtifactVersions(e,t,n){return Si("/artifacts/account").path(t,"versions").query({type:e,artifactName:n}).get()}}const Pu="helm/chart";class Ru extends ot.Component{constructor(e){super(e),this.state={names:[],versions:[],versionsLoading:!0,namesLoading:!0},this.SEMVER=new RegExp(/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\+[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)?$/),this.onChange=(e,t)=>{const n=p(this.props.artifact);n[t]=e.value.toString(),this.props.onChange(n)};const{artifact:t}=this.props;if(t.type!==Pu){const n=p(t);n.type=Pu,e.onChange(n)}Qu.getArtifactNames(Pu,this.props.account.name).then((e=>{this.setState({names:e,namesLoading:!1})}),(()=>{this.setState({names:[],namesLoading:!1,versionsLoading:!1,versions:[]})}))}componentDidMount(){const{artifact:e}=this.props;e.name&&this.getChartVersionOptions(e.name)}componentDidUpdate(e){this.props.account.name!==e.account.name&&Qu.getArtifactNames(Pu,this.props.account.name).then((e=>{this.setState({names:e,namesLoading:!1,versions:[]})}),(()=>{this.setState({names:[],namesLoading:!1,versions:[]})}))}render(){const{artifact:e}=this.props,t=this.state.names.map((e=>({value:e,label:e})));return ot.createElement(ot.Fragment,null,ot.createElement(zp,{label:"Name"},!this.state.namesLoading&&ot.createElement(Ti,{options:t,value:e.name||"",onChange:e=>{this.onChange(e,"name"),this.getChartVersionOptions(e.value.toString())},clearable:!1}),this.state.namesLoading&&ot.createElement(bs,null)),ot.createElement(zp,{label:"Version"},!this.state.versionsLoading&&ot.createElement(Ec,{options:this.state.versions,value:e.version||"",onChange:e=>{this.onChange(e,"version")},clearable:!1}),this.state.versionsLoading&&ot.createElement(bs,null)))}getChartVersionOptions(e){const{artifact:t,account:n}=this.props;this.setState({versionsLoading:!0}),Qu.getArtifactVersions(Pu,n.name,e).then((e=>{t.version&&!this.SEMVER.test(t.version)&&(e=e.concat(t.version)),this.setState({versions:e.map((e=>({label:e,value:e}))),versionsLoading:!1})}))}}const Uu={label:"Helm",typePattern:vp.HELM_CHART,type:Pu,isDefault:!1,isMatch:!0,description:"A helm chart to be deployed",key:"helm",editCmp:Ru},zu={label:"Helm",typePattern:vp.HELM_CHART,type:Pu,isDefault:!0,isMatch:!1,description:"A helm chart to be deployed",key:"default.helm",editCmp:Ru},Gu={label:"HTTP",typePattern:vp.HTTP_FILE,type:"http/file",description:"An HTTP artifact.",key:"http",isDefault:!1,isMatch:!0,editCmp:ou("reference","http/file","URL","path/file.ext","")},ju={label:"HTTP",typePattern:vp.HTTP_FILE,type:"http/file",description:"An HTTP artifact.",key:"default.http",isDefault:!0,isMatch:!1,editCmp:ou("reference","http/file","URL","http://host/path/file.ext","")},Lu={label:"Ivy",typePattern:vp.IVY_FILE,type:"ivy/file",description:"An Ivy repository artifact.",key:"ivy",isDefault:!1,isMatch:!0,editCmp:ou("reference","ivy/file","Ivy Coordinate","group:artifact:version","")},Ou={label:"Ivy",typePattern:vp.IVY_FILE,type:"ivy/file",description:"An Ivy repository artifact.",key:"ivy",isDefault:!0,isMatch:!1,editCmp:ou("reference","ivy/file","Ivy Coordinate","group:artifact:version","")};var Yu,$u;($u=Yu||(Yu={})).Jenkins="jenkins",$u.Travis="travis",$u.Wercker="wercker",$u.Concourse="concourse";class Hu{static listMasters(e=null){const t=Si("/v2/builds").query({type:e}).get();if(!t)return Ze.reject("An error occurred when retrieving build masters");switch(e){case Yu.Jenkins:return t.then((e=>e.filter((e=>!/^travis-/.test(e)))));case Yu.Travis:return t.then((e=>e.filter((e=>/^travis-/.test(e)))));case Yu.Concourse:return t.then((e=>e.filter((e=>/^concourse-/.test(e)))));default:return t}}static listJobsForMaster(e){return Si("/v3/builds").path(e,"jobs").get()}static listBuildsForJob(e,t){return Si("/v3/builds").path(e,"builds").query({job:t}).get()}static getJobConfig(e,t){return Si("/v3/builds").path(e,"job").query({job:t}).get()}static getGcbAccounts(){return Si("/gcb/accounts").get()}static getGcbTriggers(e){return Si("/gcb/triggers").path(e).get()}static getCodeBuildAccounts(){return Si("/codebuild/accounts").get()}static getCodeBuildProjects(e){return Si("/codebuild/projects").path(e).get()}}const Vu="jenkins/file",Ju={label:"Jenkins",typePattern:vp.JENKINS_FILE,type:Vu,isDefault:!1,isMatch:!0,description:"A Jenkins artifact file.",key:"default.jenkins",editCmp:ou("reference",Vu,"Relative path","pathFromWorkspaceRoot/file.ext","")},Wu={label:"Jenkins",typePattern:vp.JENKINS_FILE,type:Vu,isDefault:!0,isMatch:!1,description:"A Jenkins artifact file.",key:"default.jenkins",editCmp:class extends Ep{constructor(e){super(e,Vu),this.onReferenceChange=e=>{const t=p(this.props.artifact);t.reference=e,this.props.onChange(t)},this.onNameChange=e=>{const t=p(this.props.artifact);t.name=e,this.props.onChange(t),Hu.listBuildsForJob(this.props.account.name,e).then((e=>{const t=e.filter((e=>!e.building&&"SUCCESS"===e.result)).sort(((e,t)=>t.number-e.number)).map((e=>e.number));this.setState({buildNumbers:t})}),(()=>{this.setState({buildNumbers:[]})}))},this.state={jobs:[],buildNumbers:[]}}componentDidMount(){Hu.listJobsForMaster(this.props.account.name).then((e=>{this.setState({jobs:e})}))}render(){const{buildNumbers:e,jobs:t}=this.state,{artifact:n}=this.props,a=e.map((e=>({label:e,value:e})));a.splice(0,0,{label:"lastSuccessfulBuild",value:"lastSuccessfulBuild"});const i=t.map((e=>({label:e,value:e})));return ot.createElement(ot.Fragment,null,ot.createElement(zp,{label:"Job"},ot.createElement(Ti,{options:i,onChange:e=>this.onNameChange(e.value),value:n.name,clearable:!1})),ot.createElement(zp,{label:"Build Number"},ot.createElement(Ti,{options:a,onChange:e=>this.onVersionChange(e.value),value:n.version,clearable:!1})),ot.createElement(zp,{label:"Relative path"},ot.createElement(su,{placeholder:"pathFromWorkspaceRoot/file.ext",value:this.props.artifact.reference,onChange:this.onReferenceChange,pipeline:this.props.pipeline,docLink:!1})))}}};class Ku extends Ep{constructor(e){super(e,e.artifact.type||"kubernetes/configMap"),this.onReferenceChange=e=>{const t=p(this.props.artifact);t.reference=e,this.props.onChange(t)},this.onTypeChange=e=>{const t=p(this.props.artifact);t.type=e.value,this.props.onChange(t)}}render(){return ot.createElement(ot.Fragment,null,ot.createElement(zp,{label:"Resource Type"},ot.createElement(cn,{options:[{label:"ConfigMap",value:"kubernetes/configMap"},{label:"Deployment",value:"kubernetes/deployment"},{label:"ReplicaSet",value:"kubernetes/replicaSet"},{label:"Secret",value:"kubernetes/secret"}],clearable:!1,value:this.props.artifact.type,onChange:this.onTypeChange})),ot.createElement(zp,{label:"Reference"},ot.createElement(su,{placeholder:"",value:this.props.artifact.reference,onChange:this.onReferenceChange,pipeline:this.props.pipeline,docLink:!0})))}}const qu={label:"Kubernetes",typePattern:vp.KUBERNETES,type:"kubernetes/*",description:"A kubernetes resource.",key:"kubernetes",isDefault:!1,isMatch:!0,editCmp:Ku},Xu={label:"Kubernetes",typePattern:vp.KUBERNETES,type:"kubernetes/*",description:"A kubernetes resource.",key:"default.kubernetes",isDefault:!0,isMatch:!1,editCmp:Ku},Zu={label:"Maven",typePattern:vp.MAVEN_FILE,type:"maven/file",description:"A Maven repository artifact.",key:"maven",isDefault:!1,isMatch:!0,editCmp:ou("reference","maven/file","Maven Coordinate","group:artifact:version","")},_u={label:"Maven",typePattern:vp.MAVEN_FILE,type:"maven/file",description:"A Maven repository artifact.",key:"maven",isDefault:!0,isMatch:!1,editCmp:ou("reference","maven/file","Maven Coordinate","group:artifact:version","")},em={label:"Oracle",typePattern:vp.ORACLE_OBJECT,type:"oracle/object",description:"An oracle object.",key:"oracle",isDefault:!1,isMatch:!0,editCmp:ou("name","oracle/object","reference","oci://bucket/file-path","pipeline.config.expectedArtifact.oracle.name")},tm={label:"Oracle",typePattern:vp.ORACLE_OBJECT,type:"oracle/object",description:"An oracle object.",key:"oracle",isDefault:!0,isMatch:!1,editCmp:ou("reference","oracle/object","Reference","oci://bucket/file-path","pipeline.config.expectedArtifact.defaultOracle.reference")},nm={label:"S3",typePattern:vp.S3_OBJECT,type:"s3/object",description:"An S3 object.",key:"s3",isDefault:!1,isMatch:!0,editCmp:ou("name","s3/object","Object path","s3://bucket/path/to/file","pipeline.config.expectedArtifact.s3.name")},am={label:"S3",typePattern:vp.S3_OBJECT,type:"s3/object",description:"An S3 object.",key:"s3",isDefault:!0,isMatch:!1,editCmp:ou("reference","s3/object","Object path","s3://bucket/path/to/file","pipeline.config.expectedArtifact.defaultS3.reference")};var im="data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20width%3D%22110.37mm%22%20height%3D%22110.37mm%22%20version%3D%221.1%22%20viewBox%3D%220%200%20110.36904%20110.36904%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%3E%20%3Cmetadata%3E%20%20%3Crdf%3ARDF%3E%20%20%20%3Ccc%3AWork%20rdf%3Aabout%3D%22%22%3E%20%20%20%20%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%20%20%20%20%3Cdc%3Atype%20rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22%2F%3E%20%20%20%20%3Cdc%3Atitle%2F%3E%20%20%20%3C%2Fcc%3AWork%3E%20%20%3C%2Frdf%3ARDF%3E%20%3C%2Fmetadata%3E%20%3Cg%20transform%3D%22translate%28-43.089%20-111.04%29%22%3E%20%20%3Crect%20x%3D%2243.089%22%20y%3D%22111.04%22%20width%3D%22110.37%22%20height%3D%22110.37%22%20stroke-width%3D%22.26458%22%2F%3E%20%20%3Cg%20transform%3D%22matrix%28.56848%200%200%20.56848%2034.64%2080.686%29%22%20aria-label%3D%22%3F%22%3E%20%20%20%3Cpath%20d%3D%22m96.688%20198.91h19.031v23.812h-19.031zm18.469-13.781h-17.906v-14.438q0-9.4688%202.625-15.562t11.062-14.156l8.4375-8.3438q5.3438-4.9688%207.6875-9.375%202.4375-4.4062%202.4375-9%200-8.3438-6.1875-13.5-6.0938-5.1563-16.219-5.1563-7.4062%200-15.844%203.2812-8.3438%203.2813-17.438%209.5625v-17.625q8.8125-5.3438%2017.812-7.9688%209.0938-2.625%2018.75-2.625%2017.25%200%2027.656%209.0938%2010.5%209.0938%2010.5%2024%200%207.125-3.375%2013.594-3.375%206.375-11.812%2014.438l-8.25%208.0625q-4.4062%204.4062-6.2812%206.9375-1.7812%202.4375-2.5312%204.7812-0.5625%201.9688-0.84375%204.7812t-0.28125%207.6875z%22%20fill%3D%22%23fff%22%2F%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fsvg%3E";const rm=class{static registerType(e,t){rm.icons.push({type:e,path:t})}static getPath(e){if(null==e)return im;const t=rm.icons.find((t=>t.type.test(e)));return void 0===t?null:t.path}};let sm=rm;sm.icons=[],sm.registerType(vp.CUSTOM_OBJECT,im),sm.registerType(vp.DOCKER_IMAGE,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20standalone%3D%22no%22%3F%3E%3Csvg%20%20%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%20%20%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%20%20%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%20%20%20xmlns%3Asvg%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20%20%20viewBox%3D%220%200%20482%20439%22%20%20%20height%3D%22439%22%20%20%20width%3D%22482%22%20%20%20xml%3Aspace%3D%22preserve%22%20%20%20id%3D%22svg3718%22%20%20%20version%3D%221.1%22%3E%3Cmetadata%20%20%20%20%20id%3D%22metadata3724%22%3E%3Crdf%3ARDF%3E%3Ccc%3AWork%20%20%20%20%20%20%20%20%20rdf%3Aabout%3D%22%22%3E%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%3Cdc%3Atype%20%20%20%20%20%20%20%20%20%20%20rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22%20%2F%3E%3Cdc%3Atitle%3E%3C%2Fdc%3Atitle%3E%3C%2Fcc%3AWork%3E%3C%2Frdf%3ARDF%3E%3C%2Fmetadata%3E%3Cdefs%20%20%20%20%20id%3D%22defs3722%22%3E%3CclipPath%20%20%20%20%20%20%20id%3D%22clipPath3734%22%20%20%20%20%20%20%20clipPathUnits%3D%22userSpaceOnUse%22%3E%3Cpath%20%20%20%20%20%20%20%20%20id%3D%22path3732%22%20%20%20%20%20%20%20%20%20d%3D%22M%200%2C329.25%20H%20361.5%20V%200%20H%200%20Z%22%20%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3Cg%20%20%20%20%20transform%3D%22matrix%281.3333333%2C0%2C0%2C-1.3333333%2C0%2C439%29%22%20%20%20%20%20id%3D%22g3726%22%3E%3Cg%20%20%20%20%20%20%20id%3D%22g3728%22%3E%3Cg%20%20%20%20%20%20%20%20%20clip-path%3D%22url%28%23clipPath3734%29%22%20%20%20%20%20%20%20%20%20id%3D%22g3730%22%3E%3Cg%20%20%20%20%20%20%20%20%20%20%20transform%3D%22translate%28344.626%2C78.6162%29%22%20%20%20%20%20%20%20%20%20%20%20id%3D%22g3736%22%3E%3Cpath%20%20%20%20%20%20%20%20%20%20%20%20%20id%3D%22path3738%22%20%20%20%20%20%20%20%20%20%20%20%20%20style%3D%22fill%3A%23066da5%3Bfill-opacity%3A1%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%22%20%20%20%20%20%20%20%20%20%20%20%20%20d%3D%22m%200%2C0%20c%20-0.915%2C0.881%20-2.067%2C1.574%20-3.455%2C2.083%20-1.39%2C0.505%20-2.909%2C0.858%20-4.559%2C1.055%20-1.652%2C0.196%20-3.197%2C0.292%20-4.634%2C0.292%20-3.268%2C0%20-6.342%2C-0.523%20-9.217%2C-1.568%20-2.876%2C-1.048%20-5.539%2C-2.549%20-7.992%2C-4.511%20v%200.981%20c%200%2C1.403%20-0.497%2C2.605%20-1.495%2C3.604%20-0.995%2C0.997%20-2.2%2C1.494%20-3.603%2C1.494%20-1.44%2C0%20-2.656%2C-0.497%20-3.653%2C-1.494%20-0.996%2C-0.999%20-1.496%2C-2.201%20-1.496%2C-3.604%20v%20-44.713%20c%200%2C-1.406%200.5%2C-2.606%201.496%2C-3.603%200.997%2C-0.997%202.213%2C-1.495%203.653%2C-1.495%201.403%2C0%202.608%2C0.498%203.603%2C1.495%200.998%2C0.997%201.495%2C2.197%201.495%2C3.603%20v%2022.357%20c%200%2C2.384%200.452%2C4.625%201.348%2C6.717%200.9%2C2.091%202.125%2C3.911%203.677%2C5.466%201.554%2C1.552%203.375%2C2.777%205.468%2C3.676%202.09%2C0.899%204.329%2C1.349%206.716%2C1.349%202.419%2C0%204.657%2C-0.409%206.717%2C-1.226%200.815%2C-0.36%201.536%2C-0.538%202.157%2C-0.538%200.716%2C0%201.387%2C0.128%202.01%2C0.392%200.618%2C0.26%201.16%2C0.627%201.618%2C1.102%200.457%2C0.473%200.824%2C1.021%201.102%2C1.644%200.278%2C0.618%200.418%2C1.289%200.418%2C2.009%20C%201.374%2C-2.028%200.915%2C-0.883%200%2C0%20m%20-88.54%2C-18.925%20c%200.52%2C1.796%201.323%2C3.437%202.4%2C4.927%201.079%2C1.486%202.353%2C2.762%203.825%2C3.825%201.472%2C1.059%203.089%2C1.887%204.854%2C2.476%201.764%2C0.587%203.578%2C0.881%205.442%2C0.881%201.863%2C0%203.667%2C-0.294%205.415%2C-0.881%201.749%2C-0.589%203.352%2C-1.417%204.804%2C-2.476%201.456%2C-1.063%202.732%2C-2.339%203.824%2C-3.825%201.098%2C-1.49%201.922%2C-3.131%202.479%2C-4.927%20z%20m%2035.936%2C14.316%20c%20-5.428%2C5.36%20-11.9%2C8.039%20-19.415%2C8.039%20-7.585%2C0%20-14.057%2C-2.679%20-19.415%2C-8.039%20-5.363%2C-5.364%20-8.042%2C-11.832%20-8.042%2C-19.415%200%2C-7.583%202.679%2C-14.055%208.042%2C-19.415%205.358%2C-5.361%2011.83%2C-8.04%2019.415%2C-8.04%206.894%2C0%2012.875%2C2.222%2017.944%2C6.667%200.98%2C1.012%201.471%2C2.237%201.471%2C3.677%200%2C1.472%20-0.484%2C2.689%20-1.449%2C3.654%20-0.963%2C0.962%20-2.179%2C1.446%20-3.651%2C1.446%20-1.274%2C-0.034%20-2.402%2C-0.461%20-3.382%2C-1.276%20-1.538%2C-1.307%20-3.206%2C-2.289%20-5.002%2C-2.941%20-1.801%2C-0.654%20-3.774%2C-0.981%20-5.931%2C-0.981%20-1.898%2C0%20-3.719%2C0.295%20-5.469%2C0.883%20-1.746%2C0.589%20-3.351%2C1.412%20-4.804%2C2.476%20-1.454%2C1.061%20-2.721%2C2.335%20-3.798%2C3.824%20-1.079%2C1.487%20-1.898%2C3.129%20-2.45%2C4.927%20h%2038.827%20c%201.436%2C0%202.654%2C0.482%203.651%2C1.447%200.998%2C0.963%201.498%2C2.182%201.498%2C3.652%200%2C3.79%20-0.673%2C7.311%20-2.011%2C10.565%20-1.342%2C3.252%20-3.352%2C6.202%20-6.029%2C8.85%20m%20-51.511%2C2.941%20c%200%2C0.687%20-0.137%2C1.339%20-0.415%2C1.96%20-0.279%2C0.621%20-0.646%2C1.168%20-1.105%2C1.644%20-0.458%2C0.471%20-0.997%2C0.838%20-1.618%2C1.103%20-0.62%2C0.261%20-1.291%2C0.391%20-2.01%2C0.391%20-1.013%2C0%20-1.928%2C-0.263%20-2.745%2C-0.783%20l%20-29.316%2C-19.073%20v%2038.241%20c%200%2C1.438%20-0.5%2C2.655%20-1.497%2C3.654%20-0.995%2C0.995%20-2.199%2C1.495%20-3.604%2C1.495%20-1.44%2C0%20-2.656%2C-0.5%20-3.651%2C-1.495%20-0.997%2C-0.999%20-1.497%2C-2.216%20-1.497%2C-3.654%20v%20-68.146%20c%200%2C-1.405%200.5%2C-2.617%201.497%2C-3.628%200.995%2C-1.014%202.211%2C-1.52%203.651%2C-1.52%201.405%2C0%202.609%2C0.506%203.604%2C1.52%200.997%2C1.011%201.497%2C2.223%201.497%2C3.628%20v%2017.699%20l%205.98%2C3.92%2022.652%2C-25.443%20c%200.912%2C-0.884%202.057%2C-1.324%203.429%2C-1.324%200.719%2C0%201.39%2C0.13%202.01%2C0.392%200.621%2C0.261%201.16%2C0.628%201.618%2C1.103%200.459%2C0.472%200.826%2C1.022%201.105%2C1.642%200.278%2C0.619%200.415%2C1.277%200.415%2C1.961%200%2C1.339%20-0.475%2C2.532%20-1.421%2C3.58%20l%20-21.081%2C23.728%2020.542%2C13.336%20c%201.305%2C0.883%201.96%2C2.236%201.96%2C4.069%20m%20-84.207%2C-10.173%20c%201.568%2C1.552%203.398%2C2.777%205.49%2C3.676%202.093%2C0.899%204.332%2C1.349%206.719%2C1.349%202.156%2C0%204.148%2C-0.361%205.981%2C-1.078%201.828%2C-0.72%203.578%2C-1.784%205.244%2C-3.187%200.981%2C-0.785%202.092%2C-1.178%203.334%2C-1.178%201.471%2C0%202.688%2C0.49%203.653%2C1.472%200.964%2C0.981%201.447%2C2.207%201.447%2C3.677%200%2C1.535%20-0.589%2C2.827%20-1.766%2C3.874%20-5.034%2C4.443%20-10.997%2C6.666%20-17.893%2C6.666%20-7.586%2C0%20-14.057%2C-2.679%20-19.415%2C-8.039%20-5.361%2C-5.364%20-8.042%2C-11.832%20-8.042%2C-19.415%200%2C-7.583%202.681%2C-14.055%208.042%2C-19.415%205.358%2C-5.361%2011.829%2C-8.04%2019.415%2C-8.04%206.862%2C0%2012.827%2C2.222%2017.893%2C6.667%201.079%2C1.081%201.617%2C2.335%201.617%2C3.775%200%2C1.473%20-0.483%2C2.688%20-1.444%2C3.653%20-0.965%2C0.964%20-2.184%2C1.447%20-3.653%2C1.447%20-1.242%2C-0.034%20-2.321%2C-0.392%20-3.236%2C-1.079%20-1.634%2C-1.406%20-3.368%2C-2.46%20-5.196%2C-3.163%20-1.833%2C-0.703%20-3.825%2C-1.054%20-5.981%2C-1.054%20-2.387%2C0%20-4.626%2C0.45%20-6.719%2C1.348%20-2.092%2C0.9%20-3.922%2C2.125%20-5.49%2C3.677%20-1.57%2C1.552%20-2.804%2C3.375%20-3.701%2C5.468%20-0.899%2C2.09%20-1.349%2C4.329%20-1.349%2C6.716%200%2C2.384%200.45%2C4.625%201.349%2C6.717%200.897%2C2.091%202.131%2C3.911%203.701%2C5.466%20m%20-31.676%2C-18.827%20c%20-0.899%2C-2.076%20-2.127%2C-3.897%20-3.678%2C-5.465%20-1.552%2C-1.57%20-3.376%2C-2.813%20-5.466%2C-3.726%20-2.092%2C-0.917%20-4.331%2C-1.374%20-6.718%2C-1.374%20-2.419%2C0%20-4.673%2C0.457%20-6.764%2C1.374%20-2.092%2C0.913%20-3.906%2C2.147%20-5.442%2C3.701%20-1.538%2C1.552%20-2.755%2C3.373%20-3.654%2C5.466%20-0.899%2C2.089%20-1.348%2C4.315%20-1.348%2C6.668%200%2C2.352%200.449%2C4.575%201.348%2C6.668%200.899%2C2.089%202.116%2C3.913%203.654%2C5.467%201.536%2C1.549%203.35%2C2.784%205.442%2C3.701%202.091%2C0.913%204.345%2C1.372%206.764%2C1.372%202.387%2C0%204.626%2C-0.459%206.718%2C-1.372%202.09%2C-0.917%203.914%2C-2.159%205.466%2C-3.726%201.551%2C-1.57%202.779%2C-3.392%203.678%2C-5.468%200.897%2C-2.076%201.347%2C-4.29%201.347%2C-6.642%200%2C-2.353%20-0.45%2C-4.569%20-1.347%2C-6.644%20m%203.553%2C26.059%20c%20-5.427%2C5.36%20-11.898%2C8.039%20-19.415%2C8.039%20-7.583%2C0%20-14.055%2C-2.679%20-19.412%2C-8.039%20-5.363%2C-5.364%20-8.042%2C-11.832%20-8.042%2C-19.415%200%2C-7.583%202.679%2C-14.055%208.042%2C-19.415%205.357%2C-5.361%2011.829%2C-8.04%2019.412%2C-8.04%207.517%2C0%2013.988%2C2.679%2019.415%2C8.04%205.361%2C5.295%208.042%2C11.767%208.042%2C19.415%20-0.034%2C3.79%20-0.712%2C7.304%20-2.036%2C10.54%20-1.323%2C3.236%20-3.325%2C6.193%20-6.006%2C8.875%20m%20-63.398%2C-26.059%20c%20-0.899%2C-2.076%20-2.124%2C-3.897%20-3.676%2C-5.465%20-1.552%2C-1.57%20-3.375%2C-2.813%20-5.465%2C-3.726%20-2.093%2C-0.917%20-4.331%2C-1.374%20-6.719%2C-1.374%20-2.418%2C0%20-4.673%2C0.457%20-6.765%2C1.374%20-2.093%2C0.913%20-3.907%2C2.147%20-5.441%2C3.701%20-1.538%2C1.552%20-2.754%2C3.373%20-3.653%2C5.466%20-0.899%2C2.089%20-1.349%2C4.315%20-1.349%2C6.668%200%2C2.352%200.45%2C4.575%201.349%2C6.668%200.899%2C2.089%202.115%2C3.913%203.653%2C5.467%201.534%2C1.549%203.348%2C2.784%205.441%2C3.701%202.092%2C0.913%204.347%2C1.372%206.765%2C1.372%202.388%2C0%204.626%2C-0.459%206.719%2C-1.372%202.09%2C-0.917%203.913%2C-2.159%205.465%2C-3.726%201.552%2C-1.57%202.777%2C-3.392%203.676%2C-5.468%200.9%2C-2.076%201.349%2C-4.29%201.349%2C-6.642%200%2C-2.353%20-0.449%2C-4.569%20-1.349%2C-6.644%20m%206.449%2C57.632%20c%20-1.472%2C0%20-2.69%2C-0.485%20-3.653%2C-1.447%20-0.966%2C-0.965%20-1.447%2C-2.182%20-1.447%2C-3.651%20V%20-2.6%20c%20-4.968%2C4.022%20-10.705%2C6.03%20-17.209%2C6.03%20-7.583%2C0%20-14.054%2C-2.679%20-19.415%2C-8.039%20-5.36%2C-5.364%20-8.039%2C-11.832%20-8.039%2C-19.415%200%2C-7.583%202.679%2C-14.055%208.039%2C-19.415%205.361%2C-5.361%2011.832%2C-8.04%2019.415%2C-8.04%207.517%2C0%2013.989%2C2.679%2019.415%2C8.04%205.361%2C5.295%208.04%2C11.767%208.04%2C19.415%20v%2045.89%20c%200%2C1.469%20-0.498%2C2.686%20-1.495%2C3.651%20-0.997%2C0.962%20-2.213%2C1.447%20-3.651%2C1.447%20m%20142.279%2C113.243%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%20-29.666%2C0%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%20-29.665%2C0%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%20-29.666%2C0%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%20-29.666%2C0%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%2029.666%2C27.383%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%2029.666%2C0%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%2029.665%2C0%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%200%2C27.384%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%20135.273%2C-44.843%20-5.068%2C3.382%20c%20-5.484%2C3.667%20-18.077%2C5.011%20-27.772%2C3.183%20-1.248%2C9.13%20-6.337%2C17.047%20-15.592%2C24.203%20l%20-5.322%2C3.548%20-3.551%2C-5.326%20c%20-4.545%2C-6.855%20-6.816%2C-16.352%20-6.072%2C-25.46%200.335%2C-3.203%201.388%2C-8.934%204.685%2C-13.973%20-3.295%2C-1.77%20-9.808%2C-4.209%20-18.391%2C-4.045%20h%20-165.087%20l%20-0.323%2C-1.901%20c%20-1.552%2C-9.153%20-1.518%2C-37.714%2017.025%2C-59.667%2014.096%2C-16.686%2035.229%2C-25.147%2062.811%2C-25.147%2059.795%2C0%20104.033%2C27.525%20124.749%2C77.557%208.146%2C-0.162%2025.687%2C-0.047%2034.697%2C17.167%200.234%2C0.395%200.775%2C1.429%202.349%2C4.69%20z%22%20%2F%3E%3C%2Fg%3E%3Cg%20%20%20%20%20%20%20%20%20%20%20transform%3D%22translate%28323.4053%2C29.5137%29%22%20%20%20%20%20%20%20%20%20%20%20id%3D%22g3740%22%3E%3Cpath%20%20%20%20%20%20%20%20%20%20%20%20%20id%3D%22path3742%22%20%20%20%20%20%20%20%20%20%20%20%20%20style%3D%22fill%3A%23066da5%3Bfill-opacity%3A1%3Bfill-rule%3Anonzero%3Bstroke%3Anone%22%20%20%20%20%20%20%20%20%20%20%20%20%20d%3D%22M%200%2C0%20H%200.233%20C%200.507%2C0%200.728%2C0.091%200.728%2C0.312%200.728%2C0.507%200.585%2C0.638%200.272%2C0.638%200.143%2C0.638%200.052%2C0.624%200%2C0.61%20Z%20m%20-0.013%2C-1.209%20h%20-0.494%20v%202.132%20c%200.195%2C0.039%200.468%2C0.065%200.819%2C0.065%200.403%2C0%200.584%2C-0.065%200.741%2C-0.156%20C%201.17%2C0.741%201.261%2C0.572%201.261%2C0.364%201.261%2C0.13%201.079%2C-0.052%200.819%2C-0.13%20v%20-0.026%20c%200.207%2C-0.077%200.325%2C-0.234%200.39%2C-0.52%200.064%2C-0.325%200.103%2C-0.455%200.156%2C-0.533%20H%200.832%20c%20-0.065%2C0.078%20-0.104%2C0.272%20-0.169%2C0.521%20-0.039%2C0.233%20-0.169%2C0.337%20-0.442%2C0.337%20h%20-0.234%20z%20m%20-1.313%2C1.118%20c%200%2C-0.949%200.702%2C-1.703%201.664%2C-1.703%200.935%2C0%201.625%2C0.754%201.625%2C1.69%200%2C0.949%20-0.69%2C1.716%20-1.638%2C1.716%20-0.949%2C0%20-1.651%2C-0.767%20-1.651%2C-1.703%20m%203.835%2C0%20c%200%2C-1.209%20-0.949%2C-2.158%20-2.184%2C-2.158%20-1.222%2C0%20-2.197%2C0.949%20-2.197%2C2.158%200%2C1.183%200.975%2C2.132%202.197%2C2.132%201.235%2C0%202.184%2C-0.949%202.184%2C-2.132%22%20%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"),sm.registerType(vp.KUBERNETES,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20standalone%3D%22no%22%3F%3E%3Csvg%20%20%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%20%20%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%20%20%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%20%20%20xmlns%3Asvg%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20%20%20xmlns%3Asodipodi%3D%22http%3A%2F%2Fsodipodi.sourceforge.net%2FDTD%2Fsodipodi-0.dtd%22%20%20%20xmlns%3Ainkscape%3D%22http%3A%2F%2Fwww.inkscape.org%2Fnamespaces%2Finkscape%22%20%20%20width%3D%22722.8457%22%20%20%20height%3D%22701.96637%22%20%20%20id%3D%22svg2%22%20%20%20version%3D%221.1%22%20%20%20inkscape%3Aversion%3D%220.48.4%20r9939%22%20%20%20sodipodi%3Adocname%3D%22logo.svg%22%20%20%20inkscape%3Aexport-filename%3D%22%2Fhome%2Fthockin%2Fsrc%2Fkubernetes%2Fnew.png%22%20%20%20inkscape%3Aexport-xdpi%3D%22460.95001%22%20%20%20inkscape%3Aexport-ydpi%3D%22460.95001%22%3E%20%20%3Cdefs%20%20%20%20%20id%3D%22defs4%22%20%2F%3E%20%20%3Csodipodi%3Anamedview%20%20%20%20%20id%3D%22base%22%20%20%20%20%20pagecolor%3D%22%23ffffff%22%20%20%20%20%20bordercolor%3D%22%23666666%22%20%20%20%20%20borderopacity%3D%221.0%22%20%20%20%20%20inkscape%3Apageopacity%3D%220.0%22%20%20%20%20%20inkscape%3Apageshadow%3D%222%22%20%20%20%20%20inkscape%3Azoom%3D%2216.190509%22%20%20%20%20%20inkscape%3Acx%3D%22277.56851%22%20%20%20%20%20inkscape%3Acy%3D%22157.54494%22%20%20%20%20%20inkscape%3Adocument-units%3D%22px%22%20%20%20%20%20inkscape%3Acurrent-layer%3D%22g3052%22%20%20%20%20%20showgrid%3D%22false%22%20%20%20%20%20inkscape%3Awindow-width%3D%221519%22%20%20%20%20%20inkscape%3Awindow-height%3D%22822%22%20%20%20%20%20inkscape%3Awindow-x%3D%2251%22%20%20%20%20%20inkscape%3Awindow-y%3D%2225%22%20%20%20%20%20inkscape%3Awindow-maximized%3D%220%22%20%20%20%20%20inkscape%3Asnap-global%3D%22false%22%20%20%20%20%20fit-margin-top%3D%2210%22%20%20%20%20%20fit-margin-left%3D%2210%22%20%20%20%20%20fit-margin-right%3D%2210%22%20%20%20%20%20fit-margin-bottom%3D%2210%22%20%2F%3E%20%20%3Cmetadata%20%20%20%20%20id%3D%22metadata7%22%3E%20%20%20%20%3Crdf%3ARDF%3E%20%20%20%20%20%20%3Ccc%3AWork%20%20%20%20%20%20%20%20%20rdf%3Aabout%3D%22%22%3E%20%20%20%20%20%20%20%20%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%20%20%20%20%20%20%20%20%3Cdc%3Atype%20%20%20%20%20%20%20%20%20%20%20rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22%20%2F%3E%20%20%20%20%20%20%20%20%3Cdc%3Atitle%20%2F%3E%20%20%20%20%20%20%3C%2Fcc%3AWork%3E%20%20%20%20%3C%2Frdf%3ARDF%3E%20%20%3C%2Fmetadata%3E%20%20%3Cg%20%20%20%20%20inkscape%3Alabel%3D%22Layer%201%22%20%20%20%20%20inkscape%3Agroupmode%3D%22layer%22%20%20%20%20%20id%3D%22layer1%22%20%20%20%20%20transform%3D%22translate%28-6.3260942%2C-174.7524%29%22%3E%20%20%20%20%3Cg%20%20%20%20%20%20%20id%3D%22g3052%22%3E%20%20%20%20%20%20%3Cpath%20%20%20%20%20%20%20%20%20style%3D%22fill%3A%23326ce5%3Bfill-opacity%3A1%3Bstroke%3A%23ffffff%3Bstroke-width%3A0%3Bstroke-miterlimit%3A4%3Bstroke-opacity%3A1%3Bstroke-dasharray%3Anone%22%20%20%20%20%20%20%20%20%20d%3D%22m%20365.3125%2C184.8125%20a%2046.724621%2C46.342246%200%200%200%20-17.90625%2C4.53125%20l%20-244.34375%2C116.75%20a%2046.724621%2C46.342246%200%200%200%20-25.28125%2C31.4375%20L%2017.5%2C599.78125%20A%2046.724621%2C46.342246%200%200%200%2023.84375%2C635.3125%2046.724621%2C46.342246%200%200%200%2026.5%2C639%20l%20169.125%2C210.28125%20a%2046.724621%2C46.342246%200%200%200%2036.53125%2C17.4375%20L%20503.375%2C866.65625%20A%2046.724621%2C46.342246%200%200%200%20539.90625%2C849.25%20L%20708.96875%2C638.9375%20A%2046.724621%2C46.342246%200%200%200%20718%2C599.71875%20l%20-60.375%2C-262.25%20a%2046.724621%2C46.342246%200%200%200%20-25.28125%2C-31.4375%20l%20-244.375%2C-116.6875%20A%2046.724621%2C46.342246%200%200%200%20365.3125%2C184.8125%20z%22%20%20%20%20%20%20%20%20%20id%3D%22path3055%22%20%20%20%20%20%20%20%20%20inkscape%3Aconnector-curvature%3D%220%22%20%20%20%20%20%20%20%20%20inkscape%3Aexport-filename%3D%22new.png%22%20%20%20%20%20%20%20%20%20inkscape%3Aexport-xdpi%3D%22250.55%22%20%20%20%20%20%20%20%20%20inkscape%3Aexport-ydpi%3D%22250.55%22%20%2F%3E%20%20%20%20%20%20%3Cpath%20%20%20%20%20%20%20%20%20inkscape%3Aconnector-curvature%3D%220%22%20%20%20%20%20%20%20%20%20id%3D%22path3059%22%20%20%20%20%20%20%20%20%20d%3D%22m%20367.73366%2C274.05962%20c%20-8.07696%2C8.2e-4%20-14.62596%2C7.27591%20-14.625%2C16.25%201e-5%2C0.13773%200.0282%2C0.26934%200.0312%2C0.40625%20-0.0119%2C1.21936%20-0.0708%2C2.68836%20-0.0312%2C3.75%200.19262%2C5.176%201.3209%2C9.13749%202%2C13.90625%201.23028%2C10.20666%202.26117%2C18.66736%201.625%2C26.53125%20-0.61869%2C2.9654%20-2.80288%2C5.67741%20-4.75%2C7.5625%20l%20-0.34375%2C6.1875%20c%20-8.77682%2C0.72717%20-17.61235%2C2.05874%20-26.4375%2C4.0625%20-37.97461%2C8.62218%20-70.67008%2C28.18307%20-95.5625%2C54.59375%20-1.61522%2C-1.10193%20-4.44103%2C-3.12914%20-5.2813%2C-3.75%20-2.61117%2C0.35262%20-5.25021%2C1.15829%20-8.6875%2C-0.84375%20-6.54491%2C-4.40563%20-12.50587%2C-10.48693%20-19.71875%2C-17.8125%20-3.30498%2C-3.50419%20-5.69832%2C-6.84101%20-9.625%2C-10.21875%20-0.89172%2C-0.76707%20-2.25258%2C-1.80455%20-3.25%2C-2.59375%20-3.06988%2C-2.44757%20-6.6907%2C-3.72402%20-10.1875%2C-3.84375%20-4.49589%2C-0.15394%20-8.82394%2C1.60385%20-11.65625%2C5.15625%20-5.03521%2C6.31538%20-3.42312%2C15.96805%203.59375%2C21.5625%200.0712%2C0.0567%200.14702%2C0.10078%200.21875%2C0.15625%200.96422%2C0.78162%202.14496%2C1.78313%203.03125%2C2.4375%204.16687%2C3.07655%207.9732%2C4.65145%2012.125%2C7.09375%208.747%2C5.40181%2015.99837%2C9.88086%2021.75%2C15.28125%202.24602%2C2.39417%202.63858%2C6.61292%202.9375%2C8.4375%20l%204.6875%2C4.1875%20c%20-25.09342%2C37.76368%20-36.70686%2C84.40946%20-29.8437%2C131.9375%20l%20-6.125%2C1.78125%20c%20-1.6143%2C2.08461%20-3.89541%2C5.36474%20-6.2813%2C6.34375%20-7.52513%2C2.37021%20-15.99424%2C3.24059%20-26.21875%2C4.3125%20-4.80031%2C0.39915%20-8.94218%2C0.16095%20-14.03125%2C1.125%20-1.12008%2C0.21218%20-2.68072%2C0.61877%20-3.90625%2C0.90625%20-0.0426%2C0.009%20-0.0824%2C0.0216%20-0.125%2C0.0312%20-0.0668%2C0.0155%20-0.15456%2C0.0479%20-0.21875%2C0.0625%20-8.62014%2C2.08279%20-14.15774%2C10.006%20-12.375%2C17.8125%201.78316%2C7.80833%2010.20314%2C12.55677%2018.875%2C10.6875%200.0626%2C-0.0143%200.1535%2C-0.0167%200.21875%2C-0.0312%200.0979%2C-0.0224%200.18409%2C-0.0699%200.28125%2C-0.0937%201.20885%2C-0.26536%202.72377%2C-0.5606%203.78125%2C-0.84375%205.00334%2C-1.33963%208.62694%2C-3.30796%2013.125%2C-5.03125%209.67694%2C-3.47077%2017.69173%2C-6.37022%2025.5%2C-7.5%203.26118%2C-0.25542%206.69711%2C2.01216%208.40625%2C2.96875%20l%206.375%2C-1.09375%20c%2014.67018%2C45.48282%2045.41416%2C82.24502%2084.34375%2C105.3125%20l%20-2.65625%2C6.375%20c%200.95742%2C2.47542%202.01341%2C5.8247%201.30022%2C8.26932%20-2.83868%2C7.3612%20-7.70097%2C15.13097%20-13.23772%2C23.79318%20-2.68085%2C4.00192%20-5.42453%2C7.10761%20-7.84375%2C11.6875%20-0.5789%2C1.09589%20-1.31618%2C2.77932%20-1.875%2C3.9375%20-3.75884%2C8.04236%20-1.00164%2C17.3052%206.21875%2C20.78125%207.26575%2C3.49788%2016.28447%2C-0.19134%2020.1875%2C-8.25%200.006%2C-0.0114%200.0257%2C-0.0198%200.0312%2C-0.0312%200.004%2C-0.009%20-0.004%2C-0.0225%200%2C-0.0312%200.55593%2C-1.14255%201.34353%2C-2.64437%201.8125%2C-3.71875%202.07213%2C-4.74702%202.76161%2C-8.81506%204.21875%2C-13.40625%203.86962%2C-9.72014%205.99567%2C-19.91903%2011.32258%2C-26.27411%201.45868%2C-1.74023%203.83681%2C-2.4095%206.30242%2C-3.06964%20l%203.3125%2C-6%20c%2033.93824%2C13.0268%2071.92666%2C16.52246%20109.875%2C7.90625%208.65697%2C-1.96557%2017.01444%2C-4.50945%2025.09375%2C-7.5625%200.93098%2C1.65133%202.66113%2C4.8257%203.125%2C5.625%202.50559%2C0.81518%205.24044%2C1.23614%207.46875%2C4.53125%203.98539%2C6.80898%206.7109%2C14.86416%2010.03125%2C24.59375%201.45738%2C4.59111%202.17762%2C8.65933%204.25%2C13.40625%200.47234%2C1.08195%201.256%2C2.60486%201.8125%2C3.75%203.89482%2C8.08484%2012.94212%2C11.78667%2020.21875%2C8.28125%207.2195%2C-3.4779%209.97974%2C-12.7399%206.21875%2C-20.78125%20-0.55889%2C-1.15814%20-1.3273%2C-2.84164%20-1.90625%2C-3.9375%20-2.41946%2C-4.57976%20-5.1627%2C-7.65448%20-7.84375%2C-11.65625%20-5.53721%2C-8.66192%20-10.12968%2C-15.8577%20-12.96875%2C-23.21875%20-1.18711%2C-3.79657%200.20028%2C-6.15774%201.125%2C-8.625%20-0.55378%2C-0.63477%20-1.73881%2C-4.22009%20-2.4375%2C-5.90625%2040.4574%2C-23.88816%2070.29856%2C-62.02129%2084.3125%2C-106.0625%201.8924%2C0.29742%205.18154%2C0.87936%206.25%2C1.09375%202.19954%2C-1.4507%204.22194%2C-3.34352%208.1875%2C-3.03125%207.80832%2C1.12937%2015.82288%2C4.02973%2025.5%2C7.5%204.49815%2C1.72306%208.1216%2C3.72313%2013.125%2C5.0625%201.05749%2C0.28309%202.57238%2C0.5472%203.78125%2C0.8125%200.0972%2C0.0238%200.1833%2C0.0714%200.28125%2C0.0937%200.0653%2C0.0146%200.15615%2C0.0169%200.21875%2C0.0312%208.67236%2C1.86695%2017.09384%2C-2.87871%2018.875%2C-10.6875%201.78074%2C-7.80696%20-3.7543%2C-15.73201%20-12.375%2C-17.8125%20-1.25393%2C-0.28513%20-3.03225%2C-0.76938%20-4.25%2C-1%20-5.08912%2C-0.96378%20-9.23092%2C-0.7261%20-14.03125%2C-1.125%20-10.22456%2C-1.07138%20-18.6935%2C-1.94269%20-26.21875%2C-4.3125%20-3.06826%2C-1.19028%20-5.25103%2C-4.84124%20-6.31255%2C-6.34375%20l%20-5.90625%2C-1.71875%20c%203.06226%2C-22.15442%202.23655%2C-45.21134%20-3.0625%2C-68.28125%20-5.34839%2C-23.28471%20-14.80037%2C-44.58084%20-27.40625%2C-63.34375%201.51505%2C-1.37729%204.37619%2C-3.91091%205.1875%2C-4.65625%200.23716%2C-2.62417%200.0334%2C-5.37553%202.75%2C-8.28125%205.75134%2C-5.40069%2013.00329%2C-9.87898%2021.75%2C-15.28125%204.15167%2C-2.44252%207.98954%2C-4.01698%2012.15625%2C-7.09375%200.94225%2C-0.69576%202.2289%2C-1.79759%203.21875%2C-2.59375%207.01538%2C-5.59633%208.63058%2C-15.24842%203.59375%2C-21.5625%20-5.03683%2C-6.31408%20-14.79712%2C-6.90883%20-21.8125%2C-1.3125%20-0.99856%2C0.79085%20-2.35353%2C1.82252%20-3.25%2C2.59375%20-3.9265%2C3.37796%20-6.35145%2C6.71439%20-9.65625%2C10.21875%20-7.21249%2C7.32595%20-13.17407%2C13.43777%20-19.71875%2C17.84375%20-2.83601%2C1.65106%20-6.98996%2C1.07978%20-8.87505%2C0.96875%20l%20-5.5625%2C3.96875%20c%20-31.7188%2C-33.26057%20-74.90466%2C-54.52546%20-121.40605%2C-58.6563%20-0.13006%2C-1.94872%20-0.30045%2C-5.47117%20-0.34375%2C-6.53125%20-1.90371%2C-1.82165%20-4.20342%2C-3.37686%20-4.78125%2C-7.3125%20-0.63617%2C-7.86389%200.42597%2C-16.32459%201.65625%2C-26.53125%200.6791%2C-4.76876%201.80738%2C-8.73025%202%2C-13.90625%200.0438%2C-1.17663%20-0.0265%2C-2.88401%20-0.0312%2C-4.15625%20-9.6e-4%2C-8.97409%20-6.54804%2C-16.25082%20-14.625%2C-16.25%20z%20m%20-18.3125%2C113.4375%20-4.34375%2C76.71875%20-0.3125%2C0.15625%20c%20-0.29134%2C6.86335%20-5.93996%2C12.34375%20-12.875%2C12.34375%20-2.84081%2C0%20-5.46294%2C-0.91229%20-7.59375%2C-2.46875%20l%20-0.125%2C0.0625%20-62.90625%2C-44.59375%20c%2019.33365%2C-19.01115%2044.06291%2C-33.06039%2072.5625%2C-39.53125%205.20599%2C-1.18203%2010.40966%2C-2.0591%2015.59375%2C-2.6875%20z%20m%2036.65625%2C0%20c%2033.27347%2C4.09232%2064.04501%2C19.15882%2087.625%2C42.25%20l%20-62.5%2C44.3125%20-0.21875%2C-0.0937%20c%20-5.54745%2C4.05169%20-13.36343%2C3.04639%20-17.6875%2C-2.375%20-1.77132%2C-2.22096%20-2.70072%2C-4.83239%20-2.8125%2C-7.46875%20l%20-0.0625%2C-0.0312%20z%20m%20-147.625%2C70.875%2057.4375%2C51.375%20-0.0625%2C0.3125%20c%205.18437%2C4.50697%205.94888%2C12.32794%201.625%2C17.75%20-1.7712%2C2.22105%20-4.14208%2C3.71074%20-6.6875%2C4.40625%20l%20-0.0625%2C0.25%20-73.625%2C21.25%20c%20-3.74728%2C-34.26517%204.32855%2C-67.57364%2021.375%2C-95.34375%20z%20m%20258.15625%2C0.0312%20c%208.5341%2C13.83256%2014.99655%2C29.28214%2018.84375%2C46.03125%203.80106%2C16.54828%204.75499%2C33.06697%203.1875%2C49.03125%20l%20-74%2C-21.3125%20-0.0625%2C-0.3125%20c%20-6.6265%2C-1.81104%20-10.69893%2C-8.55162%20-9.15625%2C-15.3125%200.63203%2C-2.76962%202.10222%2C-5.11264%204.09375%2C-6.84375%20l%20-0.0312%2C-0.15625%2057.125%2C-51.125%20z%20m%20-140.65625%2C55.3125%2023.53125%2C0%2014.625%2C18.28125%20-5.25%2C22.8125%20-21.125%2C10.15625%20-21.1875%2C-10.1875%20-5.25%2C-22.8125%20z%20m%2075.4375%2C62.5625%20c%200.99997%2C-0.0505%201.99558%2C0.0396%202.96875%2C0.21875%20l%200.125%2C-0.15625%2076.15625%2C12.875%20c%20-11.1455%2C31.3131%20-32.47281%2C58.44018%20-60.96875%2C76.59375%20l%20-29.5625%2C-71.40625%200.0937%2C-0.125%20c%20-2.71561%2C-6.30999%200.002%2C-13.70956%206.25%2C-16.71875%201.59965%2C-0.77041%203.27089%2C-1.19701%204.9375%2C-1.28125%20z%20m%20-127.90625%2C0.3125%20c%205.81174%2C0.0815%2011.02462%2C4.11525%2012.375%2C10.03125%200.63219%2C2.76958%200.3245%2C5.51375%20-0.71875%2C7.9375%20l%200.21875%2C0.28125%20-29.25%2C70.6875%20c%20-27.34716%2C-17.5486%20-49.12927%2C-43.82403%20-60.78125%2C-76.06245%20l%2075.5%2C-12.8125%200.125%2C0.15625%20c%200.84451%2C-0.15541%201.701%2C-0.2304%202.53125%2C-0.21875%20z%20m%2063.78125%2C30.9688%20c%202.02445%2C-0.0744%204.07865%2C0.34098%206.03125%2C1.28125%202.55951%2C1.23253%204.53673%2C3.17319%205.78125%2C5.5%20l%200.28125%2C0%2037.21875%2C67.25%20c%20-4.83029%2C1.61923%20-9.79609%2C3.00308%20-14.875%2C4.15625%20-28.46453%2C6.4629%20-56.83862%2C4.50467%20-82.53125%2C-4.25%20l%2037.125%2C-67.125%200.0625%2C0%20c%202.22767%2C-4.16441%206.45247%2C-6.64887%2010.90625%2C-6.8125%20z%22%20%20%20%20%20%20%20%20%20style%3D%22font-size%3Amedium%3Bfont-style%3Anormal%3Bfont-variant%3Anormal%3Bfont-weight%3Anormal%3Bfont-stretch%3Anormal%3Btext-indent%3A0%3Btext-align%3Astart%3Btext-decoration%3Anone%3Bline-height%3Anormal%3Bletter-spacing%3Anormal%3Bword-spacing%3Anormal%3Btext-transform%3Anone%3Bdirection%3Altr%3Bblock-progression%3Atb%3Bwriting-mode%3Alr-tb%3Btext-anchor%3Astart%3Bbaseline-shift%3Abaseline%3Bcolor%3A%23000000%3Bfill%3A%23ffffff%3Bfill-opacity%3A1%3Bstroke%3A%23ffffff%3Bstroke-width%3A0.25%3Bstroke-miterlimit%3A4%3Bstroke-opacity%3A1%3Bstroke-dasharray%3Anone%3Bmarker%3Anone%3Bvisibility%3Avisible%3Bdisplay%3Ainline%3Boverflow%3Avisible%3Benable-background%3Aaccumulate%3Bfont-family%3ASans%3B-inkscape-font-specification%3ASans%22%20%20%20%20%20%20%20%20%20sodipodi%3Anodetypes%3D%22ccccccccsccccscssccsccccccccscccsccccccccccccccscccscsccsccccscscsccccccccscccscsccccsccccscscscccccccccccccccscccsccccccccccccscccccscccccccccccccccccccccccscccscccccccccscccscccc%22%20%20%20%20%20%20%20%20%20inkscape%3Aexport-filename%3D%22.%2Fpath3059.png%22%20%20%20%20%20%20%20%20%20inkscape%3Aexport-xdpi%3D%22250.55%22%20%20%20%20%20%20%20%20%20inkscape%3Aexport-ydpi%3D%22250.55%22%20%2F%3E%20%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%3C%2Fsvg%3E"),sm.registerType(vp.EMBEDDED_BASE64,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20width%3D%22110.37mm%22%20height%3D%22110.37mm%22%20version%3D%221.1%22%20viewBox%3D%220%200%20110.36904%20110.36904%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%3E%20%3Cmetadata%3E%20%20%3Crdf%3ARDF%3E%20%20%20%3Ccc%3AWork%20rdf%3Aabout%3D%22%22%3E%20%20%20%20%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%20%20%20%20%3Cdc%3Atype%20rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22%2F%3E%20%20%20%20%3Cdc%3Atitle%2F%3E%20%20%20%3C%2Fcc%3AWork%3E%20%20%3C%2Frdf%3ARDF%3E%20%3C%2Fmetadata%3E%20%3Cg%20transform%3D%22translate%28-43.089%20-111.04%29%22%3E%20%20%3Crect%20x%3D%2243.089%22%20y%3D%22111.04%22%20width%3D%22110.37%22%20height%3D%22110.37%22%20stroke-width%3D%22.26458%22%2F%3E%20%20%3Cg%20fill%3D%22%23fff%22%3E%20%20%20%3Cpath%20d%3D%22m70.081%20171.06q0-6.0035-2.3648-9.4046-2.3366-3.4306-6.4468-3.4306t-6.475%203.4306q-2.3366%203.401-2.3366%209.4046t2.3366%209.4341q2.3648%203.401%206.475%203.401t6.4468-3.401q2.3648-3.4306%202.3648-9.4341zm-17.623-11.563q1.6328-2.9574%204.1102-4.377%202.5055-1.4491%205.9683-1.4491%205.743%200%209.3184%204.791%203.6035%204.791%203.6035%2012.599%200%207.8076-3.6035%2012.599-3.5753%204.791-9.3184%204.791-3.4627%200-5.9683-1.4196-2.4774-1.4491-4.1102-4.4066v4.9685h-5.2081v-46.017h5.2081z%22%2F%3E%20%20%20%3Cpath%20d%3D%22m97.744%20163.14q-3.8287%200-6.0809%202.7504-2.224%202.7504-2.224%207.5414%200%204.7614%202.224%207.5414%202.2522%202.7504%206.0809%202.7504%203.8287%200%206.0528-2.7504%202.2522-2.78%202.2522-7.5414%200-4.791-2.2522-7.5414-2.224-2.7504-6.0528-2.7504zm11.289-18.72v5.4416q-2.1396-1.0647-4.3355-1.6266-2.1677-0.5619-4.3073-0.5619-5.6304%200-8.6146%203.9925-2.956%203.9925-3.3783%2012.066%201.661-2.573%204.1665-3.9334%202.5055-1.39%205.5178-1.39%206.3343%200%209.9941%204.0517%203.6879%204.0221%203.6879%2010.972%200%206.802-3.8287%2010.913-3.8287%204.1108-10.191%204.1108-7.2914%200-11.148-5.8557-3.8568-5.8853-3.8568-17.035%200-10.469%204.7296-16.68%204.7296-6.2401%2012.697-6.2401%202.1396%200%204.3073%200.44361%202.1959%200.44361%204.5607%201.3308z%22%2F%3E%20%20%20%3Cpath%20d%3D%22m137.32%20148.64-14.358%2023.571h14.358zm-1.4921-5.205h7.1506v28.776h5.9964v4.9684h-5.9964v10.41h-5.6586v-10.41h-18.975v-5.7669z%22%2F%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fsvg%3E"),sm.registerType(vp.GCS_OBJECT,"data:image/svg+xml,%3Csvg%20id%3D%22Layer_1%22%20data-name%3D%22Layer%201%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22128%22%20height%3D%22128%22%20viewBox%3D%220%200%20128%20128%22%3E%20%20%3Ctitle%3ECloud%20Storage%3C%2Ftitle%3E%20%20%3Cpath%20d%3D%22M126.47%2C58.12l-26.3-45.74A11.56%2C11.56%2C0%2C0%2C0%2C90.31%2C6.5H37.7a11.55%2C11.55%2C0%2C0%2C0-9.86%2C5.88L1.53%2C58a11.48%2C11.48%2C0%2C0%2C0%2C0%2C11.44l26.3%2C46a11.77%2C11.77%2C0%2C0%2C0%2C9.86%2C6.09H90.3a11.73%2C11.73%2C0%2C0%2C0%2C9.87-6.06l26.3-45.74A11.73%2C11.73%2C0%2C0%2C0%2C126.47%2C58.12Z%22%20style%3D%22fill%3A%20%234285f4%22%2F%3E%20%20%3Cpath%20d%3D%22M85.49%2C50.55%2C49.31%2C53.88l-7%2C7%2C6%2C6L42.36%2C77.3l44.2%2C44.2H90.3a11.73%2C11.73%2C0%2C0%2C0%2C9.87-6.06L118.5%2C83.56Z%22%20style%3D%22opacity%3A%200.070000000298023%3Bisolation%3A%20isolate%22%2F%3E%20%20%3Cg%20id%3D%22art%22%3E%20%20%20%20%3Cg%3E%20%20%20%20%20%20%3Cpath%20d%3D%22M84.7%2C50.27H43.26A1.22%2C1.22%2C0%2C0%2C0%2C42%2C51.48v8.57a1.21%2C1.21%2C0%2C0%2C0%2C1.21%2C1.21H84.7a1.22%2C1.22%2C0%2C0%2C0%2C1.21-1.21V51.48a1.22%2C1.22%2C0%2C0%2C0-1.21-1.21m-6.41%2C8a2.48%2C2.48%2C0%2C1%2C1%2C2.48-2.48%2C2.48%2C2.48%2C0%2C0%2C1-2.48%2C2.48%22%20style%3D%22fill%3A%20%23fff%22%2F%3E%20%20%20%20%20%20%3Cpath%20d%3D%22M84.7%2C66.74H43.26A1.22%2C1.22%2C0%2C0%2C0%2C42%2C68v8.57a1.22%2C1.22%2C0%2C0%2C0%2C1.21%2C1.21H84.7a1.22%2C1.22%2C0%2C0%2C0%2C1.21-1.21V67.95a1.22%2C1.22%2C0%2C0%2C0-1.21-1.21m-6.41%2C8a2.48%2C2.48%2C0%2C1%2C1%2C2.48-2.48%2C2.48%2C2.48%2C0%2C0%2C1-2.48%2C2.48%22%20style%3D%22fill%3A%20%23fff%22%2F%3E%20%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%3C%2Fsvg%3E"),sm.registerType(vp.GITHUB_FILE,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20width%3D%22161.03%22%20height%3D%22157.06%22%20version%3D%221.1%22%20viewBox%3D%220%200%20161.03467%20157.05798%22%20xml%3Aspace%3D%22preserve%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%3E%3Cmetadata%3E%3Crdf%3ARDF%3E%3Ccc%3AWork%20rdf%3Aabout%3D%22%22%3E%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%3Cdc%3Atype%20rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22%2F%3E%3Cdc%3Atitle%2F%3E%3C%2Fcc%3AWork%3E%3C%2Frdf%3ARDF%3E%3C%2Fmetadata%3E%3Cg%20transform%3D%22matrix%281.3333%200%200%20-1.3333%20-386.96%20658.07%29%22%3E%3Cg%20transform%3D%22translate%28350.61%20493.55%29%22%3E%3Cpath%20d%3D%22m0%200c-33.347%200-60.388-27.035-60.388-60.388%200-26.68%2017.303-49.316%2041.297-57.301%203.018-0.559%204.126%201.31%204.126%202.905%200%201.439-0.056%206.197-0.082%2011.243-16.8-3.653-20.345%207.125-20.345%207.125-2.747%206.979-6.705%208.836-6.705%208.836-5.479%203.748%200.413%203.671%200.413%203.671%206.064-0.426%209.257-6.224%209.257-6.224%205.386-9.231%2014.127-6.562%2017.573-5.019%200.543%203.902%202.107%206.567%203.834%208.075-13.413%201.526-27.513%206.705-27.513%2029.844%200%206.592%202.359%2011.98%206.222%2016.209-0.627%201.521-2.694%207.663%200.586%2015.981%200%200%205.071%201.622%2016.61-6.191%204.817%201.338%209.983%202.009%2015.115%202.033%205.132-0.024%2010.302-0.695%2015.128-2.033%2011.526%207.813%2016.59%206.191%2016.59%206.191%203.287-8.318%201.22-14.46%200.593-15.981%203.872-4.229%206.214-9.617%206.214-16.209%200-23.195-14.127-28.301-27.574-29.796%202.166-1.874%204.096-5.549%204.096-11.183%200-8.08-0.069-14.583-0.069-16.572%200-1.608%201.086-3.49%204.147-2.898%2023.982%207.994%2041.263%2030.622%2041.263%2057.294%200%2033.353-27.037%2060.388-60.388%2060.388%22%20fill%3D%22%231b1817%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"),sm.registerType(vp.GIT_REPO,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2297px%22%20height%3D%2297px%22%20viewBox%3D%220%200%2097%2097%22%20enable-background%3D%22new%200%200%2097%2097%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%3E%20%3Cpath%20fill%3D%22%23F05133%22%20d%3D%22M92.71%2C44.408L52.591%2C4.291c-2.31-2.311-6.057-2.311-8.369%2C0l-8.33%2C8.332L46.459%2C23.19%20%20c2.456-0.83%2C5.272-0.273%2C7.229%2C1.685c1.969%2C1.97%2C2.521%2C4.81%2C1.67%2C7.275l10.186%2C10.185c2.465-0.85%2C5.307-0.3%2C7.275%2C1.671%20%20c2.75%2C2.75%2C2.75%2C7.206%2C0%2C9.958c-2.752%2C2.751-7.208%2C2.751-9.961%2C0c-2.068-2.07-2.58-5.11-1.531-7.658l-9.5-9.499v24.997%20%20c0.67%2C0.332%2C1.303%2C0.774%2C1.861%2C1.332c2.75%2C2.75%2C2.75%2C7.206%2C0%2C9.959c-2.75%2C2.749-7.209%2C2.749-9.957%2C0c-2.75-2.754-2.75-7.21%2C0-9.959%20%20c0.68-0.679%2C1.467-1.193%2C2.307-1.537V36.369c-0.84-0.344-1.625-0.853-2.307-1.537c-2.083-2.082-2.584-5.14-1.516-7.698%20%20L31.798%2C16.715L4.288%2C44.222c-2.311%2C2.313-2.311%2C6.06%2C0%2C8.371l40.121%2C40.118c2.31%2C2.311%2C6.056%2C2.311%2C8.369%2C0L92.71%2C52.779%20%20C95.021%2C50.468%2C95.021%2C46.719%2C92.71%2C44.408z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"),sm.registerType(vp.GITLAB_FILE,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20standalone%3D%22no%22%3F%3E%3Csvg%20width%3D%22494px%22%20height%3D%22455px%22%20viewBox%3D%220%200%20494%20455%22%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20xmlns%3Asketch%3D%22http%3A%2F%2Fwww.bohemiancoding.com%2Fsketch%2Fns%22%3E%20%20%20%20%20%20%20%20%3Ctitle%3Elogo%3C%2Ftitle%3E%20%20%20%20%3Cdesc%3ECreated%20with%20Sketch.%3C%2Fdesc%3E%20%20%20%20%3Cdefs%3E%20%20%20%20%20%20%20%20%3Cpath%20id%3D%22path-1%22%20d%3D%22M0%2C1173.3333%20L1999.99995%2C1173.3333%20L1999.99995%2C0%20L0%2C0%20L0%2C1173.3333%20L0%2C1173.3333%20Z%22%3E%3C%2Fpath%3E%20%20%20%20%3C%2Fdefs%3E%20%20%20%20%3Cg%20id%3D%22Page-1%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%20sketch%3Atype%3D%22MSPage%22%3E%20%20%20%20%20%20%20%20%3Cg%20id%3D%22gitlab_logo%22%20sketch%3Atype%3D%22MSLayerGroup%22%20transform%3D%22translate%28-359.000000%2C%20-360.000000%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g10%22%20transform%3D%22translate%28999.999975%2C%20587.666648%29%20scale%281%2C%20-1%29%20translate%28-999.999975%2C%20-587.666648%29%20translate%280.000000%2C%200.999996%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g16%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g18-Clipped%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cmask%20id%3D%22mask-2%22%20sketch%3Aname%3D%22path22%22%20fill%3D%22white%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cuse%20xlink%3Ahref%3D%22%23path-1%22%3E%3C%2Fuse%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fmask%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22path22%22%3E%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g18%22%20mask%3D%22url%28%23mask-2%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20transform%3D%22translate%28358.666658%2C%20358.666658%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g44%22%20transform%3D%22translate%280.532000%2C%200.774933%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M491.999988%2C194.666662%20L464.441322%2C279.481326%20L409.82399%2C447.578655%20C407.014656%2C456.226655%20394.778657%2C456.226655%20391.96799%2C447.578655%20L337.349325%2C279.481326%20L155.982663%2C279.481326%20L101.362664%2C447.578655%20C98.5533309%2C456.226655%2086.3173312%2C456.226655%2083.5066646%2C447.578655%20L28.8893326%2C279.481326%20L1.33199997%2C194.666662%20C-1.18266664%2C186.930662%201.57199996%2C178.455996%208.1519998%2C173.674662%20L246.665327%2C0.385333324%20L485.179988%2C173.674662%20C491.759988%2C178.455996%20494.513321%2C186.930662%20491.999988%2C194.666662%22%20id%3D%22path46%22%20fill%3D%22%23FC6D26%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g48%22%20transform%3D%22translate%28155.197863%2C%201.160267%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M91.9999977%2C0%20L91.9999977%2C0%20L182.683995%2C279.095993%20L1.31599997%2C279.095993%20L91.9999977%2C0%20L91.9999977%2C0%20Z%22%20id%3D%22path50%22%20fill%3D%22%23E24329%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g52%22%20transform%3D%22translate%28247.197860%2C%201.160267%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22path54%22%3E%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g56%22%20transform%3D%22translate%2828.531199%2C%201.160800%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M218.666661%2C0%20L127.982663%2C279.09466%20L0.890666644%2C279.09466%20L218.666661%2C0%20L218.666661%2C0%20Z%22%20id%3D%22path58%22%20fill%3D%22%23FC6D26%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g60%22%20transform%3D%22translate%28247.197860%2C%201.160800%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22path62%22%3E%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g64%22%20transform%3D%22translate%280.088533%2C%200.255867%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M29.3333326%2C279.999993%20L29.3333326%2C279.999993%20L1.77466662%2C195.185328%20C-0.738666648%2C187.449329%202.01466662%2C178.974662%208.59599979%2C174.194662%20L247.109327%2C0.905333311%20L29.3333326%2C279.999993%20L29.3333326%2C279.999993%20Z%22%20id%3D%22path66%22%20fill%3D%22%23FCA326%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g68%22%20transform%3D%22translate%28247.197860%2C%201.160267%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22path70%22%3E%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g72%22%20transform%3D%22translate%2829.421866%2C%20280.255593%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M0%2C0%20L127.091997%2C0%20L72.4733315%2C168.097329%20C69.6626649%2C176.746662%2057.4266652%2C176.746662%2054.617332%2C168.097329%20L0%2C0%20L0%2C0%20Z%22%20id%3D%22path74%22%20fill%3D%22%23E24329%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g76%22%20transform%3D%22translate%28247.197860%2C%201.160800%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M0%2C0%20L90.6839977%2C279.09466%20L217.775995%2C279.09466%20L0%2C0%20L0%2C0%20Z%22%20id%3D%22path78%22%20fill%3D%22%23FC6D26%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g80%22%20transform%3D%22translate%28246.307061%2C%200.255867%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M218.666661%2C279.999993%20L218.666661%2C279.999993%20L246.225327%2C195.185328%20C248.73866%2C187.449329%20245.985327%2C178.974662%20239.403994%2C174.194662%20L0.890666644%2C0.905333311%20L218.666661%2C279.999993%20L218.666661%2C279.999993%20Z%22%20id%3D%22path82%22%20fill%3D%22%23FCA326%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g84%22%20transform%3D%22translate%28336.973725%2C%20280.255593%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M127.999997%2C0%20L0.907999977%2C0%20L55.5266653%2C168.097329%20C58.3373319%2C176.746662%2070.5733316%2C176.746662%2073.3826648%2C168.097329%20L127.999997%2C0%20L127.999997%2C0%20Z%22%20id%3D%22path86%22%20fill%3D%22%23E24329%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%3C%2Fg%3E%3C%2Fsvg%3E"),sm.registerType(vp.BITBUCKET_FILE,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%2065%2063.27%22%3E%20%20%3Cdefs%3E%20%20%20%20%3Cstyle%3E.cls-2%7Bfill%3Anone%3B%7D.cls-3%7Bfill%3A%232684ff%3B%7D.cls-4%7Bfill%3Aurl%28%23New_Gradient_Swatch_1%29%3B%7D%3C%2Fstyle%3E%20%20%20%20%3ClinearGradient%20id%3D%22New_Gradient_Swatch_1%22%20x1%3D%2264.01%22%20y1%3D%2230.27%22%20x2%3D%2232.99%22%20y2%3D%2254.48%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.18%22%20stop-color%3D%22%230052cc%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%221%22%20stop-color%3D%22%232684ff%22%2F%3E%20%20%20%20%3C%2FlinearGradient%3E%20%20%3C%2Fdefs%3E%20%20%3Ctitle%3EBitbucket-blue%3C%2Ftitle%3E%20%20%3Cg%20id%3D%22Layer_2%22%20data-name%3D%22Layer%202%22%3E%20%20%20%20%3Cg%20id%3D%22Blue%22%3E%20%20%20%20%20%20%3Cpolygon%20class%3D%22cls-2%22%20points%3D%2224.7%2043.51%2037.75%2043.51%2040.9%2025.12%2021.23%2025.12%2024.7%2043.51%22%2F%3E%20%20%20%20%20%20%3Cpath%20class%3D%22cls-3%22%20d%3D%22M2%2C6.26A2%2C2%2C0%2C0%2C0%2C0%2C8.58L8.49%2C60.12a2.72%2C2.72%2C0%2C0%2C0%2C2.66%2C2.27H51.88a2%2C2%2C0%2C0%2C0%2C2-1.68L62.37%2C8.59a2%2C2%2C0%2C0%2C0-2-2.32ZM37.75%2C43.51h-13L21.23%2C25.12H40.9Z%22%2F%3E%20%20%20%20%20%20%3Cpath%20class%3D%22cls-4%22%20d%3D%22M59.67%2C25.12H40.9L37.75%2C43.51h-13L9.4%2C61.73a2.71%2C2.71%2C0%2C0%2C0%2C1.75.66H51.89a2%2C2%2C0%2C0%2C0%2C2-1.68Z%22%2F%3E%20%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%3C%2Fsvg%3E"),sm.registerType(vp.S3_OBJECT,"data:image/svg+xml,%3Csvg%20id%3D%22Layer_1%22%20data-name%3D%22Layer%201%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22100%22%20height%3D%22100%22%20viewBox%3D%220%200%20100%20100%22%3E%20%20%3Ctitle%3EStorage%3C%2Ftitle%3E%20%20%3Cg%3E%20%20%20%20%3Cpolygon%20points%3D%2221.54%2023.23%2016.08%2025.96%2016.08%2073.93%2021.54%2076.66%2034.94%2049.94%2021.54%2023.23%22%20fill%3D%22%238c3123%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2250%2069.76%2021.54%2076.65%2021.54%2023.23%2050%2030.12%2063.45%2050.02%2050%2069.76%22%20fill%3D%22%23e05243%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2250%2069.76%2078.45%2076.65%2083.37%2050.62%2078.45%2023.23%2050%2030.12%2050%2069.76%22%20fill%3D%22%238c3123%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2278.45%2023.23%2083.92%2025.96%2083.92%2073.93%2078.45%2076.66%2078.45%2023.23%22%20fill%3D%22%23e05243%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2237.59%2058.78%2050%2060.37%2059.84%2050.02%2050%2039.68%2037.59%2041.24%2037.59%2058.78%22%20fill%3D%22%238c3123%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2262.41%2032.75%2050%2035.01%2037.59%2032.75%2050%209%2062.41%2032.75%22%20fill%3D%22%235e1f18%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2262.41%2067.25%2050%2064.97%2037.59%2067.25%2050%2091%2062.41%2067.25%22%20fill%3D%22%23f2b0a9%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2262.41%2032.75%2050%2029.68%2050%209%2062.41%2015.2%2062.41%2032.75%22%20fill%3D%22%23e05243%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2237.59%2032.75%2050%2029.68%2050%209%2037.59%2015.2%2037.59%2032.75%22%20fill%3D%22%238c3123%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2250%2091%2062.41%2084.8%2062.41%2067.25%2050%2070.32%2050%2091%22%20fill%3D%22%23e05243%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2250%2091%2037.59%2084.8%2037.59%2067.25%2050%2070.32%2050%2091%22%20fill%3D%22%238c3123%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2262.41%2058.78%2050%2060.37%2050%2039.68%2062.41%2041.24%2062.41%2058.78%22%20fill%3D%22%23e05243%22%2F%3E%20%20%3C%2Fg%3E%3C%2Fsvg%3E"),sm.registerType(vp.HELM_CHART,"helm-chart-artifact2320ab55b431ba0a.svg"),sm.registerType(vp.IVY_FILE,"ivy-artifact537f2ce5956f4038.svg"),sm.registerType(vp.JENKINS_FILE,"jenkins-file-artifactffa863534b26f298.svg"),sm.registerType(vp.MAVEN_FILE,"data:image/svg+xml,%3Csvg%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2232mm%22%20width%3D%2232mm%22%20version%3D%221.1%22%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%20viewBox%3D%220%200%20113.38583%20113.38582%22%3E%20%3Cg%20transform%3D%22translate%28-212.06%20-472.38%29%22%3E%20%20%3Cg%20transform%3D%22translate%288.4853%20-1.4142%29%22%3E%20%20%20%3Cpath%20fill%3D%22%23e8a1a2%22%20d%3D%22m240.91%20580.01c-1.4824-4.2852-3.0745-9.2894-3.538-11.12-1.1372-4.4931-1.6472-4.8098-4.1569-2.5813-2.1418%201.9018-2.1462%201.9003-0.97095-0.33946%201.0077-1.9204%200.9278-2.25-0.54562-2.25-1.5731%200-1.5619-0.12023%200.12599-1.3544%201.7365-1.2698%201.6088-1.5199-2.041-4-2.4685-1.6774-3.2594-2.6456-2.1612-2.6456%202.1818%200%202.2506%200.42403-1.1547-7.1117-6.3934-14.148-9.1638-31.223-8.7054-53.655%200.26565-13%200.57841-15.561%202.1071-17.25%202.169-2.3967%202.745-2.4287%207.0398-0.39064%202.1654%201.0275%204.0683%203.0685%205.3612%205.75%202.5118%205.2098%204.2463%2018.35%202.7926%2021.157-0.92374%201.7835-0.85705%201.8525%200.61602%200.63738%202.0383-1.6814%202.7958-0.21965%203.0241%205.835%200.0833%202.209%200.54518%204.0188%201.0264%204.0219%200.48125%200.003%200.605%201.3557%200.275%203.0057s-0.19352%203%200.30328%203c2.6941%200%203.7428%2017.64%201.4808%2024.906-1.6203%205.2051%201.6784%200.7327%205.5919-7.5816%207.4605-15.85%2018.983-31.543%2033.937-46.223%2010.047-9.862%2014.218-12.61%2016.932-11.158%207.3999%203.9603%204.4295%2017.155-6.47%2028.741-2.791%202.9668-4.4785%205.1654-3.75%204.8858%202.3126-0.88743%201.4341%201.8404-1.8925%205.8761-1.7694%202.1466-3.3115%204.5462-3.4269%205.3325s-1.1503%202.0883-2.2997%202.8934c-1.1494%200.80509-1.8715%201.8172-1.6045%202.2491%200.64529%201.0441-4.8466%209.7279-8.8005%2013.915-3.6411%203.8562-9.5531%207.1556-12.862%207.1777-1.6096%200.0108-1.8993%200.26298-0.97519%200.84897%201.5334%200.97236%206.1197%200.31492%207.9595-1.141%200.70079-0.55456%201.5178-0.76462%201.8157-0.46679%200.68106%200.68106-5.8716%205.7435-7.4342%205.7435-0.63559%200-1.1556%200.43588-1.1556%200.96861%200%200.53274%200.74882%200.68127%201.664%200.33007%201.1573-0.44408%201.4322-0.26346%200.90287%200.59306-1.0808%201.7487-5.096%203.1042-9.7336%203.2859-3.501%200.13718-3.9164%200.40636-3.456%202.2391%200.50216%201.9991%200.4667%202.0075-0.87842%200.20849-1.2384-1.6564-1.0516-2.5682%201.604-7.8289%202.721-5.3903%2013.868-24.641%2017.811-30.758%200.8725-1.3537%201.0905-2.1559%200.4845-1.7825-1.7197%201.0594-17.765%2028.347-24.189%2041.136l-2.5006%204.9786%202.7335%208.3935c3.4677%2010.648%202.7166%2011.942-0.88644%201.5269zm-0.10056-17.041c0.42418-1.404%200.25625-2.25-0.44662-2.25-0.61952%200-0.86751%200.41891-0.55108%200.9309%200.31644%200.512%200.16515%201.1844-0.33619%201.4943-0.50134%200.30984-1.1943-0.17347-1.5398-1.074-0.34558-0.90056-0.85533-1.4104-1.1328-1.133-0.27744%200.27744-0.0251%201.7651%200.5607%203.306%201.1274%202.9652%202.2955%202.5332%203.4458-1.2742zm-5.5256-9.9968c-1.0612-3.7108-1.9294-7.1608-1.9294-7.6667%200-0.50592-0.25022-0.66963-0.55604-0.36381-0.52233%200.52233%202.1863%2012.37%203.2048%2014.018%201.2636%202.0446%201.0362%200.15112-0.71935-5.9875zm-4.4557-17.727c-0.93421-4.1991-1.9183-7.415-2.1869-7.1464-0.26861%200.2686%200.31288%203.8871%201.2922%208.0411%200.97931%204.154%201.9634%207.3699%202.1869%207.1464%200.2235-0.22351-0.35799-3.842-1.2922-8.0411zm-3.0737-14.426c-0.36648-2.2918-0.87608-3.9572-1.1324-3.7009-0.25636%200.25637-0.15176%202.3268%200.23245%204.6009s0.89381%203.9395%201.1324%203.7009c0.23863-0.23864%200.13403-2.309-0.23245-4.6009zm45.009-6.1437c3.0475-4.424%205.0948-7.768%204.5497-7.4311-1.1721%200.72439-11.233%2015.475-10.555%2015.475%200.25562%200%202.9582-3.6196%206.0056-8.0437zm-46.726-1.1438c-0.31922-0.79773-0.55618-0.56078-0.60416%200.60417-0.0434%201.0542%200.19292%201.6448%200.52522%201.3125%200.33229-0.3323%200.36781-1.1948%200.0789-1.9167zm-0.99378-9.5625c-0.25153-0.9625-0.45733-0.175-0.45733%201.75s0.2058%202.7125%200.45733%201.75c0.25152-0.9625%200.25152-2.5375%200-3.5zm55.438%200c1.2439-1.5861%201.2085-1.6214-0.37756-0.37756-1.6658%201.3064-2.1955%202.1276-1.3724%202.1276%200.20765%200%200.99515-0.7875%201.75-1.75zm-50.173%2080.37c1.8714-4.922%206.1906-12.808%206.7233-12.275%200.64112%200.64113-5.4132%2013.374-6.7529%2014.202-0.54189%200.33491-0.52977-0.45565%200.0295-1.9267z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23f8a52a%22%20d%3D%22m233.34%20578.74c2.2061-4.3878%204.0112-8.9144%204.0112-10.059%200-1.1447%200.36736-1.8542%200.81635-1.5767%200.44899%200.27749%201.5191-1.046%202.3781-2.941%201.2158-2.6824%201.275-3.4455%200.26698-3.4455-0.7121%200-1.4875%200.5625-1.723%201.25-1.3539%203.9511-11.385-39.693-14.286-62.157l-1.368-10.593%200.37967%2010c0.51206%2013.487%205.5806%2038.798%2012.514%2062.493%201.2478%204.2643%201.2661%204.9404%200.0831%203.0709-0.70095-1.1077-1.2282-1.1704-2.3079-0.27424-1.1575%200.96065-1.324%200.64698-0.96271-1.8143%200.24021-1.6367%200.0482-2.9858-0.42675-2.998-0.47493-0.0122-1.9885-0.95412-3.3635-2.0931-1.7885-1.4815-1.9782-1.9019-0.66644-1.4771%201.0085%200.32657%201.6639%200.25596%201.4566-0.15691-8.5314-16.99-11.952-33.628-11.87-57.739%200.0614-18.043%200.65624-20.888%204.4601-21.335%207.1233-0.83622%2011.788%207.2931%2011.99%2020.896%200.0995%206.7048%200.41125%208.5089%201.3385%207.7456%201.6189-1.3328%202.7298%203.0911%201.9629%207.8168-0.49112%203.0264-0.36328%203.3534%200.90085%202.3043%201.1834-0.98217%201.3868-0.94897%201.0338%200.1688-0.24165%200.76529-0.73025%202.7075-1.0858%204.3161-0.54261%202.455-0.41766%202.7348%200.7782%201.7423%201.1895-0.98722%201.6353-0.18963%202.7012%204.8334%201.5414%207.2635%200.83326%2014.446-1.9652%2019.931-1.1416%202.2376-1.649%204.0684-1.1278%204.0684%201.6726%200%204.659-4.6191%2010.471-16.196%206.6604-13.266%2015.19-25.095%2027.19-37.705%2015.39-16.173%2021.504-19.166%2024.479-11.986%201.047%202.5278%201.06%204.0393%200.0665%207.7627-2.0495%207.6813-10.5%2019.159-15.205%2020.653-2.5932%200.82304-1.4824%202.4338%201.1954%201.7336%202.0694-0.54117%202.0658-0.49392-0.23563%203.0169-1.2859%201.9617-3.6686%204.3527-5.295%205.3134-2.5848%201.5269-2.7263%201.8276-1.1244%202.3896%201.576%200.55283%201.3578%200.9467-1.5584%202.8134-2.2594%201.4463-2.8101%202.1762-1.6502%202.1875%201.4874%200.0144%201.3089%200.71866-1.2265%204.8392-5.5503%209.0204-14.408%2016.082-20.264%2016.156-0.9625%200.0121-1.75%200.47196-1.75%201.022%200%201.3119%205.5942%201.2875%208.0657-0.0352%201.0638-0.56935%201.9343-0.75399%201.9343-0.4103%200%201.1947-4.5108%204.3792-6.25%204.4122-1.9687%200.0374-2.4476%202.0155-0.5%202.0651%200.70412%200.0179%200.40229%200.67298-0.69113%201.5-1.0894%200.82402-4.077%201.4682-6.809%201.4682-3.4249%200-4.6564%200.34222-4.1544%201.1545%200.43457%200.70315%200.2751%200.88354-0.40791%200.46142-2.661-1.6446%2023.158-44.042%2037.881-62.204%209.6668-11.925%2010.352-13.178%202.9574-5.4121-11.195%2011.758-25.777%2033.509-40.138%2059.871-6.1651%2011.317-7.6224%2014.756-6.8581%2016.184%200.53378%200.99738%200.94199%202.4055%200.90712%203.1292-0.0349%200.72366-0.52319%200.19074-1.0852-1.1843-0.97068-2.375-1.2182-2.1124-4.9487%205.25-2.1598%204.2625-4.1515%207.75-4.426%207.75-0.27449%200%201.306-3.59%203.5121-7.9778zm9.0901%205.3096c-0.0434-0.64252-0.33793-1.9925-0.65446-3-0.54705-1.7412-0.51883-1.7434%200.57078-0.0441%200.63045%200.98322%200.92496%202.3332%200.65445%203-0.35498%200.87499-0.51379%200.88727-0.57077%200.0441z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23ee8a2e%22%20d%3D%22m233.34%20578.74c2.2061-4.3878%204.0112-8.9144%204.0112-10.059%200-1.1447%200.36736-1.8542%200.81635-1.5767%200.44899%200.27749%201.5191-1.046%202.3781-2.941%201.2158-2.6824%201.275-3.4455%200.26698-3.4455-0.7121%200-1.4875%200.5625-1.723%201.25-1.4444%204.2152-12.641-45.572-14.224-63.25l-0.67174-7.5%203.9696-3.8462%203.9696-3.8462%201.2942%203.8462c0.71181%202.1154%201.3235%207.2934%201.3593%2011.507%200.0499%205.8679%200.34798%207.4268%201.2739%206.6618%201.6189-1.3376%202.7301%203.0854%201.9629%207.8133-0.49112%203.0264-0.36328%203.3534%200.90085%202.3043%201.1834-0.98217%201.3868-0.94897%201.0338%200.1688-0.24165%200.76529-0.73025%202.7075-1.0858%204.3161-0.54261%202.455-0.41766%202.7348%200.7782%201.7423%201.1895-0.98722%201.6353-0.18963%202.7012%204.8334%201.5414%207.2635%200.83326%2014.446-1.9652%2019.931-1.1416%202.2376-1.649%204.0684-1.1278%204.0684%201.6726%200%204.659-4.6191%2010.471-16.196%203.1212-6.217%208.5466-15.168%2012.056-19.89%206.4511-8.6802%2022.123-25.914%2023.566-25.914%200.4305%200%201.0767%201.1712%201.4359%202.6026%200.51967%202.0705-0.0742%203.4504-2.9048%206.75-10.644%2012.407-25.113%2034.515-37.644%2057.518-6.1651%2011.317-7.6224%2014.756-6.8581%2016.184%200.53378%200.99738%200.94199%202.4055%200.90712%203.1292-0.0349%200.72366-0.52319%200.19074-1.0852-1.1843-0.97068-2.375-1.2182-2.1124-4.9487%205.25-2.1598%204.2625-4.1515%207.75-4.426%207.75-0.27449%200%201.306-3.59%203.5121-7.9778zm9.0901%205.3096c-0.0434-0.64252-0.33793-1.9925-0.65446-3-0.54705-1.7412-0.51883-1.7434%200.57078-0.0441%200.63045%200.98322%200.92496%202.3332%200.65445%203-0.35498%200.87499-0.51379%200.88727-0.57077%200.0441zm-9.2887-21.356c0.24021-1.6367%200.0482-2.9858-0.42675-2.998-0.47493-0.0122-1.9885-0.95412-3.3635-2.0931-1.7885-1.4815-1.9782-1.9019-0.66644-1.4771%201.0085%200.32657%201.6639%200.25596%201.4566-0.15691-8.9594-17.843-12.488-36.385-11.898-62.524l0.10773-4.7731%202.3532%201.5419c2.083%201.3648%202.42%202.5444%202.9354%2010.273%200.87913%2013.184%206.336%2039.513%2012.689%2061.225%201.2478%204.2643%201.2661%204.9404%200.0831%203.0709-0.70095-1.1077-1.2282-1.1704-2.3079-0.27424-1.1575%200.96065-1.324%200.64698-0.96271-1.8143zm11.943%200.42401c-1.8279-1.8279%2024.6-44.87%2037.239-60.65l6.2075-7.75h5.9103c7.0286%200%207.2251%200.58116%202.5402%207.5134-4.0552%206.0005-8.1478%2010.199-10.746%2011.023-2.5763%200.81769-1.4423%202.422%201.2199%201.7258%202.0694-0.54117%202.0658-0.49392-0.23563%203.0169-1.2859%201.9617-3.6686%204.3527-5.295%205.3134-2.5848%201.5269-2.7263%201.8276-1.1244%202.3896%201.576%200.55283%201.3578%200.9467-1.5584%202.8134-2.2594%201.4463-2.8101%202.1762-1.6502%202.1875%201.4874%200.0144%201.3089%200.71866-1.2265%204.8392-5.5503%209.0204-14.408%2016.082-20.264%2016.156-0.9625%200.0121-1.75%200.47196-1.75%201.022%200%201.3119%205.5942%201.2875%208.0657-0.0352%201.0638-0.56935%201.9343-0.75399%201.9343-0.4103%200%201.1947-4.5108%204.3792-6.25%204.4122-1.9687%200.0374-2.4476%202.0155-0.5%202.0651%200.70412%200.0179%200.40229%200.67298-0.69113%201.5-1.0894%200.82402-4.077%201.4682-6.809%201.4682-2.9906%200-4.6295%200.38564-4.2498%201%200.67773%201.0966%200.18616%201.3528-0.76691%200.39976z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23a0579b%22%20d%3D%22m233.34%20578.74c2.2061-4.3878%204.0112-8.9144%204.0112-10.059%200-1.1447%200.36736-1.8542%200.81635-1.5767%200.44899%200.27749%201.5191-1.046%202.3781-2.941%201.2158-2.6824%201.275-3.4455%200.26698-3.4455-0.7121%200-1.4875%200.5625-1.723%201.25-1.4255%204.1602-13.738-50.443-13.738-60.925%200-3.9763%200.2069-4.3251%202.5657-4.3251%201.4112%200%203.4251-0.45991%204.4754-1.022%201.6085-0.86085%202.0116-0.61573%202.5563%201.5543%200.35564%201.417%200.38906%204.1634%200.0743%206.1032-0.47971%202.9561-0.34429%203.3376%200.83677%202.3575%201.1386-0.94491%201.5364-0.66207%202.0723%201.4731%200.36478%201.4534%200.40568%204.2296%200.0909%206.1694-0.49112%203.0264-0.36327%203.3534%200.90086%202.3043%201.1834-0.98217%201.3868-0.94897%201.0338%200.1688-0.24166%200.76529-0.73026%202.7075-1.0858%204.3161-0.54261%202.455-0.41766%202.7348%200.7782%201.7423%201.1895-0.98722%201.6353-0.18963%202.7012%204.8334%201.5414%207.2635%200.83326%2014.446-1.9652%2019.931-1.1416%202.2376-1.649%204.0684-1.1278%204.0684%201.6726%200%204.659-4.6191%2010.471-16.196%205.815-11.583%2014.544-24.164%2023.356-33.663%204.7543-5.1249%205.0822-5.2996%207.5078-4l2.5364%201.359-7.9171%2010.904c-9.8621%2013.583-20.076%2029.991-29.524%2047.428-5.6996%2010.52-7.063%2013.813-6.3051%2015.229%200.53191%200.99388%200.93859%202.3991%200.90372%203.1228-0.0349%200.72366-0.52319%200.19074-1.0852-1.1843-0.97068-2.375-1.2182-2.1124-4.9487%205.25-2.1598%204.2625-4.1515%207.75-4.426%207.75-0.27449%200%201.306-3.59%203.5121-7.9778zm9.0901%205.3096c-0.0434-0.64252-0.33793-1.9925-0.65446-3-0.54705-1.7412-0.51883-1.7434%200.57078-0.0441%200.63045%200.98322%200.92496%202.3332%200.65445%203-0.35498%200.87499-0.51379%200.88727-0.57077%200.0441zm-9.2887-21.356c0.24021-1.6367%200.0482-2.9858-0.42675-2.998-0.47493-0.0122-1.9885-0.95412-3.3635-2.0931-1.7885-1.4815-1.9782-1.9019-0.66644-1.4771%201.0085%200.32657%201.6639%200.25596%201.4566-0.15691-7.5974-15.13-11.778-32.994-11.786-50.362-0.004-8.5328%200.0177-8.6072%202.3774-8.1561%202.1048%200.40235%202.4608%201.1704%203.0642%206.6113%201.4438%2013.019%207.1395%2039.22%2012.532%2057.649%201.2478%204.2643%201.2661%204.9404%200.0831%203.0709-0.70095-1.1077-1.2282-1.1704-2.3079-0.27424-1.1575%200.96065-1.324%200.64698-0.96271-1.8143zm11.943%200.42401c-1.6524-1.6524%2024.342-44.54%2035.278-58.204%204.2053-5.2544%204.2649-5.2867%206.367-3.4544%201.1671%201.0173%203.3335%202.4537%204.8144%203.1922%202.6064%201.2997%202.6383%201.4164%201%203.6512-0.93085%201.2697-3.1274%203.0951-4.8813%204.0563-3.4635%201.8982-3.5904%203.506-0.20681%202.6212%202.0694-0.54117%202.0658-0.49392-0.23563%203.0169-1.2859%201.9617-3.6686%204.3527-5.295%205.3134-2.5848%201.5269-2.7263%201.8276-1.1244%202.3896%201.576%200.55283%201.3578%200.9467-1.5584%202.8134-2.2594%201.4463-2.8101%202.1762-1.6502%202.1875%201.4874%200.0144%201.3089%200.71866-1.2265%204.8392-5.5503%209.0204-14.408%2016.082-20.264%2016.156-0.9625%200.0121-1.75%200.47196-1.75%201.022%200%201.3119%205.5942%201.2875%208.0657-0.0352%201.0638-0.56935%201.9343-0.75399%201.9343-0.4103%200%201.1947-4.5108%204.3792-6.25%204.4122-1.9687%200.0374-2.4476%202.0155-0.5%202.0651%200.70412%200.0179%200.40229%200.67298-0.69113%201.5-1.0894%200.82402-4.077%201.4682-6.809%201.4682-2.9906%200-4.6295%200.38564-4.2498%201%200.67773%201.0966%200.18616%201.3528-0.76691%200.39976z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23d9555d%22%20d%3D%22m232.38%20581.22c0-0.55%200.43621-1.675%200.96937-2.5s0.96937-1.05%200.96937-0.5-0.43621%201.675-0.96937%202.5-0.96937%201.05-0.96937%200.5zm1.9694-18.927c0-0.78508-1.1097-2.3003-2.4661-3.3672s-2.1836-2.2223-1.8383-2.5676c0.34526-0.34526-0.53192-2.7675-1.9493-5.3828-5.633-10.394-9.7349-29.495-9.7423-45.366-0.004-8.5328%200.0177-8.6072%202.3774-8.1561%202.1048%200.40235%202.4608%201.1704%203.0642%206.6113%201.3157%2011.864%207.161%2039.457%2012.161%2057.406%200.38001%201.3642%200.18716%202.25-0.48987%202.25-0.61415%200-1.1166-0.64234-1.1166-1.4274zm13.085-1.4621c-1.1463-0.75519-0.12074-3.2717%205.4085-13.271%207.5732-13.696%2020.99-34.488%2027.517-42.643%204.2053-5.2544%204.2649-5.2867%206.367-3.4544%201.1671%201.0173%203.3335%202.4537%204.8144%203.1922%202.6064%201.2997%202.6383%201.4164%201%203.6512-0.93085%201.2697-3.1274%203.0951-4.8813%204.0563-3.4635%201.8982-3.5904%203.506-0.20681%202.6212%202.0694-0.54117%202.0658-0.49392-0.23563%203.0169-1.2859%201.9617-3.6686%204.3527-5.295%205.3134-2.5848%201.5269-2.7263%201.8276-1.1244%202.3896%201.576%200.55283%201.3578%200.9467-1.5584%202.8134-2.2594%201.4463-2.8101%202.1762-1.6502%202.1875%201.4874%200.0144%201.3089%200.71866-1.2265%204.8392-5.7488%209.343-14.425%2016.094-20.764%2016.156-1.2375%200.0121-2.25%200.52921-2.25%201.1492%200%200.75009%201.6731%200.96646%205.0007%200.64673%204.0039-0.38473%204.7874-0.22358%203.9309%200.80849-0.58837%200.70895-2.3887%201.5787-4.0007%201.9327-3.1838%200.69928-4.0133%202.466-1.1809%202.5152%201.4792%200.0257%201.5179%200.16633%200.25%200.90866-2.5006%201.4641-8.4104%202.1624-9.9146%201.1714zm-10.35-2.8605c-0.27024-1.5125-1.9027-7.925-3.6276-14.25-3.8171-13.997-8.108-36.524-8.108-42.567%200-4.0926%200.19724-4.4334%202.5657-4.4334%201.4112%200%203.4251-0.45991%204.4754-1.022%201.6085-0.86085%202.0116-0.61573%202.5563%201.5543%200.35564%201.417%200.38906%204.1634%200.0743%206.1032-0.47971%202.9561-0.34429%203.3376%200.83677%202.3575%201.1386-0.94491%201.5364-0.66207%202.0723%201.4731%200.36478%201.4534%200.40568%204.2296%200.0909%206.1694-0.49112%203.0264-0.36327%203.3534%200.90086%202.3043%201.1834-0.98217%201.3868-0.94897%201.0338%200.1688-0.24166%200.76529-0.73026%202.7075-1.0858%204.3161-0.54261%202.455-0.41766%202.7348%200.7782%201.7423%201.1895-0.98722%201.6353-0.18963%202.7012%204.8334%201.6176%207.6223%200.76802%2014.931-2.3929%2020.587-1.3565%202.4271-2.0831%204.4129-1.6147%204.4129%201.1318%200%208.0075-8.072%208.0075-9.4007%200-0.57236%202.0354-5.1039%204.5232-10.07%204.7721-9.5263%2013.911-22.441%2022.211-31.388%204.7543-5.1249%205.0822-5.2996%207.5078-4l2.5364%201.359-7.9327%2010.926c-7.9323%2010.925-20.408%2030.492-27.181%2042.63-1.9776%203.5442-4.045%206.3369-4.5942%206.206-0.54923-0.13091-0.74165%200.43159-0.4276%201.25%200.42714%201.1131-0.18318%201.488-2.4225%201.488-2.4798%200-3.0778-0.47187-3.4848-2.75zm8.3919-7c1.2439-1.5861%201.2085-1.6214-0.37756-0.37756-0.9625%200.75485-1.75%201.5424-1.75%201.75%200%200.82304%200.82119%200.29331%202.1276-1.3724z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23e56636%22%20d%3D%22m232.38%20581.22c0-0.55%200.43621-1.675%200.96937-2.5s0.96937-1.05%200.96937-0.5-0.43621%201.675-0.96937%202.5-0.96937%201.05-0.96937%200.5zm1.9694-18.927c0-0.78508-1.1097-2.3003-2.4661-3.3672s-2.2127-2.1932-1.903-2.5029c0.30969-0.30968-0.82795-3.4069-2.5281-6.8828-5.2654-10.765-9.0932-30.085-9.1-45.931-0.003-6.4246%200.0644-6.5985%202.3772-6.1564%202.1594%200.4128%202.4441%201.1183%203.0718%207.6113%201.2154%2012.574%205.1314%2030.731%2012.165%2056.406%200.37202%201.358%200.1737%202.25-0.50025%202.25-0.61415%200-1.1166-0.64234-1.1166-1.4274zm13.104-1.4505c-1.1331-0.7471-0.60134-2.3678%202.8256-8.6118%2010.132-18.462%2019.444-33.053%2029.884-46.83%204.3859-5.7876%204.4216-5.8091%206.5482-3.9544%201.176%201.0257%203.3498%202.469%204.8307%203.2075%202.6064%201.2997%202.6383%201.4164%201%203.6512-0.93085%201.2697-3.155%203.1099-4.9424%204.0892-3.581%201.9619-4.4062%203.8275-1.25%202.8258%202.4434-0.77549%202.495-0.14656%200.29394%203.5796-0.93834%201.5885-3.3008%203.6544-5.25%204.591-3.3984%201.6329-3.4459%201.7267-1.1565%202.2847%202.2951%200.55931%202.2467%200.65759-1.25%202.5407-3.5284%201.9002-5.1631%204.3035-2.1374%203.1424%200.825-0.31658%201.5-0.24622%201.5%200.15636%200%201.1908-6.5289%2010.495-9.2884%2013.237-3.1139%203.094-10.659%206.968-13.571%206.968-1.1773%200-2.1405%200.50725-2.1405%201.1272%200%200.75009%201.6731%200.96646%205.0007%200.64673%204.0039-0.38473%204.7874-0.22358%203.9309%200.80849-0.58837%200.70895-2.3887%201.5787-4.0007%201.9327-3.1838%200.69928-4.0133%202.466-1.1809%202.5152%201.4792%200.0257%201.5179%200.16633%200.25%200.90866-2.4882%201.4568-8.4073%202.1645-9.8958%201.183zm-10.397-2.8721c-0.28577-1.5125-2.0781-8.8284-3.9828-16.257-3.797-14.809-7.7246-35.885-7.7246-41.451%200-3.1933%200.27052-3.5432%202.75-3.557%201.5125-0.008%203.4131-0.43467%204.2236-0.94722%203.1162-1.9707%204.1457%204.8974%201.5007%2010.012-1.7991%203.479-1.3116%203.7654%201.4196%200.83387l1.9718-2.1165%200.7143%203.8075c0.41102%202.191%200.25033%205.0367-0.37849%206.7026-0.93555%202.4786-0.86844%202.809%200.46645%202.2968%201.3089-0.50226%201.4477-0.004%200.86477%203.1034-0.60046%203.2007-0.49366%203.5351%200.78905%202.4706%201.2738-1.0572%201.653-0.22631%202.6826%205.8779%201.3301%207.8859%200.41614%2013.825-3.0354%2019.724-1.0458%201.7875-1.5018%203.25-1.0132%203.25%201.615%200%207.5499-7.7426%208.934-11.655%203.177-8.9807%2016.825-29.501%2026.607-40.005%204.0422-4.3404%204.3511-4.4839%206.8431-3.1782l2.6098%201.3674-5.7565%207.4853c-5.5704%207.2434-16.25%2022.982-18.921%2027.883-0.71861%201.3188-2.8308%204.9188-4.6938%208s-4.7645%208.0772-6.4478%2011.102c-1.6833%203.025-3.51%205.3929-4.0594%205.262-0.5494-0.13091-0.74195%200.43159-0.4279%201.25%200.42714%201.1131-0.18318%201.488-2.4225%201.488-2.473%200-3.0838-0.47816-3.5131-2.75zm8.4202-7c1.2439-1.5861%201.2085-1.6214-0.37756-0.37756-0.9625%200.75485-1.75%201.5424-1.75%201.75%200%200.82304%200.82119%200.29331%202.1276-1.3724z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23953a8a%22%20d%3D%22m232.38%20581.22c0-0.55%200.43621-1.675%200.96937-2.5s0.96937-1.05%200.96937-0.5-0.43621%201.675-0.96937%202.5-0.96937%201.05-0.96937%200.5zm1.9694-18.927c0-0.78508-1.1097-2.3003-2.4661-3.3672s-2.1836-2.2223-1.8383-2.5676c0.34526-0.34526-0.52619-2.7675-1.9366-5.3828-4.3364-8.041-6.7059-17.289-9.1878-35.861-0.53866-4.0306-0.49396-4.104%202.4378-4%201.6426%200.0583%202.9875%200.19557%202.9888%200.30515%200.0403%203.5253%206.5198%2031.436%2011.619%2050.051%200.37202%201.358%200.1737%202.25-0.50025%202.25-0.61415%200-1.1166-0.64234-1.1166-1.4274zm13.16-1.4157c-1.0904-0.72083-0.96415-1.6213%200.67868-4.8416%203.6946-7.2419%2015.279-26.709%2020.784-34.927l5.4342-8.112%205.5666%201.294c3.0616%200.7117%206.1987%201.0515%206.9712%200.75503%203.9642-1.5212-1.2122%206.2605-5.5515%208.3455-3.3984%201.6329-3.4459%201.7267-1.1565%202.2847%202.2951%200.55931%202.2467%200.65759-1.25%202.5407-3.5284%201.9002-5.1631%204.3035-2.1374%203.1424%200.825-0.31658%201.5-0.24622%201.5%200.15636%200%201.1908-6.5289%2010.495-9.2884%2013.237-3.1139%203.094-10.659%206.968-13.571%206.968-1.1773%200-2.1405%200.50725-2.1405%201.1272%200%200.75009%201.6731%200.96646%205.0007%200.64673%204.0039-0.38473%204.7874-0.22358%203.9309%200.80849-0.58837%200.70895-2.3887%201.5787-4.0007%201.9327-3.1838%200.69928-4.0133%202.466-1.1809%202.5152%201.4792%200.0257%201.5179%200.16633%200.25%200.90866-2.4503%201.4347-8.398%202.1708-9.8395%201.2178zm-10.808-4.4068c-3.9503-15.231-8.4522-35.009-8.9341-39.25-0.55928-4.9215-0.50815-5.0392%203.2567-7.4996%202.1037-1.3748%204.347-3.1691%204.9851-3.9874%201.7148-2.199%202.9854%205.4383%201.5413%209.2642-0.93555%202.4786-0.86844%202.809%200.46645%202.2968%201.3089-0.50226%201.4477-0.004%200.86477%203.1034-0.60046%203.2007-0.49366%203.5351%200.78905%202.4706%201.2738-1.0572%201.653-0.22631%202.6826%205.8779%201.3301%207.8859%200.41614%2013.825-3.0354%2019.724-1.0458%201.7875-1.5018%203.25-1.0132%203.25%201.615%200%207.5499-7.7426%208.934-11.655%202.7833-7.8678%2019.916-34.345%2022.223-34.345%200.41358%200%201.0679%201.0125%201.4541%202.25s1.0456%202.475%201.4654%202.75c0.41975%200.275-2.3409%205.1993-6.1348%2010.943-3.7939%205.7436-6.898%2010.565-6.898%2010.715%200%200.14937-1.9826%203.55-4.4059%207.557-2.4232%204.007-5.7825%209.7605-7.4651%2012.785-1.6826%203.025-3.5088%205.3929-4.0581%205.262-0.5494-0.13091-0.74195%200.43159-0.4279%201.25%200.42404%201.105-0.17012%201.488-2.3086%201.488-2.5482%200-3.0065-0.48911-3.9819-4.25zm8.7751-5.5c1.2439-1.5861%201.2085-1.6214-0.37756-0.37756-0.9625%200.75485-1.75%201.5424-1.75%201.75%200%200.82304%200.82119%200.29331%202.1276-1.3724z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23b93368%22%20d%3D%22m229.62%20550.73c-4.5614-2.7739-7.6998-13.229-10.692-35.62-0.53866-4.0306-0.49396-4.104%202.4378-4%201.6426%200.0583%202.9875%200.19557%202.9888%200.30515%200.0207%201.8074%204.784%2024.184%206.6332%2031.161%201.3645%205.1484%202.3225%209.5192%202.1287%209.713-0.19376%200.19375-1.7671-0.50814-3.4964-1.5598zm3.3618-8.7222c-3.6221-15.214-5.6262-25.062-5.6183-27.607%200.004-1.4075%201.3383-3.0738%203.75-4.6842%202.0587-1.3748%204.2652-3.1691%204.9033-3.9874%201.7148-2.199%202.9854%205.4383%201.5413%209.2642-0.93555%202.4786-0.86844%202.809%200.46645%202.2968%201.3089-0.50226%201.4477-0.004%200.86477%203.1034-0.60046%203.2007-0.49366%203.5351%200.78905%202.4706%202.2862-1.8974%204.3241%2011.23%202.7275%2017.571-1.3475%205.3514-3.3184%209.43-5.3861%2011.146-1.2562%201.0426-1.8405-0.3426-4.038-9.5728zm18.076%2010.076c-0.64872-0.64871%2010.414-19.771%2017.923-30.98l5.4342-8.112%205.5666%201.294c3.0616%200.7117%206.1987%201.0515%206.9712%200.75503%203.9642-1.5212-1.2122%206.2605-5.5515%208.3455-3.3984%201.6329-3.4459%201.7267-1.1565%202.2847%202.2951%200.55931%202.2467%200.65759-1.25%202.5407-3.5284%201.9002-5.1631%204.3035-2.1374%203.1424%200.825-0.31658%201.5-0.24622%201.5%200.15636%200%201.1908-6.5289%2010.495-9.2884%2013.237-4.225%204.198-16.251%209.0958-18.011%207.3356zm-3.7203-5.4144c-1.6525-3.9895-0.58695-7.2754%206.0354-18.612%205.1782-8.8643%2014.889-22.341%2016.097-22.341%200.41358%200%201.0679%201.0125%201.4541%202.25s1.0456%202.475%201.4654%202.75c0.41975%200.275-2.3409%205.1993-6.1348%2010.943-3.7939%205.7436-6.898%2010.565-6.898%2010.715%200%200.41204-9.2079%2015.725-10.011%2016.648-0.38541%200.4431-1.2894-0.61555-2.0089-2.3526z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23d0334d%22%20d%3D%22m268.92%20543.41c0.39936-1.0407%200.16314-1.6939-0.61257-1.6939-0.69443%200-2.7035-1.099-4.4647-2.4423-2.5028-1.909-3.4785-2.182-4.4679-1.25-1.964%201.8499%203.5846-7.9204%209.6087-16.92l5.4301-8.112%205.5666%201.294c3.0616%200.7117%206.1987%201.0515%206.9712%200.75503%203.9642-1.5212-1.2122%206.2605-5.5515%208.3455-3.3984%201.6329-3.4459%201.7267-1.1565%202.2847%202.2951%200.55931%202.2467%200.65759-1.25%202.5407-3.5284%201.9002-5.1631%204.3035-2.1374%203.1424%202.1429-0.82232%201.8896%200.0794-1.5114%205.3794-3.4044%205.3054-7.5528%209.6161-6.4246%206.6761zm-46.308-7.299c-1.065-3.6153-2.3791-11.094-3.6902-21.001-0.53331-4.0299-0.48805-4.104%202.4446-4%202.6018%200.0922%203.0678%200.55823%203.6051%203.6059%200.33938%201.925%201.4647%207.712%202.5008%2012.86%201.036%205.148%201.8837%209.5355%201.8837%209.75%200%200.21446-1.0875%200.38992-2.4167%200.38992s-2.5884%200.5152-2.7983%201.1449c-0.20989%200.62969-0.89795-0.60781-1.529-2.75zm6.8793-9.4428c-2.8681-13.469-2.8186-13.987%201.6215-16.952%202.0587-1.3748%204.2652-3.1691%204.9033-3.9874%201.7148-2.199%202.9854%205.4383%201.5413%209.2642-0.93555%202.4786-0.86844%202.809%200.46645%202.2968%201.3089-0.50226%201.4477-0.004%200.86477%203.1034-0.60089%203.203-0.4943%203.5356%200.79119%202.4688%201.2587-1.0446%201.5813-0.65346%202.1116%202.5604%201.4575%208.8336%201.4278%209.864-0.28538%209.8878-0.90753%200.0126-3.5016%200.32963-5.7647%200.70445l-4.1146%200.68151-2.1354-10.028zm25.578%206.8509c-0.98257-1.0318-2.2201-1.608-2.75-1.2804-0.52994%200.32752-0.96237%200.23144-0.96096-0.21352%200.008-2.4071%2016.461-26.309%2018.111-26.309%200.41358%200%201.0679%201.0125%201.4541%202.25s1.0456%202.475%201.4654%202.75c0.41975%200.275-2.3409%205.1993-6.1348%2010.943-3.7939%205.7436-6.898%2010.751-6.898%2011.128%200%202.0224-2.63%202.4718-4.2865%200.73246z%22%2F%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fsvg%3E"),sm.registerType(vp.HTTP_FILE,"data:image/svg+xml,%3Csvg%20id%3D%22svg2%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%22145mm%22%20width%3D%22145mm%22%20version%3D%221.1%22%20viewBox%3D%220%200%20513.77953%20513.77951%22%3E%20%3Cg%20id%3D%22layer1%22%20transform%3D%22translate%28-87.403%20-17.44%29%22%3E%20%20%3Cg%20id%3D%22text3336%22%3E%20%20%20%3Cpath%20id%3D%22path3372%22%20d%3D%22m145.34%20318.08v-51.12q0-10.98-3.06-15.84t-11.16-4.86q-5.94%200-10.98%204.14-4.86%203.96-6.48%2010.26v57.42h-23.4v-126h23.4v46.08h0.72q4.32-5.76%2010.62-9.18t16.02-3.42q6.84%200%2012.06%201.8t8.64%205.94q3.6%204.14%205.22%2011.34%201.8%207.02%201.8%2017.46v55.98h-23.4z%22%2F%3E%20%20%20%3Cpath%20id%3D%22path3374%22%20d%3D%22m178.99%20228.08h12.42v-16.92l23.4-6.66v23.58h21.96v19.8h-21.96v34.56q0%209.36%201.8%2013.5%201.98%203.96%207.2%203.96%203.6%200%206.12-0.72%202.7-0.72%205.94-2.16l4.14%2018q-4.86%202.34-11.34%203.96t-13.14%201.62q-12.42%200-18.36-6.3-5.76-6.48-5.76-21.06v-45.36h-12.42v-19.8z%22%2F%3E%20%20%20%3Cpath%20id%3D%22path3376%22%20d%3D%22m240.51%20228.08h12.42v-16.92l23.4-6.66v23.58h21.96v19.8h-21.96v34.56q0%209.36%201.8%2013.5%201.98%203.96%207.2%203.96%203.6%200%206.12-0.72%202.7-0.72%205.94-2.16l4.14%2018q-4.86%202.34-11.34%203.96t-13.14%201.62q-12.42%200-18.36-6.3-5.76-6.48-5.76-21.06v-45.36h-12.42v-19.8z%22%2F%3E%20%20%20%3Cpath%20id%3D%22path3378%22%20d%3D%22m312.8%20228.08h17.1l2.7%2010.8h0.72q4.68-6.84%2010.98-10.08%206.48-3.24%2015.66-3.24%2016.92%200%2025.38%2010.8%208.46%2010.62%208.46%2034.38%200%2011.52-2.7%2020.88-2.7%209.18-8.1%2015.66-5.22%206.48-12.96%209.9-7.56%203.42-17.46%203.42-5.58%200-9.18-0.9-3.6-0.72-7.2-2.52v36.9h-23.4v-126zm40.14%2017.28q-6.84%200-10.8%203.42-3.78%203.42-5.94%2010.26v37.44q2.52%201.98%205.4%203.24%203.06%201.08%207.92%201.08%2010.08%200%2015.12-7.02%205.04-7.2%205.04-23.58%200-11.88-3.96-18.36t-12.78-6.48z%22%2F%3E%20%20%20%3Cpath%20id%3D%22path3380%22%20d%3D%22m416.66%20241.04q0-6.3%203.96-9.9%203.96-3.78%2010.44-3.78%206.84%200%2010.8%203.78%203.96%203.6%203.96%209.9t-3.96%2010.08-10.8%203.78q-6.48%200-10.44-3.78t-3.96-10.08zm0%2065.16q0-6.3%203.96-9.9%203.96-3.78%2010.44-3.78%206.84%200%2010.8%203.78%203.96%203.6%203.96%209.9t-3.96%2010.08-10.8%203.78q-6.48%200-10.44-3.78t-3.96-10.08z%22%2F%3E%20%20%20%3Cpath%20id%3D%22path3382%22%20d%3D%22m508.38%20189.92%2017.64%207.92-64.26%20145.44-17.64-8.28%2064.26-145.08z%22%2F%3E%20%20%20%3Cpath%20id%3D%22path3384%22%20d%3D%22m581.85%20189.92%2017.64%207.92-64.26%20145.44-17.64-8.28%2064.26-145.08z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Ctext%20id%3D%22text3340%22%20style%3D%22word-spacing%3A0px%3Bletter-spacing%3A0px%22%20xml%3Aspace%3D%22preserve%22%20font-size%3D%2240px%22%20font-stretch%3D%22condensed%22%20line-height%3D%22125%25%22%20y%3D%2292.362206%22%20x%3D%22-511.42856%22%20font-family%3D%22Impact%22%20fill%3D%22%23000000%22%3E%3Ctspan%20id%3D%22tspan3342%22%20x%3D%22-511.42856%22%20y%3D%2292.362206%22%2F%3E%3C%2Ftext%3E%20%20%3CflowRoot%20id%3D%22flowRoot3344%22%20style%3D%22word-spacing%3A0px%3Bletter-spacing%3A0px%22%20xml%3Aspace%3D%22preserve%22%20font-size%3D%2240px%22%20font-stretch%3D%22condensed%22%20line-height%3D%22125%25%22%20font-family%3D%22Impact%22%20fill%3D%22%23000000%22%3E%3CflowRegion%20id%3D%22flowRegion3346%22%3E%3Crect%20id%3D%22rect3348%22%20height%3D%2257.143%22%20width%3D%22225.71%22%20y%3D%22489.51%22%20x%3D%2274.286%22%2F%3E%3C%2FflowRegion%3E%3CflowPara%20id%3D%22flowPara3350%22%2F%3E%3C%2FflowRoot%3E%20%3C%2Fg%3E%3C%2Fsvg%3E"),sm.registerType(vp.ORACLE_OBJECT,"data:image/svg+xml,%3Csvg%20width%3D%2236%22%20height%3D%2236%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M0%200h36v36H0V0z%22%20fill%3D%22%23C74634%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M21.541%2022.139c2.277%200%204.126-1.855%204.126-4.143a4.134%204.134%200%2000-4.126-4.139H14.46a4.134%204.134%200%2000-4.128%204.139%204.135%204.135%200%20004.128%204.143h7.082zm-7.245%202.257c-3.52%200-6.376-2.865-6.376-6.4%200-3.534%202.855-6.393%206.376-6.393h7.408c3.52%200%206.373%202.86%206.373%206.393%200%203.54-2.853%206.403-6.373%206.403l-7.409-.003z%22%20fill%3D%22%23fff%22%2F%3E%3C%2Fsvg%3E");class om{static removeReferenceFromStages(e,t){(t||[]).forEach((t=>{const n=$m.pipeline.getStageConfig(t);m(n,["artifactRemover"],pe)(t,e)}))}static removeReferencesFromStages(e,t){e.forEach((e=>om.removeReferenceFromStages(e,t)))}static removeArtifactFromField(e,t,n){const a=m(t,e);Array.isArray(a)?g(t,e,a.filter((e=>e!==n))):a===n&&g(t,e,null)}static removeArtifactFromFields(e){return(t,n)=>e.forEach((e=>this.removeArtifactFromField(e,t,n)))}}const lm=e=>e.artifacts.map(((e,t)=>{const{location:n,reference:a,type:i}=e;let{name:r}=e;const s=sm.getPath(i),o=`${n||""}${i||""}${a||""}`||String(t);let l=i;if(C(i)&&i.length>0){const e=i.match(vp.KUBERNETES);if(null!=e&&e[1].length>0){r=`${e[1].substr(0,1).toUpperCase()+e[1].substr(1)} ${r}`,l=r}}return ot.createElement("div",{key:o,className:"artifact-list-item",title:l},s&&ot.createElement("img",{className:"artifact-list-item-icon",width:"20",height:"20",src:s}),ot.createElement("span",{className:"artifact-list-item-name"},r,e.version&&ot.createElement("span",null," - ",e.version)))}));oi(".execution-artifacts {\n background: var(--color-alabaster);\n display: flex;\n margin-right: 0;\n padding: 6px;\n}\n.artifact-list-container {\n background: var(--color-white);\n padding: 8px 6px 6px;\n}\n.artifact-list-container > h5 {\n margin-top: 0;\n}\n.artifact-list-item {\n height: 28px;\n position: relative;\n line-height: 28px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n margin-bottom: 0.1em;\n}\n.artifact-list-item-icon {\n position: absolute;\n top: 4px;\n}\n.artifact-list-item-name {\n padding-left: 24px;\n}\n");class cm extends ot.Component{extractBoundArtifactsFromExecution(e){const t=m(e,["trigger","resolvedExpectedArtifacts"],[]),n=m(e,"stages",[]).reduce(((e,t)=>{const n=m(t,["outputs","resolvedExpectedArtifacts"],[]);return e.concat(n)}),[]);return t.concat(n).filter((e=>H(e,"boundArtifact")))}artifactLists(){const{stage:e,execution:t}=this.props,n=$m.pipeline.getStageConfig(e),a=m(e,["context"],{}),i=new Set(n&&n.artifactExtractor?n.artifactExtractor(a):[]);return{consumedArtifacts:this.extractBoundArtifactsFromExecution(t).filter((e=>i.has(e.id))).map((e=>e.boundArtifact)).filter((({name:e,type:t})=>e&&t)),producedArtifacts:m(e,["outputs","artifacts"],[]).slice()}}render(){const{consumedArtifacts:e,producedArtifacts:t}=this.artifactLists();return ot.createElement(bp,{name:this.props.name,current:this.props.current},ot.createElement("div",{className:"row execution-artifacts"},ot.createElement("div",{className:"col-sm-6 artifact-list-container"},ot.createElement("h5",null,"Consumed Artifacts"),ot.createElement("div",null,ot.createElement(lm,{artifacts:e}))),ot.createElement("div",{className:"col-sm-6 artifact-list-container"},ot.createElement("h5",null,"Produced Artifacts"),ot.createElement("div",null,ot.createElement(lm,{artifacts:t})))))}}cm.title="artifactStatus";const pm="spinnaker.core.artifact.artifactTab.component";n(pm,[]).component("executionArtifactTab",yn(jl(cm,"executionArtifactTab"),["config","stage","execution"]));class dm{static getExpectedArtifactsAvailableToStage(e,t){if(!e||!t)return[];let n=t.expectedArtifacts||[];return id.getAllUpstreamDependencies(t,e).forEach((e=>{const t=e.expectedArtifact;t&&(n=n.concat(t));const a=e.expectedArtifacts;a&&(n=n.concat(a))})),n}static accumulateArtifacts(e){return t=>e.map((e=>m(t,e))).filter((e=>e)).reduce(((e,t)=>e.concat(t)),[])}static createEmptyArtifact(){return{id:pr.generateUuid(),usePriorArtifact:!1,useDefaultArtifact:!1,matchArtifact:{id:pr.generateUuid(),customKind:!0},defaultArtifact:{id:pr.generateUuid(),customKind:!0},displayName:pa.random()}}static addArtifactTo(e,t){return null==t.expectedArtifacts&&(t.expectedArtifacts=[]),t.expectedArtifacts.push(e),e}static addNewArtifactTo(e){return dm.addArtifactTo(dm.createEmptyArtifact(),e)}static artifactFromExpected(e){return e&&e.matchArtifact?e.matchArtifact:null}static sourcesForPipelineStage(e,t){const n=[{get source(){return e()},label:"Pipeline Trigger"}];return id.getAllUpstreamDependencies(e(),t).filter((e=>$m.pipeline.getStageConfig(e).producesArtifacts)).map((e=>({source:e,label:"Stage ("+e.name+")"}))).forEach((e=>n.push(e))),n}static getKindConfig(e,t){if(null==e||e.customKind||"custom"===e.kind)return $m.pipeline.getCustomArtifactKind();const n=(t?$m.pipeline.getDefaultArtifactKinds():$m.pipeline.getMatchArtifactKinds()).find((t=>t.type===e.type));return void 0!==n?n:$m.pipeline.getCustomArtifactKind()}}const um={bindings:{command:"=",imageSources:"<",helpFieldKey:"@",idField:"@",imageSourceText:"<"},controllerAs:"ctrl",template:'\n <div class="form-group" ng-if="ctrl.imageSourceText">\n <div class="col-md-3 sm-label-right">\n Image Source\n </div>\n <div class="col-md-7" style="margin-top: 5px;">\n <span ng-bind-html="ctrl.imageSourceText"></span>\n </div>\n </div>\n <div class="form-group" ng-if="!ctrl.imageSourceText">\n <div class="col-md-3 sm-label-right">\n Image Source\n <help-field key="{{ ctrl.helpFieldKey }}"></help-field>\n </div>\n <div class="col-md-7">\n <div class="radio" ng-repeat="imageSource in ctrl.imageSources">\n <label>\n <input type="radio" ng-model="ctrl.command[ctrl.idField]" value="{{ imageSource }}">\n {{ imageSource | robotToHuman }}\n </label>\n </div>\n </div>\n </div>\n '},mm="spinnaker.core.artifacts.expected.image.selector";n(mm,[]).component("imageSourceSelector",um);class gm{constructor(e){this.delegate=e,this.accountsForArtifact=[],this.updateAccounts=e=>{if(null==e)this.accountsForArtifact=[];else{const t=dm.artifactFromExpected(e),n=this.delegate.getExpectedArtifactAccounts();this.accountsForArtifact="helm/chart"===t.type?n.filter((e=>e.types.includes(t.type)&&e.name===t.artifactAccount)):n.filter((e=>e.types.includes(t.type)));const a=this.delegate.getSelectedAccount();a&&this.accountsForArtifact.find((e=>e.name===a.name))||(this.accountsForArtifact.length?this.delegate.setSelectedArtifactAccount(this.accountsForArtifact[0]):this.delegate.setSelectedArtifactAccount(null))}},this.onArtifactChange=e=>{this.delegate.setSelectedExpectedArtifact(e),this.updateAccounts(e)},this.onArtifactCreated=e=>{dm.addArtifactTo(e.expectedArtifact,e.source.source),this.delegate.refreshExpectedArtifacts(),this.updateAccounts(e.expectedArtifact),this.delegate.setSelectedExpectedArtifact(e.expectedArtifact),this.delegate.setSelectedArtifactAccount(e.account)},this.onRequestCreate=()=>{this.delegate.createArtifact()},this.onAccountChange=e=>{this.delegate.setSelectedArtifactAccount(e)}}}gm.$inject=["delegate"];class hm{constructor(e){this.$scope=e,this.sources=[],this.kinds=[],this.accounts=[],this.setAccounts=e=>{this.accounts=[...e]}}getExpectedArtifactSources(){return this.sources}getSupportedArtifactKinds(){return this.kinds}getExpectedArtifactAccounts(){return this.accounts}scopeApply(){this.$scope.$evalAsync()}}const fm=[vp.KUBERNETES,vp.DOCKER_IMAGE];class vm extends hm{constructor(e,t,n=fm){super(e),this.$scope=e,this.tag=t,this.excludedArtifactTypes=n,this.getExcludedArtifactTypes=()=>this.excludedArtifactTypes,this.getExpectedArtifacts=()=>dm.getExpectedArtifactsAvailableToStage(this.$scope.stage,this.$scope.$parent.pipeline),this.getSelectedExpectedArtifact=()=>{const e=this.$scope.stage[`${this.tag}ArtifactId`];return null==e?null:this.getExpectedArtifacts().find((t=>t.id===e))},this.getSelectedAccount=()=>{const e=this.$scope.stage[`${this.tag}ArtifactAccount`];return null==e?null:this.getExpectedArtifactAccounts().find((t=>t.name===e))},this.setSelectedExpectedArtifact=e=>{this.$scope.showCreateArtifactForm=!1,this.$scope.stage[`${this.tag}ArtifactId`]=e.id,this.scopeApply()},this.sources=dm.sourcesForPipelineStage((()=>this.$scope.$parent.pipeline),this.$scope.stage),this.kinds=$m.pipeline.getMatchArtifactKinds().filter((e=>!this.getExcludedArtifactTypes().find((t=>t.test(e.type))))),this.refreshExpectedArtifacts()}setSelectedArtifactAccount(e){this.$scope.stage[`${this.tag}ArtifactAccount`]=e?e.name:"",this.scopeApply()}createArtifact(){this.$scope.showCreateArtifactForm=!0,this.scopeApply()}refreshExpectedArtifacts(){this.$scope.expectedArtifacts=this.getExpectedArtifacts()}}const Am=[vp.GCE_MACHINE_IMAGE];class Em extends hm{constructor(e){super(e),this.$scope=e,this.kinds=[$m.pipeline.getCustomArtifactKind()];const{viewState:t}=e.command;this.sources=dm.sourcesForPipelineStage((()=>t.pipeline),t.stage),this.refreshExpectedArtifacts()}getExpectedArtifacts(){const{viewState:e}=this.$scope.command;return dm.getExpectedArtifactsAvailableToStage(e.stage,e.pipeline)}getSelectedExpectedArtifact(){return(this.getExpectedArtifacts()||[]).find((e=>e.id===this.$scope.command.imageArtifactId))}getSelectedAccount(){return null}getOfferedArtifactTypes(){return Am}setSelectedExpectedArtifact(e){this.$scope.command.imageArtifactId=e.id,this.$scope.gceImageArtifact.showCreateArtifactForm=!1,this.scopeApply()}setSelectedArtifactAccount(e){}createArtifact(){this.$scope.gceImageArtifact.showCreateArtifactForm=!0,this.scopeApply()}refreshExpectedArtifacts(){this.$scope.command.viewState.expectedArtifacts=this.getExpectedArtifacts()}}class bm extends hm{constructor(e,t=null){super(e),this.$scope=e,this.offeredArtifactTypes=t;const{viewState:n}=e.command;this.sources=dm.sourcesForPipelineStage((()=>n.pipeline),n.stage),this.kinds=$m.pipeline.getMatchArtifactKinds().filter((e=>e.customKind||t.find((t=>t.test(e.type))))),this.refreshExpectedArtifacts()}getExpectedArtifacts(){const{viewState:e}=this.$scope.command;return dm.getExpectedArtifactsAvailableToStage(e.stage,e.pipeline)}getSelectedExpectedArtifact(){return(this.getExpectedArtifacts()||[]).find((e=>e.id===this.$scope.command.expectedArtifactId))}getSelectedAccount(){return null}getOfferedArtifactTypes(){return this.offeredArtifactTypes}setSelectedExpectedArtifact(e){this.$scope.command.expectedArtifactId=e.id,this.$scope.showCreateArtifactForm=!1,this.scopeApply()}setSelectedArtifactAccount(e){}createArtifact(){this.$scope.showCreateArtifactForm=!0,this.scopeApply()}refreshExpectedArtifacts(){this.$scope.command.backingData.expectedArtifacts=this.getExpectedArtifacts()}}class ym extends hm{constructor(e){super(e.$scope),this.artifact=e,this.requestingNew=!1,this.setAccounts=e=>{this.accounts=[...e]},this.refreshExpectedArtifacts(),this.sources=dm.sourcesForPipelineStage((()=>this.$scope.$parent.pipeline),this.$scope.stage),this.kinds=$m.pipeline.getMatchArtifactKinds()}getExpectedArtifacts(){return dm.getExpectedArtifactsAvailableToStage(this.$scope.stage,this.$scope.$parent.pipeline)}getSelectedExpectedArtifact(){return this.expectedArtifacts.find((e=>e.id===this.artifact.id))}getSelectedAccount(){return this.accounts.find((e=>e.name===this.artifact.account))}setSelectedExpectedArtifact(e){this.artifact.id=e.id,this.requestingNew=!1,this.scopeApply()}setSelectedArtifactAccount(e){this.artifact.account=null==e?"":e.name,this.scopeApply()}createArtifact(){this.requestingNew=!0,this.scopeApply()}refreshExpectedArtifacts(){this.expectedArtifacts=this.getExpectedArtifacts()}}class Cm extends hm{constructor(e){super(e.$scope),this.artifact=e,this.requestingNew=!1,this.setAccounts=e=>{this.accounts=[...e]},this.refreshExpectedArtifacts(),this.sources=dm.sourcesForPipelineStage((()=>this.getPipeline()),this.getStage()),this.kinds=$m.pipeline.getMatchArtifactKinds()}getStage(){var e,t,n,a;return null==(a=null==(n=null==(t=null==(e=this.artifact)?void 0:e.$scope)?void 0:t.command)?void 0:n.viewState)?void 0:a.stage}getPipeline(){var e,t,n,a;return null==(a=null==(n=null==(t=null==(e=this.artifact)?void 0:e.$scope)?void 0:t.command)?void 0:n.viewState)?void 0:a.pipeline}getExpectedArtifacts(){return dm.getExpectedArtifactsAvailableToStage(this.getStage(),this.getPipeline())}getSelectedExpectedArtifact(){return this.expectedArtifacts.find((e=>e.id===this.artifact.id))}getSelectedAccount(){return this.accounts.find((e=>e.name===this.artifact.account))}setSelectedExpectedArtifact(e){this.artifact.id=e.id,this.requestingNew=!1,this.scopeApply()}setSelectedArtifactAccount(e){this.artifact.account=null==e?"":e.name,this.scopeApply()}createArtifact(){this.requestingNew=!0,this.scopeApply()}refreshExpectedArtifacts(){this.expectedArtifacts=this.getExpectedArtifacts()}}const wm=e=>{let t;return e.type?t=e.type:e.artifact?t=e.artifact.type:e.kind?t=e.kind.type:e.expectedArtifact&&(t=dm.artifactFromExpected(e.expectedArtifact).type),ot.createElement("img",{style:{verticalAlign:"text-top",marginRight:"4px"},src:sm.getPath(t),width:e.width,height:e.height})};class xm extends ot.Component{constructor(e){super(e),this.renderOption=e=>ot.createElement("span",null,ot.createElement(wm,{type:e.types[0],width:"16",height:"16"}),e.name)}render(){return ot.createElement(Ti,{className:this.props.className||"",options:this.props.accounts,value:this.props.selected,onChange:this.props.onChange,optionRenderer:this.renderOption,valueRenderer:this.renderOption,clearable:!1,valueKey:"name"})}}const km="spinnaker.core.artifacts.account.selector.react";n(km,[]).component("artifactAccountSelectorReact",yn(jl(xm,"artifactAccountSelectorReact"),["accounts","className","onChange","selected"]));class Bm extends ot.Component{constructor(e){super(e),this.renderOption=e=>ot.createElement("span",null,this.props.showIcons&&ot.createElement(wm,{type:e.type,width:"16",height:"16"}),e.label," - ",e.description),this.onChange=e=>{const t=this.props.kinds.find((t=>t.key===e.value));this.setState({selected:e}),this.props.onChange(t)},this.optionFromKindConfig=e=>e?{label:e.label,description:e.description,type:e.type,value:e.key}:null,this.state={selected:this.optionFromKindConfig(e.selected)}}render(){const e=this.props.kinds.map(this.optionFromKindConfig),t=this.state.selected;return ot.createElement(Ti,{className:this.props.className||"",options:e,value:t,optionRenderer:this.renderOption,valueRenderer:this.renderOption,onChange:this.onChange,clearable:!1})}}Bm.defaultProps={showIcons:!0};n("spinnaker.core.artifacts.expected.kind.selector.react",[]).component("expectedArtifactKindSelectorReact",yn(jl(Bm,"expectedArtifactKindSelectorReact"),["kinds","selected","onChange","showIcons","className"]));class Sm extends ot.Component{constructor(e){super(e),this.renderOption=e=>ot.createElement("span",null,e.label),this.onChange=e=>{const t=this.props.sources.find((t=>t.source===e.source));this.props.onChange(t)},this.state={options:e.sources.map((e=>e.value?e:{...e,value:pr.generateUuid()}))}}render(){return ot.createElement(Ti,{className:this.props.className||"",options:this.state.options,optionRenderer:this.renderOption,value:this.props.selected,valueRenderer:this.renderOption,onChange:this.onChange,clearable:!1})}}const Mm="spinnaker.core.artifacts.expected.source.selector.react";n(Mm,[]).component("expectedArtifactSourceSelectorReact",yn(jl(Sm,"expectedArtifactSourceSelectorReact"),["sources","className","onChange","selected"]));class Nm extends ot.Component{constructor(){super(...arguments),this.renderOption=e=>e.expectedArtifact||e.requestingNew?e.requestingNew?ot.createElement("span",null,"Create new..."):ot.createElement("span",null,this.props.showIcons&&ot.createElement(wm,{expectedArtifact:e.expectedArtifact,width:"16",height:"16"}),e.expectedArtifact.displayName):ot.createElement("span",null),this.onChange=e=>{e.requestingNew?this.props.onRequestCreate():this.props.onChange(e.expectedArtifact)}}filterExpectedArtifacts(e){return(this.props.expectedArtifacts||[]).filter((t=>{const n=dm.artifactFromExpected(t);return!!n&&e(t,n)}))}getExpectedArtifacts(){return this.filterExpectedArtifacts(((e,t)=>{const{offeredArtifactTypes:n,excludedArtifactTypes:a}=this.props;let i=!0,r=!1;return n&&n.length>0&&(i=!!n.find((e=>e.test(t.type)))),a&&a.length>0&&(r=!!a.find((e=>e.test(t.type)))),i&&!r}))}render(){const e=this.getExpectedArtifacts().map((e=>({value:e.id,expectedArtifact:e,requestingNew:!1})));this.props.onRequestCreate&&e.push({value:"",expectedArtifact:null,requestingNew:!0});const t={value:this.props.selected?this.props.selected.id:"",expectedArtifact:this.props.selected,requestingNew:this.props.requestingNew};return ot.createElement(Ti,{className:this.props.className||"",options:e,optionRenderer:this.renderOption,value:t,valueRenderer:this.renderOption,onChange:this.onChange,clearable:!1})}}Nm.defaultProps={requestingNew:!1,showIcons:!0};const Dm="spinnaker.core.artifacts.expected.selector.react";n(Dm,["spinnaker.core.artifacts.expected.kind.selector.react",Mm,km]).component("expectedArtifactSelectorReact",yn(jl(Nm,"expectedArtifactSelectorReact"),["expectedArtifacts","selected","requestingNew","onRequestCreate","onChange","showIcons","className","offeredArtifactTypes","excludedArtifactTypes"]));class Im extends ot.Component{constructor(e){super(e),this.onSave=()=>{this.props.onSave({expectedArtifact:this.state.expectedArtifact,source:this.state.source,account:this.state.account})},this.onSourceChange=e=>{this.setState({source:e})},this.onKindChange=e=>{const t=p(this.state.expectedArtifact);t.matchArtifact.type=e.type,delete t.matchArtifact.kind,t.matchArtifact.customKind=e.customKind;const n=this.accountsForExpectedArtifact(t);this.setState({expectedArtifact:t,account:n[0]})},this.onAccountChange=e=>{const{expectedArtifact:t}=this.state;this.props.onArtifactChange&&this.props.onArtifactChange({artifactAccount:e.name,id:t.matchArtifact.id,reference:t.matchArtifact.name,type:t.matchArtifact.type}),this.setState({account:e})},this.onArtifactEdit=e=>{const t={...this.state.expectedArtifact,matchArtifact:{...e}};let n=this.state.account;if(this.state.expectedArtifact.matchArtifact.type!==e.type){n=this.accountsForExpectedArtifact(t)[0]}this.props.onArtifactChange&&this.props.onArtifactChange({artifactAccount:n?n.name:"",id:e.id,reference:e.name,type:e.type}),this.setState({expectedArtifact:t,account:n})},this.availableKinds=()=>{const e=this.props.kinds||[],t=this.props.accounts||[];return this.props.showAccounts?e.filter((e=>e.customKind||t.find((t=>t.types.includes(e.type))))):e.slice(0)},this.onArtifactDisplayNameEdit=e=>{const t=e.target.value,{expectedArtifact:n}=this.state,a={...n,displayName:t};this.setState({expectedArtifact:a})};const t=e.default?p(e.default):dm.createEmptyArtifact();this.state={expectedArtifact:t,source:e.sources[0],account:this.accountsForExpectedArtifact(t)[0]}}accountsForExpectedArtifact(e){const t=dm.artifactFromExpected(e);return t&&this.props.accounts?this.props.accounts.filter((e=>e.types.includes(t.type))):[]}render(){const{sources:e,showIcons:t,showAccounts:n,hidePipelineFields:a}=this.props,{expectedArtifact:i,source:r,account:s}=this.state,o=this.accountsForExpectedArtifact(i),l=dm.artifactFromExpected(i),c=this.availableKinds().sort(((e,t)=>e.label.localeCompare(t.label))),p=dm.getKindConfig(l,!1),d=p&&p.editCmp;return ot.createElement(ot.Fragment,null,!a&&ot.createElement(zp,{label:"Display Name"},ot.createElement("input",{className:"form-control",value:i.displayName,onChange:this.onArtifactDisplayNameEdit})),e.length>1&&ot.createElement(zp,{label:"Artifact Source"},ot.createElement(Sm,{sources:e,selected:r,onChange:this.onSourceChange})),ot.createElement(zp,{label:"Artifact Kind"},ot.createElement(Bm,{kinds:c,selected:p,onChange:this.onKindChange,showIcons:t})),n&&ot.createElement(zp,{label:"Artifact Account"},ot.createElement(xm,{accounts:o,selected:s,onChange:this.onAccountChange})),d&&ot.createElement(d,{account:s,artifact:l,onChange:this.onArtifactEdit,pipeline:this.props.pipeline}),!a&&ot.createElement(zp,{label:""},ot.createElement("button",{onClick:this.onSave,type:"button",className:"btn btn-block btn-primary btn-sm"},"Confirm")))}}Im.defaultProps={showIcons:!0,showAccounts:!0,fieldColumns:8,singleColumn:!1};const Fm="spinnaker.core.artifacts.expected.editor.react";n(Fm,["spinnaker.core.artifacts.expected.kind.selector.react",Mm]).component("expectedArtifactEditorReact",yn(jl(Im,"expectedArtifactEditorReact"),["default","kinds","sources","accounts","onSave","showIcons","showAccounts","className","pipeline"]));class Tm extends ot.Component{constructor(){super(...arguments),this.onArtifactAccountChanged=e=>{const t=!this.props.artifact||this.props.artifact.type&&!e.types.includes(this.props.artifact.type)&&"custom-artifact"!==e.name?{id:pr.generateUuid()}:p(this.props.artifact);t.artifactAccount=e.name,t.type&&"custom-artifact"===e.name||(t.type=e.types&&e.types.length>0?e.types[0]:""),this.props.onArtifactEdit(t)}}defaultArtifactAccountIfNecessary(){const{artifact:e,artifactAccounts:t}=this.props;!e.artifactAccount&&t.length>0&&this.onArtifactAccountChanged(de(t.filter((t=>t.types.includes(e.type))))||de(t.filter((e=>e.types.includes(hu))))||de(t))}componentDidMount(){this.defaultArtifactAccountIfNecessary()}componentDidUpdate(){this.defaultArtifactAccountIfNecessary()}render(){const{pipeline:e,artifact:t,artifactAccounts:n,onArtifactEdit:a,isDefault:i}=this.props,r=n.find((e=>e.name===t.artifactAccount))||n[0],s=r?r.types:void 0,o=i?$m.pipeline.getDefaultArtifactKinds():$m.pipeline.getMatchArtifactKinds(),l=s?o.find((e=>s.some((t=>e.typePattern.test(t))))):void 0,c=l&&l.editCmp;return ot.createElement(ot.Fragment,null,ot.createElement(zp,{label:"Account",fieldColumns:8},ot.createElement(xm,{accounts:n,selected:r,onChange:this.onArtifactAccountChanged})),c&&ot.createElement(c,{account:r,artifact:t,onChange:a,pipeline:e}))}}const Qm=class extends ot.Component{constructor(e){super(e),this.editArtifact=(e,t,n)=>{e.setFieldValue(t,n),e.setFieldValue(`${t}.artifactAccount`,n.artifactAccount)},this.state={matchArtifactAccounts:[],defaultArtifactAccounts:[],taskMonitor:new qc({title:"I'm never used"})}}componentDidMount(){const{excludedArtifactTypePatterns:e,excludedDefaultArtifactTypePatterns:t}=this.props;Di.getArtifactAccounts().then((n=>{this.setState({matchArtifactAccounts:e?n.filter((t=>!t.types.some((t=>e.some((e=>e.test(t))))))):n,defaultArtifactAccounts:t?n.filter((e=>!e.types.some((e=>t.some((t=>t.test(e))))))):n})}))}static show(e){return si.show(Qm,e,{dialogClassName:"wizard-modal modal-lg"})}render(){const{matchArtifactAccounts:e,defaultArtifactAccounts:t}=this.state;return ot.createElement(Lc,{heading:"Expected Artifact",initialValues:this.props.expectedArtifact||dm.createEmptyArtifact(),taskMonitor:this.state.taskMonitor,dismissModal:this.props.dismissModal,closeModal:this.props.closeModal,submitButtonLabel:"Save Artifact",render:({formik:n,nextIdx:a,wizard:i})=>ot.createElement(ot.Fragment,null,ot.createElement(Fc,{label:"General",wizard:i,order:a(),render:()=>ot.createElement(kl,{name:"displayName",label:"Display Name",input:e=>ot.createElement(go,{...e}),required:!0})}),ot.createElement(Fc,{label:"Match Artifact",wizard:i,order:a(),render:()=>ot.createElement(Tm,{pipeline:this.props.pipeline,artifact:n.values.matchArtifact,artifactAccounts:e,onArtifactEdit:e=>this.editArtifact(n,"matchArtifact",e),isDefault:!1})}),ot.createElement(Fc,{label:"If Missing",wizard:i,order:a(),render:()=>ot.createElement(ot.Fragment,null,ot.createElement(kl,{name:"usePriorArtifact",label:"Use prior execution",input:e=>ot.createElement(xo,{...e}),help:ot.createElement(_s,{id:"pipeline.config.expectedArtifact.usePriorExecution"})}),ot.createElement(kl,{name:"useDefaultArtifact",label:"Use default artifact",input:e=>ot.createElement(xo,{...e}),help:ot.createElement(_s,{id:"pipeline.config.expectedArtifact.defaultArtifact"})}),n.values.useDefaultArtifact&&ot.createElement(Tm,{pipeline:this.props.pipeline,artifact:n.values.defaultArtifact,artifactAccounts:t,onArtifactEdit:e=>this.editArtifact(n,"defaultArtifact",e),isDefault:!0}))}))})}};let Pm=Qm;Pm.defaultProps={closeModal:qi,dismissModal:qi};class Rm extends ot.Component{constructor(e){super(e),this.defineNewArtifactOption={...dm.createEmptyArtifact(),displayName:"Define a new artifact...",id:"__inline.artifact__"},this.destroy$=new At,this.renderArtifact=e=>ot.createElement("span",null,"__inline.artifact__"!==e.id&&ot.createElement(wm,{type:e.matchArtifact&&e.matchArtifact.type||e.defaultArtifact&&e.defaultArtifact.type,width:"16",height:"16"}),e&&e.displayName),this.onExpectedArtifactSelected=e=>{"__inline.artifact__"!==e.id?this.props.onExpectedArtifactSelected(e):this.props.onArtifactEdited(e.defaultArtifact)},this.onInlineArtifactChanged=e=>{this.props.onArtifactEdited(e)},this.state={artifactAccounts:[]}}componentWillUnmount(){this.destroy$.next()}componentDidMount(){const e=this.props.excludedArtifactTypePatterns;vt(Di.getArtifactAccounts()).pipe(It(this.destroy$)).subscribe((t=>{this.setState({artifactAccounts:e?t.filter((t=>!t.types.some((t=>e.some((e=>e.test(t))))))):t})}))}render(){const{pipeline:e,stage:t,expectedArtifactId:n,artifact:a,excludedArtifactIds:i,renderLabel:r}=this.props,s=dm.getExpectedArtifactsAvailableToStage(t,e),o=n?s.find((e=>e.id===n)):a?{id:"__inline.artifact__",displayName:"Artifact from execution context",defaultArtifact:a}:void 0,l=[this.defineNewArtifactOption,...s.filter((e=>!i||!i.includes(e.id)))],c=ot.createElement(cn,{clearable:!1,options:l,value:o,optionRenderer:this.renderArtifact,valueRenderer:this.renderArtifact,onChange:this.onExpectedArtifactSelected,placeholder:"Select an artifact..."});return ot.createElement(ot.Fragment,null,ot.createElement("div",{className:"sp-margin-m-bottom","data-test-id":"Stage.artifactSelector"},r?r(c):c),!!a&&ot.createElement(Tm,{pipeline:e,artifact:a,artifactAccounts:this.state.artifactAccounts,onArtifactEdit:e=>this.onInlineArtifactChanged(e),isDefault:!0}))}}const Um="spinnaker.core.artifacts.stage.artifact.selector.react";n(Um,[]).component("stageArtifactSelectorReact",yn(jl(Rm,"stageArtifactSelectorReact"),["pipeline","stage","expectedArtifactId","artifact","onExpectedArtifactSelected","onArtifactEdited","excludedArtifactIds","excludedArtifactTypePatterns"]));const zm=e=>ot.createElement(zp,{label:e.label,helpKey:e.helpKey,fieldColumns:e.fieldColumns},ot.createElement(Rm,{...e}));oi(".TriggerArtifactConstraintSelector_Selects > * + * {\n margin-top: 4px;\n}\n");class Gm extends ot.Component{constructor(){super(...arguments),this.defaultExcludedArtifactTypePatterns=[vp.KUBERNETES,vp.FRONT50_PIPELINE_TEMPLATE],this.excludedArtifactTypes=()=>{const e=$m.pipeline.getTriggerConfig(this.props.triggerType);return this.defaultExcludedArtifactTypePatterns.concat(e&&e.excludedArtifactTypePatterns||[])},this.handleChange=(e,t)=>{if("__create.new.artifact"===t.id)return void Pm.show({pipeline:this.props.pipeline,excludedArtifactTypePatterns:this.excludedArtifactTypes(),excludedDefaultArtifactTypePatterns:this.defaultExcludedArtifactTypePatterns}).then((e=>{this.props.addExpectedArtifact(e),this.props.onChange(fr({name:this.props.name,value:(this.props.value||[]).concat([e.id])}))}),(()=>null));const n=(this.props.value||[]).slice(0);n[e]=t.id,this.props.onChange(fr({name:this.props.name,value:n}))},this.removeExpectedArtifact=e=>{const t=(this.props.value||[]).slice();this.props.removeExpectedArtifact(e),this.props.onChange(fr({name:this.props.name,value:t.filter((t=>t!==e.id))}))},this.editExpectedArtifact=e=>{Pm.show({expectedArtifact:e,pipeline:this.props.pipeline,excludedArtifactTypePatterns:this.excludedArtifactTypes(),excludedDefaultArtifactTypePatterns:this.defaultExcludedArtifactTypePatterns}).then((e=>this.props.updateExpectedArtifact(e)),(()=>null))},this.renderArtifact=e=>ot.createElement("span",null,e&&e.displayName)}render(){const{pipeline:e}=this.props,t=this.props.value||[],n=e.expectedArtifacts||[],[a,i]=ue(n,(e=>t.includes(e.id))),r=dm.createEmptyArtifact();r.id="__create.new.artifact",r.displayName="Define a new artifact...",i.push(r);const s=(e,t)=>{const n=ot.createElement(ot.Fragment,null,ot.createElement("a",{className:"clickable glyphicon glyphicon-edit",onClick:()=>this.editExpectedArtifact(t)}),ot.createElement("a",{className:"clickable glyphicon glyphicon-trash",onClick:()=>this.removeExpectedArtifact(t)}));return ot.createElement("div",{key:t&&t.id||"new",className:"flex-container-h baseline margin-between-md"},ot.createElement(cn,{className:"flex-grow",clearable:!1,value:t,onChange:t=>this.handleChange(e,t),options:i,optionRenderer:this.renderArtifact,valueRenderer:this.renderArtifact,placeholder:"Select or define an artifact..."}),ot.createElement("div",{style:{minWidth:"50px"},className:"flex-container-h baseline margin-between-md"},t&&n))};return ot.createElement("div",{className:"TriggerArtifactConstraintSelector_Selects flex-container-v margin-between-md"},a.map(((e,t)=>s(t,e))),s(t.length))}}const jm=[pu,du,mu,gu,vu,Au,bu,yu,wu,xu,Bu,Su,Fu,Tu,Nu,Du,Uu,zu,Gu,ju,Lu,Ou,Ju,Wu,Zu,_u,nm,am,em,tm,qu,Xu];class Lm{constructor(){this.triggerTypes=[],this.stageTypes=[],this.transformers=[],this.notificationTypes=[],this.artifactKinds=jm,this.getStageConfig=me(this.getStageConfig.bind(this),(e=>[e?e.type:"",e?Lm.resolveCloudProvider(e):""].join(":")))}normalizeStageTypes(){this.stageTypes.filter((e=>e.provides)).forEach((e=>{const t=this.stageTypes.find((t=>t.key===e.provides&&!t.provides));t&&(e.label=e.label||t.label,e.description=e.description||t.description,e.key=e.key||t.key,e.manualExecutionComponent=e.manualExecutionComponent||t.manualExecutionComponent,t.executionDetailsUrl&&!e.executionDetailsUrl&&(e.executionDetailsUrl=t.executionDetailsUrl),t.executionConfigSections&&!e.executionConfigSections&&(e.executionConfigSections=t.executionConfigSections),t.executionDetailsSections&&!e.executionDetailsSections&&(e.executionDetailsSections=t.executionDetailsSections))}))}registerNotification(e){this.notificationTypes.push(e)}registerTrigger(e){di.triggerTypes?di.triggerTypes.indexOf(e.key)>=0&&this.triggerTypes.push(e):this.triggerTypes.push(e)}registerTransformer(e){this.transformers.push(e)}registerStage(e){(di.hiddenStages||[]).includes(e.key)||(this.stageTypes.push(e),this.normalizeStageTypes())}async registerPreconfiguredJobStage(e){var t;const n=(await fp.list()).find((t=>t.type===e.key));if(!n)throw new Error(`Preconfigured Job of type '${e.key}' not found in /jobs/preconfigured from gate. Is the preconfigured job registered in orca?`);const a=null!=(t=null==n?void 0:n.parameters)?t:[],i=a.filter((e=>!u(e.defaultValue))),r=ge(i.map((e=>[e.name,e.defaultValue]))),{label:s,description:o,waitForCompletion:l,producesArtifacts:c}=n,p={...e,configuration:{...e.configuration,parameters:a,waitForCompletion:l},defaults:{parameters:r},description:o,label:s,producesArtifacts:c};return this.registerStage(p),p}registerArtifactKind(e){return this.artifactKinds.push(e),e.editCmp}getExecutionTransformers(){return this.transformers}getNotificationTypes(){return p(this.notificationTypes)}getTriggerTypes(){return p(this.triggerTypes)}getStageTypes(){return p(this.stageTypes)}getMatchArtifactKinds(){return p(this.artifactKinds.filter((e=>e.isMatch)))}getDefaultArtifactKinds(){return p(this.artifactKinds.filter((e=>e.isDefault)))}getCustomArtifactKind(){return p(this.artifactKinds.find((e=>"custom"===e.key)))}getCloudProvidersForStage(e,t,n){const a=f(n.map((e=>e.cloudProvider)));let i=[];if(e.providesFor)i=e.providesFor;else if(e.cloudProvider)i=[e.cloudProvider];else if(e.useBaseProvider){t.filter((t=>t.provides===e.key)).forEach((e=>{e.providesFor?i=i.concat(e.providesFor):i.push(e.cloudProvider)}))}else i=a.slice(0);return i=i.filter((t=>!!n.filter((e=>e.cloudProvider===t)).find((t=>{const n=Ni.getProvider(t.cloudProvider);return!Om(e,n)})))),di.feature.dockerBake&&"bake"===e.key&&a.push("docker"),h(a,i)}getConfigurableStageTypes(e){const t=u(e)?[]:Array.from(new Set(e.map((e=>e.cloudProvider)))),n=this.getStageTypes();let a=n.filter((e=>!e.synthetic&&!e.provides));return 0===t.length?a:(a.forEach((t=>t.cloudProviders=this.getCloudProvidersForStage(t,n,e))),a=a.filter((t=>!e.every((e=>{const n=Ni.getProvider(e.cloudProvider);return Om(t,n)})))),a.filter((e=>e.cloudProviders.length)).sort(((e,t)=>e.label.localeCompare(t.label))))}getProvidersFor(e){let t=e;const n=this.getStageTypes().filter((t=>t.provides&&(t.provides===e||t.key===e||t.alias===e)));return n.length&&(t=n[0].provides),this.getStageTypes().filter((e=>e.provides&&e.provides===t))}getNotificationConfig(e){return this.getNotificationTypes().find((t=>t.key===e))}getTriggerConfig(e){return this.getTriggerTypes().find((t=>t.key===e))}overrideManualExecutionComponent(e,t){const n=this.triggerTypes.find((t=>t.key===e));n&&(n.manualExecutionComponent=t)}checkAliasedStageTypes(e){const t=this.getStageTypes().filter((t=>t.alias===e.type));return 1===t.length?t[0]:null}checkAliasFallback(e){if(e.alias){const t=this.getStageTypes().filter((t=>t.key===e.alias));if(1===t.length)return t[0]}return null}getStageConfig(e){var t;if(!e||!e.type)return null;const n=this.getStageTypes().filter((t=>t.key===e.type||t.provides===e.type));switch(n.length){case 0:{const t=this.checkAliasedStageTypes(e)||this.checkAliasFallback(e),n=this.getStageTypes().find((e=>"unmatched"===e.key));return null!=t?t:n}case 1:return n[0];default:{const a=Lm.resolveCloudProvider(e),i=n.find((e=>e.cloudProvider===a)),r=n.find((e=>!!e.cloudProvider));return null!=(t=null!=i?i:r)?t:n[0]}}}static resolveCloudProvider(e){var t,n,a,i,r,s;return null!=(s=null!=(r=null!=(a=null!=(t=e.cloudProvider)?t:e.cloudProviderType)?a:null==(n=e.context)?void 0:n.cloudProvider)?r:null==(i=e.context)?void 0:i.cloudProviderType)?s:"aws"}getManualExecutionComponent(e){return e&&e.manualExecutionComponent?e.manualExecutionComponent:null}getManualExecutionComponentForTriggerType(e){return this.getManualExecutionComponent(this.getTriggerConfig(e))}hasManualExecutionComponentForTriggerType(e){return null!==this.getManualExecutionComponent(this.getTriggerConfig(e))}getManualExecutionComponentForStage(e){return this.getStageConfig(e).manualExecutionComponent}}function Om(e,t){return!(!t||!t.unsupportedStageTypes)&&t.unsupportedStageTypes.indexOf(e.key)>-1}const Ym=class{};let $m=Ym;$m.pipeline=new Lm,$m.urlBuilder=new cp,$m.reinitialize=()=>{Ym.pipeline=new Lm,Ym.urlBuilder=new cp},_c.Registry=$m;class Hm{constructor(e,t,n,a){this.$scope=e,this.$stateParams=t,this.$state=n,this.executionService=a,this.parser=new wn,this.renderer=new xn}$onInit(){this.updateScope()}$onChanges(){this.updateScope()}updateScope(){this.$scope.application=this.application,this.$scope.execution=this.execution,this.$scope.stage=this.stage,this.$scope.stageSummary=this.stageSummary}getStepLabel(e){const t=$m.pipeline.getStageConfig(e);return t&&t.executionStepLabelUrl?t.executionStepLabelUrl:"core/src/pipeline/config/stages/common/stepLabel.html"}getComments(){const e=this.parser.parse(this.stageSummary.comments+"");return this.renderer.render(e)}getCurrentStep(){return parseInt(this.$stateParams.step,10)}isStepCurrent(e){return e===this.getCurrentStep()}isRestartable(e){if(e.isRunning||e.isCompleted)return!1;const t=$m.pipeline.getStageConfig(e);if(!t||!0===e.isRestarting)return!1;const n=this.application.attributes.enableRestartRunningExecutions||!1;return!(this.execution.isRunning&&!n)&&(t.restartable||!1)}canManuallySkip(){const e=this.getTopLevelStage();return this.stage.isRunning&&e&&e.context.canManuallySkip}getTopLevelStage(){let e=this.stage.parentStageId,t=this.stage;for(;e;)t=this.execution.stages.find((t=>t.id===e)),e=t.parentStageId;return t}openManualSkipStageModal(){const e=this.getTopLevelStage();lp.confirm({header:"Really skip this stage?",buttonText:"Skip",askForReason:!0,submitJustWithReason:!0,body:'<div class="alert alert-warning">\n <b>Warning:</b> Skipping this stage may have unpredictable results.\n <ul>\n <li>Mutating changes initiated by this stage will continue and will need to be cleaned up manually.</li>\n <li>Downstream stages that depend on the outputs of this stage may fail or behave unexpectedly.</li>\n </ul>\n </div>\n ',submitMethod:t=>this.executionService.patchExecution(this.execution.id,e.id,{manualSkip:!0,reason:t}).then((()=>this.executionService.waitUntilExecutionMatches(this.execution.id,(t=>{const n=t.stages.find((t=>t.id===e.id));return n&&"SKIPPED"===n.status})))).then((e=>this.executionService.updateExecution(this.application,e)))})}toggleDetails(e){const t=this.getCurrentStep()===e?null:e;if(null!==t){const e={step:t},n=parseInt(this.$stateParams.stage,10);n&&(e.stage=n);const a=parseInt(this.$stateParams.subStage,10);a&&(e.subStage=a),this.$state.go(".",e)}}}Hm.$inject=["$scope","$stateParams","$state","executionService"];const Vm={bindings:{application:"<",execution:"<",sourceUrl:"<",stage:"<",stageSummary:"<"},controller:Hm,template:'<div className="stage-summary-wrapper" ng-include="$ctrl.sourceUrl"></div>'};n("spinnaker.core.pipeline.stageSummary.component",[]).component("stageSummary",Vm),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/pipeline/config/stages/common/stepLabel.html",'<span class="task-label">{{ step.name | robotToHuman }}</span>\n')}]);class Jm{constructor(e){this.$scope=e}$onInit(){this.updateScope()}$onChanges(){this.updateScope()}updateScope(){this.$scope.application=this.application,this.$scope.config=this.config,this.$scope.configSections=this.configSections,this.$scope.execution=this.execution,this.$scope.stage=this.stage}}Jm.$inject=["$scope"];const Wm={bindings:{application:"<",config:"<",configSections:"<",execution:"<",sourceUrl:"<",stage:"<"},controller:Jm,template:'<div ng-include="$ctrl.sourceUrl"></div>'};n("spinnaker.core.pipeline.stepExecutionDetails.component",[]).component("stepExecutionDetails",Wm);oi("instance-type-selector tr.unavailable {\n opacity: 0.5;\n}\n");class Km{constructor(e,t){this.$scope=e,this.instanceTypeService=t,this.selectInstanceType=e=>{e.unavailable||(this.command.instanceType=e.name,this.command.viewState.dirty&&this.command.viewState.dirty.instanceType&&delete this.command.viewState.dirty.instanceType,this.instanceTypeService.getInstanceTypeDetails(this.command.selectedProvider,e.name).then((e=>{this.command.viewState.instanceTypeDetails=e})),this.onTypeChanged&&this.onTypeChanged(this.command.instanceType))},this.getStorageDescription=e=>this.command.instanceType===e.name&&this.command.viewState.overriddenStorageDescription?this.command.viewState.overriddenStorageDescription:e.storage.count+"x"+e.storage.size,this.getStorageDescriptionHelpKey=e=>this.command.instanceType===e.name&&this.command.viewState.overriddenStorageDescription?"instanceType.storageOverridden":null}$onInit(){this.instanceProfile=this.command.viewState.instanceProfile,this.instanceTypes=this.command.backingData&&this.command.backingData.filtered?this.command.backingData.filtered.instanceTypes:[],this.updateFamilies()}$doCheck(){let e=!1;this.command.viewState.instanceProfile!==this.instanceProfile&&(this.instanceProfile=this.command.viewState.instanceProfile,e=!0);this.command.backingData&&this.command.backingData.filtered&&this.command.backingData.filtered.instanceTypes!==this.instanceTypes&&(this.instanceTypes=this.command.backingData.filtered.instanceTypes,e=!0),e&&this.updateFamilies()}updateFamilies(){let e=[];this.command.backingData&&this.command.backingData.filtered&&(e=this.command.backingData.filtered.instanceTypes||[]),this.instanceTypeService.getCategories(this.command.selectedProvider).then((t=>{t.forEach((t=>{t.type===this.command.viewState.instanceProfile&&(this.command.viewState.disableImageSelection||t.families.forEach((t=>{t.instanceTypes.forEach((t=>{t.unavailable=e.every((e=>e!==t.name))}))})),this.$scope.selectedInstanceProfile=t)}))}))}}Km.$inject=["$scope","instanceTypeService"];const qm={bindings:{command:"<",onTypeChanged:"="},controller:Km,controllerAs:"instanceTypeCtrl",templateUrl:"core/src/serverGroup/configure/common/instanceTypeDirective.html"};n("spinnaker.core.serverGroup.configure.common.v2instanceTypeSelector",[]).component("v2InstanceTypeSelector",qm),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/serverGroup/configure/common/instanceTypeDirective.html",'<dirty-instance-type-notification command="command"></dirty-instance-type-notification>\n<div class="row" ng-repeat="family in selectedInstanceProfile.families">\n <div class="col-md-12">\n <h4>{{selectedInstanceProfile.label}}: {{family.type}}</h4>\n <p>{{family.description}}</p>\n <table class="table table-hover">\n <thead>\n <tr>\n <th></th>\n <th>Size</th>\n <th>vCPU</th>\n <th>Mem (GiB)</th>\n <th>\n {{family.storageType || \'SSD\'}} Storage (GB)\n <help-field ng-if="family.storageHelpFieldKey" key="{{family.storageHelpFieldKey}}"></help-field>\n </th>\n <th>Cost</th>\n </tr>\n </thead>\n <tbody>\n <tr\n ng-repeat="instanceType in family.instanceTypes"\n ng-class="{info: instanceTypeCtrl.command.instanceType === instanceType.name, clickable: !instanceType.unavailable, unavailable: instanceType.unavailable}"\n ng-click="instanceTypeCtrl.selectInstanceType(instanceType)"\n >\n <td>\n <help-field ng-if="instanceType.unavailable" key="instanceType.unavailable"></help-field>\n <help-field ng-if="instanceType.helpFieldKey" key="{{instanceType.helpFieldKey}}"></help-field>\n <input\n type="radio"\n ng-value="instanceType.name"\n ng-model="instanceTypeCtrl.command.instanceType"\n ng-disabled="instanceType.unavailable"\n />\n </td>\n <td>{{instanceType.label}}</td>\n <td>{{instanceType.cpu}}</td>\n <td>{{instanceType.memory}}</td>\n <td ng-if="instanceType.storage.type === \'EBS\'">EBS Only</td>\n <td ng-if="instanceType.storage.type === \'SSD\' || family.storageType">\n <help-field\n ng-if="instanceTypeCtrl.getStorageDescriptionHelpKey(instanceType)"\n key="{{instanceTypeCtrl.getStorageDescriptionHelpKey(instanceType)}}"\n ></help-field>\n {{instanceTypeCtrl.getStorageDescription(instanceType)}}\n </td>\n <td><cost-factor factor="instanceType.costFactor"></cost-factor></td>\n </tr>\n </tbody>\n </table>\n </div>\n</div>\n')}]);n("spinnaker.core.serverGroup.configure.common.costFactor",[]).directive("costFactor",(function(){return{restrict:"E",scope:{factor:"=",range:"="},templateUrl:"core/src/serverGroup/configure/common/costFactor.html",link:function(e){function t(e){return{used:new Array(e+1).join("$"),unused:new Array(5-e).join("$")}}function n(){if(e.range)e.min=t(e.range.min),e.max=t(e.range.max);else{const n=t(e.factor);e.used=n.used,e.unused=n.unused}}n(),e.$watch("range",n)}}})),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/serverGroup/configure/common/costFactor.html",'<span class="cost-factor" ng-if="!range"> <span class="cost">{{used}}</span>{{unused}} </span>\n<span class="cost-factor" ng-if="range">\n <span class="cost">{{min.used}}</span>{{min.unused}} – <span class="cost">{{max.used}}</span>{{max.unused}}\n</span>\n')}]);n("spinnaker.core.presentation.isVisible.directive",[]).directive("isVisible",(function(){return function(e,t,n){e.$watch(n.isVisible,(function(e){t.css("visibility",e?"visible":"hidden")}))}}));class Xm{constructor(e,t){this.$scope=e,this.instanceTypeService=t,this.selectInstanceType=e=>{const{$scope:t}=this;t.selectedInstanceProfile&&t.selectedInstanceProfile.type===e&&(e=null,t.selectedInstanceProfile=null),this.command.viewState.instanceProfile=e,t.instanceProfiles.forEach((n=>{if(n.type===e){t.selectedInstanceProfile=n;const e=this.command.instanceType;if(e&&!Z(["custom","buildCustom"],n.type)){n.families.some((t=>t.instanceTypes.some((t=>t.name===e&&!t.unavailable))))||(this.command.instanceType=null)}}})),this.onProfileChanged&&this.onProfileChanged(e)},this.updateInstanceType=()=>{Ic.renderedPages.length>0&&(this.command.instanceType?Ic.markComplete("instance-type"):Ic.markIncomplete("instance-type"))},this.updateInstanceTypeDetails=()=>{this.instanceTypeService.getInstanceTypeDetails(this.command.selectedProvider,this.command.instanceType).then((e=>{this.command.viewState.instanceTypeDetails=e})),this.onTypeChanged&&this.onTypeChanged(this.command.instanceType)}}$onInit(){const{$scope:e}=this;this.instanceTypeService.getCategories(this.command.selectedProvider).then((t=>{e.instanceProfiles=t,e.instanceProfiles.length%3==0&&(e.columns=3),e.instanceProfiles.length%4==0&&(e.columns=4),e.instanceProfiles.length%5!=0&&7!==e.instanceProfiles.length||(e.columns=5),this.selectInstanceType(this.command.viewState.instanceProfile)})),this.command.region&&this.command.instanceType&&!this.command.viewState.instanceProfile&&this.selectInstanceType("custom"),this.getInstanceBuilderTemplate=Ni.getValue.bind(Ni,this.command.cloudProvider,"instance.customInstanceBuilderTemplateUrl"),e.$watch("$ctrl.command.instanceType",(()=>this.updateInstanceType()))}}Xm.$inject=["$scope","instanceTypeService"];const Zm={bindings:{command:"<",onProfileChanged:"=",onTypeChanged:"="},controller:Xm,controllerAs:"instanceArchetypeCtrl",templateUrl:"core/src/serverGroup/configure/common/v2instanceArchetype.directive.html"};n("spinnaker.core.serverGroup.configure.common.v2instanceArchetypeSelector",["spinnaker.core.serverGroup.configure.common.costFactor","spinnaker.core.presentation.isVisible.directive"]).component("v2InstanceArchetypeSelector",Zm),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/serverGroup/configure/common/v2instanceArchetype.directive.html",'<h4 class="col-md-12" style="margin-top: 10px">This application is:</h4>\n<div class="archetype-columns archetype-columns-{{columns}}" ng-repeat="instanceProfile in instanceProfiles">\n <button\n class="instance-profile"\n type="button"\n ng-class="{active: instanceArchetypeCtrl.command.viewState.instanceProfile === instanceProfile.type}"\n ng-click="instanceArchetypeCtrl.selectInstanceType(instanceProfile.type)"\n >\n <span\n is-visible="instanceArchetypeCtrl.command.viewState.instanceProfile === instanceProfile.type"\n class="far fa-check-circle selected-indicator"\n ></span>\n <div class="panel-heading">\n <h4>\n <span class="glyphicon glyphicon-{{instanceProfile.icon}}"></span>\n <div>{{instanceProfile.label}}</div>\n </h4>\n </div>\n </button>\n</div>\n<div class="clearfix" ng-if="instanceArchetypeCtrl.command.viewState.instanceProfile === \'custom\'">\n <dirty-instance-type-notification command="instanceArchetypeCtrl.command"></dirty-instance-type-notification>\n <div class="col-md-8">\n <select\n class="form-control input-sm"\n ng-model="instanceArchetypeCtrl.command.instanceType"\n ng-options="customType for customType in instanceArchetypeCtrl.command.backingData.filtered.instanceTypes"\n ng-change="instanceArchetypeCtrl.updateInstanceTypeDetails()"\n required\n >\n <option value="">Select an instance type...</option>\n </select>\n </div>\n</div>\n<ng-include\n src="instanceArchetypeCtrl.getInstanceBuilderTemplate()"\n ng-if="instanceArchetypeCtrl.command.viewState.instanceProfile === \'buildCustom\'"\n>\n</ng-include>\n')}]);const _m={bindings:{application:"<",component:"<",accounts:"<",clusterField:"<",singleRegion:"<",showAllRegions:"<?",onAccountUpdate:"<?",disableRegionSelect:"<?"},template:'\n <account-region-cluster-selector\n application="$ctrl.application"\n component="$ctrl.component"\n accounts="$ctrl.accounts"\n cluster-field="{{::$ctrl.clusterField}}"\n single-region="$ctrl.singleRegion"\n show-all-regions="$ctrl.showAllRegions"\n on-account-update="$ctrl.onAccountUpdate"\n disable-region-select="$ctrl.disableRegionSelect">\n </account-region-cluster-selector>\n '};n("spinnaker.core.accountRegionClusterSelectorWrapper.component",[]).component("accountRegionClusterSelectorWrapper",_m);class eg extends mi{constructor(){super(...arguments),this.$injectorProxy={},this.AccountRegionClusterSelector=la("accountRegionClusterSelectorWrapper",_m,this.$injectorProxy),this.InstanceArchetypeSelector=la("v2InstanceArchetypeSelector",Zm,this.$injectorProxy),this.InstanceTypeSelector=la("v2InstanceTypeSelector",qm,this.$injectorProxy),this.StageSummaryWrapper=la("stageSummary",Vm,this.$injectorProxy),this.StepExecutionDetailsWrapper=la("stepExecutionDetails",Wm,this.$injectorProxy),this.TargetSelect=la("targetSelect",Bc,this.$injectorProxy)}initialize(e){const t=e,n=this.$injectorProxy;Object.keys(e).filter((e=>"function"==typeof t[e])).forEach((e=>n[e]=t[e].bind(t)))}}const tg=new eg;class ng{constructor(e){this.$rootScope=e,this.stateChangeSuccess=new At,this.locationChangeSuccess=new At;this.$rootScope.$on("$stateChangeSuccess",((e,t,n,a,i)=>{this.stateChangeSuccess.next({to:t,toParams:n,from:a,fromParams:i})})),this.$rootScope.$on("$locationChangeSuccess",((e,t)=>this.locationChangeSuccess.next(t)))}}ng.$inject=["$rootScope"];const ag="spinnaker.core.state.events";n(ag,[]).service("stateEvents",ng);oi("react-ui-view-adapter {\n flex: 1 1 auto;\n display: flex;\n height: 100%;\n}\n");const ig="spinnaker.core.react";function rg(e,t,n,a=((e,t)=>e===t)){return n.every((n=>a(e[n],t[n])))}n(ig,["bcherny/ngimport","ui.router",ag]).run(["$injector",function(e){hi.initialize(e),vi.initialize(e),tg.initialize(e)}]);class sg{static deleteSecurityGroup(e,t,n){n.type="deleteSecurityGroup",n.securityGroupName=e.name,n.regions=[e.region],n.credentials=e.accountId;const a=tp.executeTask({job:[n],application:t,description:`Delete ${Js.get("Firewall")}: ${e.name}`});return dd.clearCache("securityGroups"),a}static upsertSecurityGroup(e,t,n,a={}){a.type="upsertSecurityGroup",a.securityGroupName=e.name,a.credentials=e.credentials||e.accountName;const i={...e,...a},r=tp.executeTask({job:[i],application:t,description:`${n} ${Js.get("Firewall")}: ${e.name}`});return dd.clearCache("securityGroups"),r}}oi(".search-result {\n display: inline-block;\n width: calc(100% - 20px);\n}\n.search-result > span + span {\n margin-left: 6px;\n}\n");class og extends ot.Component{render(){const{displayName:e,account:t}=this.props;return ot.createElement("span",{className:"search-result"},t&&ot.createElement(ns,{account:t}),ot.createElement(Sr,{tag:"span",message:e}))}}const lg=({categories:e,onItemKeyDown:t,onResultClick:n,resultRef:a})=>e.length?ot.createElement("ul",{className:"dropdown-menu",role:"menu"},e.map(((e,i)=>[ot.createElement("li",{key:e.category,className:"category-heading"},ot.createElement("div",{className:"category-heading"},"Recent ",e.category)),...e.results.map(((r,s)=>{const o=r.params||{},l=r.account||o.account||o.accountId||o.accountName;return ot.createElement("li",{key:r.id,className:"result",onClick:()=>n(e.category)},ot.createElement(Dn,{to:r.state,params:r.params},ot.createElement("a",{ref:e=>a(i,s,e),onKeyDown:t},ot.createElement(og,{displayName:r.displayName,account:l}))))}))]))):null,cg=(e,t)=>{if(e)for(const n of e)if("applications"===n.type.id){const e=n.results.find((e=>e.application.toLowerCase()===t.toLowerCase()));if(e)return{category:n,result:e}}},pg=(e,t)=>2===di.searchVersion?{key:e,tab:t}:{q:e},dg=({categories:e,query:t,onItemKeyDown:n,onResultClick:a,onSeeMoreClick:i,resultRef:r})=>{if(!e.length)return ot.createElement("ul",{className:"dropdown-menu",role:"menu"},ot.createElement("li",{className:"result"},ot.createElement("a",null,"No matches")));const s=cg(e,t);return ot.createElement("ul",{className:"dropdown-menu",role:"menu"},e.map(((e,o)=>{const l=pg(t,e.type.id);return[ot.createElement("li",{key:e.type.id,className:"category-heading flex-container-h no-wrap space-between baseline"},ot.createElement("span",null,e.type.displayName),ot.createElement(Dn,{to:"home.search",params:l},ot.createElement("a",{target:"_self",className:"expand-results",ref:e=>r(o,0,e),onClick:i,onKeyDown:n},"show all"))),e.results.map(((e,t)=>ot.createElement("li",{key:e.href,className:"result"},ot.createElement("a",{onKeyDown:n,onClick:()=>a(e),ref:e=>r(o,t+1,e),href:e.href,className:e===(null==s?void 0:s.result)?"query-match":void 0},ot.createElement(og,{displayName:e.displayName,account:e.account})))))]})))};oi(".infrastructure-project {\n display: block;\n border: 1px solid var(--color-mineshaft);\n background-color: var(--color-white);\n margin-bottom: 15px;\n}\n.infrastructure-project a {\n color: var(--color-mineshaft);\n display: block;\n}\n.infrastructure-project a:active,\n.infrastructure-project a:hover {\n font-weight: 600;\n}\n.infrastructure-project .project-summary {\n padding: 10px;\n background-color: var(--color-primary);\n color: var(--color-alabaster);\n}\n.infrastructure-project .project-summary .remove-result-link {\n opacity: 0;\n}\n.infrastructure-project .project-summary:hover .remove-result-link {\n opacity: 1;\n transition: opacity 0.25s ease-in;\n color: var(--color-concrete);\n}\n.infrastructure-project .project-summary:hover .remove-result-link:hover,\n.infrastructure-project .project-summary:hover .remove-result-link:active {\n color: var(--color-accent);\n}\n.infrastructure-project .project-summary .project-name {\n text-transform: uppercase;\n font-weight: 600;\n font-size: 120%;\n}\n.infrastructure-project .project-summary .project-name a {\n color: var(--color-accessory-light);\n display: inline-block;\n width: calc(100% - 20px);\n}\n.infrastructure-project .application-list {\n padding: 10px 15px;\n margin-bottom: 0;\n border-top: 1px solid var(--color-mineshaft);\n background-color: var(--color-cirrus);\n}\n.infrastructure-project .application-list li {\n list-style-type: none;\n}\n.infrastructure-project .application-list li a {\n color: var(--color-mineshaft);\n}\n");var ug=Object.defineProperty,mg=Object.getOwnPropertyDescriptor;let gg=class extends ot.Component{constructor(){super(...arguments),this.handleRemoveClicked=e=>{e.preventDefault(),this.props.onRemoveProject(this.props.id)},this.handleResultClick=()=>{this.props.onResultClick&&this.props.onResultClick("projects")}}render(){const{projectName:e,applications:t,onRemoveProject:n}=this.props,a=!!n;return ot.createElement("div",{className:"infrastructure-project",onClick:this.handleResultClick},ot.createElement("div",{className:"project-summary"},ot.createElement("div",{className:"project-name"},ot.createElement(Dn,{to:"home.project.dashboard",params:{project:e}},ot.createElement("a",null,e)),a&&ot.createElement("span",{className:"small clickable remove-result-link",onClick:this.handleRemoveClicked},ot.createElement(Ps,{value:"remove from history",placement:"left",delayShow:300},ot.createElement("span",{className:"glyphicon glyphicon-remove"})))),ot.createElement("div",{className:"application-count"},t.length||0," Application",1!==t.length?"s":"")),ot.createElement("ul",{className:"application-list"},t.map((t=>ot.createElement("li",{key:t},ot.createElement(Dn,{to:"home.project.application.insight.clusters",params:{project:e,application:t}},ot.createElement("a",null,t)))))))}};gg=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?mg(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&ug(t,n,r),r})([na],gg);var hg=Object.defineProperty,fg=Object.getOwnPropertyDescriptor;let vg=class extends ot.Component{constructor(){super(...arguments),this.handleResultClick=()=>{this.props.onResultClick&&this.props.onResultClick(this.props.categoryName)}}handleRemoveClicked(e,t,n){e.preventDefault(),this.props.onRemoveItem(t,n)}render(){const{categoryName:e,result:t,onRemoveItem:n}=this.props,a=!!n,i=t.params||{},r=t.account||i.account||i.accountId||i.accountName;return ot.createElement(Dn,{to:t.state,params:t.params},ot.createElement("a",{target:"_self",className:"list-group-item"},ot.createElement("span",{onClick:this.handleResultClick},ot.createElement(og,{displayName:t.displayName,account:r}),a&&ot.createElement("span",{className:"small clickable remove-result-link",onClick:n=>this.handleRemoveClicked(n,e,t.id)},ot.createElement(Ps,{value:"remove from history",placement:"left",delayShow:300},ot.createElement("span",{className:"glyphicon glyphicon-remove"}))))))}};vg=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?fg(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&hg(t,n,r),r})([na],vg);class Ag extends ot.Component{render(){const{podData:e}=this.props,{category:t}=e;return ot.createElement("div",{className:"col-md-4 category-container",key:t},ot.createElement("div",{className:"panel category row"},ot.createElement("div",{className:"summary"},ot.createElement("span",{className:"category-icon"},e.config.iconClass&&ot.createElement("span",{className:e.config.iconClass})),yr(t)," (",e.results.length,")"),ot.createElement("div",{className:"details-container list-group"},e.results.map((e=>ot.createElement(vg,{key:e.id,categoryName:t,result:e,onResultClick:this.props.onResultClick,onRemoveItem:this.props.onRemoveItem}))))))}}class Eg extends ot.Component{render(){const{results:e}=this.props;if(!e.length)return null;const t=e.find((e=>"projects"===e.category)),n=e.filter((e=>"projects"!==e.category)).sort(((e,t)=>e.category.localeCompare(t.category)));return ot.createElement("div",{className:"infrastructure-section container"},ot.createElement("div",{className:"recent-items"},ot.createElement("h3",null,"Recently viewed"),ot.createElement("div",{className:"row"},t&&ot.createElement("div",{className:"col-md-3"},ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-12"},t.results.map((e=>ot.createElement(gg,{key:e.id,id:e.id,projectName:m(e,"params.project"),applications:m(e,"extraData.config.applications",[]),onRemoveProject:this.props.onRemoveProject,onResultClick:this.props.onResultClick})))))),ot.createElement("div",{className:"col-md-"+(t?9:12)},ot.createElement("div",{className:"row"},n.map((e=>ot.createElement(Ag,{key:e.category,podData:e,onRemoveItem:this.props.onRemoveItem,onResultClick:()=>this.props.onResultClick(e.category)}))))))))}}class bg{static getItems(e){const t=[{state:"securityGroup",replacement:"firewall"},{state:"securityGroupDetails",replacement:"firewallDetails"}],n=this.cache.get(e)||[];return n.forEach((e=>{t.forEach((t=>{e.state&&e.state.includes(t.state)&&(e.state=e.state.replace(t.state,t.replacement))}))})),Y(n,"accessTime").reverse()}static addItem(e,t,n,a=[]){const i=this.getItems(e).slice(0,5),r=this.getExisting(i,n,a),s={params:n,state:t,accessTime:(new Date).getTime(),extraData:{},id:pr.generateUuid()};r&&i.splice(i.indexOf(r),1),5===i.length&&i.pop(),i.push(s),this.cache.put(e,i)}static removeItem(e,t){const n=this.getItems(e),a=n.find((e=>e.id===t));a&&(n.splice(n.indexOf(a),1),this.cache.put(e,n))}static removeLastItem(e){const t=this.getItems(e);t.length&&(t.splice(0,1),this.cache.put(e,t))}static addExtraDataToLatest(e,t){const n=this.getItems(e);n.length&&(n[0].extraData=t,this.cache.put(e,n))}static removeByAppName(e){const t="applications",n=this.getItems(t).filter((t=>t.params.application!==e));n&&this.cache.put(t,n)}static getExisting(e,t,n){return n&&n.length?e.find((e=>n.every((n=>e.params[n]===t[n])))):V(e,{params:fe(t,B)})}}bg.cache=Vp.createCache("history","user",{version:3,maxAge:bn.fromObject({days:90}).as("milliseconds")});const yg="spinnaker.core.history.recentHistory.service";function Cg(e){const{Component:t}=e,n=["projects","applications","loadBalancers","serverGroups","instances","securityGroups"],a=ot.useMemo((()=>hi.infrastructureSearchService.getSearcher()),[]);const{result:i,refresh:r}=Jo((async()=>{const e=async e=>{const t=a.getCategoryConfig(e),n=bg.getItems(e),i=await Promise.all(n.map((t=>function(e,t){const n={...t.params,...t.extraData};return a.formatRouteResult(e,n).then((e=>({...t,displayName:e})))}(e,t))));return{category:e,config:t,results:i}};return(await Promise.all(n.map((t=>e(t))))).filter((e=>e.results.length))}),[],[]),s=(e,t)=>{bg.removeItem(e,t),r()},o=e=>{Ui.log({category:"Primary Search",action:`Recent item selected from ${e}`})};return t?ot.createElement(t,{results:i,onRemoveItem:s,onRemoveProject:e=>s("projects",e),onResultClick:o}):ot.createElement(Eg,{results:i,onRemoveItem:s,onRemoveProject:e=>s("projects",e),onResultClick:o})}n(yg,[]).run(["$rootScope",e=>{e.$on("$stateChangeSuccess",((e,t,n)=>{var a;const i=null==(a=t.data)?void 0:a.history;if(i){const e=he(n||{},["debug","vis","trace"]),a=i.state||t.name;bg.addItem(i.type,a,e,i.keyParams)}}))}]);const wg=(e,t="")=>{if(!e||!e.length)return[];const n=t.toLowerCase();return e.slice().sort(((e,t)=>{if(e.displayName&&t.displayName){const a=e.displayName.toLowerCase().indexOf(n),i=t.displayName.toLowerCase().indexOf(n);return a===i?e.displayName.localeCompare(t.displayName):a-i}return 0}))};n("spinnaker.core.search.searchResult.searchRank.filter",[]).filter("searchRank",(()=>wg));var xg=Object.defineProperty,kg=Object.getOwnPropertyDescriptor,Bg=(e,t,n,a)=>{for(var i,r=a>1?void 0:a?kg(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&xg(t,n,r),r};let Sg=class extends ot.Component{constructor(e){super(e),this.query$=new At,this.destroy$=new At,this.handleWindowKeyup=e=>{const{target:t,key:n}=e;t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement||(({key:e,shiftKey:t})=>"/"===e&&t)(e)||"/"!==n||this.searchField.focus()},this.handleWindowClick=e=>{this.container.contains(e.target)||this.hideDropdown()},this.searchFieldBlurred=({relatedTarget:e})=>{this.container.contains(e)||this.hideDropdown()},this.searchFieldKeyUp=e=>{if(!this.state.showDropdown)return;const{key:t,shiftKey:n}=e;if("Escape"===t)Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"escape (from input)"}}),this.searchField.blur();else if("ArrowDown"===t)Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"arrow down (from input)"}}),e.preventDefault(),this.focusFirstSearchResult();else if("ArrowUp"===t)Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"arrow up (from input)"}}),e.preventDefault(),this.focusLastSearchResult();else if("Tab"===t)n||(Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"tab (from input)"}}),e.preventDefault(),this.focusFirstSearchResult());else if("Enter"===t){const{$state:t}=hi;if(this.state.categories){const e=cg(this.state.categories,this.state.query);e?(t.go("home.applications.application",{application:e.result.application}),this.hideDropdown()):t.go("home.search",pg(this.state.query))}e.preventDefault()}},this.focusFirstSearchResult=()=>{const e=this.resultRefs[0]&&this.resultRefs[0][0];e&&e.focus()},this.focusLastSearchResult=()=>{const e=T(this.resultRefs),t=e[e.length-1];t&&t.focus()},this.navigateResult=e=>{const{key:t,target:n}=e;if("Escape"===t)Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"escape (from result)"}}),this.setState({showDropdown:!1,showMinLengthWarning:!1,query:"",querying:!1,categories:null});else if("Tab"===t){const e=T(this.resultRefs);if(n===e[e.length-1])return Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"tab (from result)"}}),void this.hideDropdown()}else if("ArrowDown"===t){Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"down (from result)"}});const t=T(this.resultRefs),a=t.indexOf(n),i=t[a+1];i&&i.focus(),e.preventDefault()}else if("ArrowUp"===t){Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"up (from result)"}});const t=T(this.resultRefs),a=t.indexOf(n),i=t[a-1];i&&i.focus(),e.preventDefault()}else"Enter"===t&&(Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"enter (from result)"}}),setTimeout((()=>this.hideDropdown()),100))},this.queryChanged=({target:e})=>{const t=e.value,{showMinLengthWarning:n}=this.state,a=!!t&&t.length<3&&n;this.setState({query:t,querying:!1,showMinLengthWarning:a,categories:null},(()=>{t.length>=3?this.query$.next(t.trim()):a||this.considerMinLengthWarning()}))},this.showDropdown=()=>{this.setState({showDropdown:!0})},this.hideDropdown=()=>{this.setState({showDropdown:!1})},this.clearFilters=e=>{Wd.filterService.overrideFiltersForUrl(e)},this.SpinnerDropdown=()=>ot.createElement("ul",{className:"dropdown-menu",role:"menu"},ot.createElement("li",{className:"horizontal middle center spinner-section"},ot.createElement(bs,{size:"small"}))),this.MinLengthWarning=()=>ot.createElement("ul",{className:"dropdown-menu",role:"menu"},ot.createElement("li",{className:"horizontal middle center spinner-section"},ot.createElement("span",{className:"error-message"},"Please enter at least ",3," characters"))),this.RecentlyViewed=()=>ot.createElement(Cg,{limit:5,Component:({results:e})=>(this.resultRefs=e.map((()=>[])),ot.createElement(lg,{categories:e,onItemKeyDown:this.navigateResult,onResultClick:e=>{this.hideDropdown(),Ui.log({category:"Global Search",action:`Recent item selected from ${e}`})},resultRef:(e,t,n)=>{this.resultRefs[e]&&(this.resultRefs[e][t]=n)}}))}),this.SearchResults=()=>{const{query:e,categories:t}=this.state;return ot.createElement(dg,{categories:t,query:e,onItemKeyDown:this.navigateResult,onResultClick:e=>{Ui.log({category:"Global Search",action:"Result Selected"}),this.hideDropdown(),this.clearFilters(e)},onSeeMoreClick:()=>{Ui.log({category:"Global Search",action:"See all results selected"}),this.hideDropdown()},resultRef:(e,t,n)=>{this.resultRefs[e]&&(this.resultRefs[e][t]=n)}})},this.state={showDropdown:!1,showMinLengthWarning:!1,query:"",querying:!1,categories:null}}componentDidMount(){window.addEventListener("keyup",this.handleWindowKeyup),window.addEventListener("click",this.handleWindowClick);const{infrastructureSearchService:e}=hi,t=e.getSearcher();this.query$.pipe(Qt(300),Pt((e=>{Ui.log({category:"Global Search",action:"Query",data:{label:e}}),this.setState({querying:!0})})),Dt((e=>vt(t.query(e)))),St((e=>e.filter((({results:e})=>e.length)).map((e=>({...e,results:wg(e.results,e.query).slice(0,5)}))).sort(((e,t)=>e.type.order-t.type.order)))),It(this.destroy$)).subscribe((e=>{this.resultRefs=e.map((()=>[])),this.setState({querying:!1,categories:e})}))}componentWillUnmount(){window.removeEventListener("keyup",this.handleWindowKeyup),window.removeEventListener("click",this.handleWindowClick),this.destroy$.next()}considerMinLengthWarning(){const{query:e}=this.state;this.setState({showMinLengthWarning:!!e&&e.length<3})}renderDropdown(){const{query:e,querying:t,showMinLengthWarning:n,categories:a}=this.state,{SpinnerDropdown:i,MinLengthWarning:r,SearchResults:s,RecentlyViewed:o}=this;return e?t?ot.createElement(i,null):e.length<3&&n?ot.createElement(r,null):a?ot.createElement(s,null):null:ot.createElement(o,null)}render(){const{showDropdown:e,query:t}=this.state;return ot.createElement("li",{ref:e=>this.container=e,className:"global-search open"},ot.createElement("form",{className:"right global-search",onSubmit:e=>e.preventDefault()},ot.createElement("div",{className:"form-group has-feedback"},ot.createElement("div",{className:"input-group"},ot.createElement("input",{ref:e=>this.searchField=e,type:"search",className:"form-control flat input-sm no-border",placeholder:"Search",value:t,onBlur:this.searchFieldBlurred,onFocus:this.showDropdown,onChange:this.queryChanged,onKeyUp:this.searchFieldKeyUp}),ot.createElement(Ps,{placement:"right",template:ot.createElement("span",null,"Keyboard shortcut: ",ot.createElement("span",{className:"keyboard-key"},"/"))},ot.createElement("i",{className:"glyphicon glyphicon-search form-control-feedback"}))))),e&&this.renderDropdown())}};Bg([da(300)],Sg.prototype,"considerMinLengthWarning",1),Sg=Bg([na],Sg);class Mg{constructor(e){this.$stateRegistryProvider=e,this.registeredStates=[]}setNestedState(e,t=!1){const n=r(e);t||(this.fixStateName(n),this.fixStateViews(n),n.parent=null),this.registeredStates.includes(n.name)||(this.registeredStates.push(n.name),this.$stateRegistryProvider.register(n)),n.children&&n.children.length&&n.children.forEach((e=>{e.parent=n.name,this.setNestedState(e,t)}))}fixStateName(e){e.parent&&(e.name=`${e.parent}.${e.name}`)}fixStateViews(e){const t=e.views||{},n=[];Object.keys(t).forEach((a=>{const i=a.match("../");if(i&&i.length&&"string"==typeof e.parent){const r=e.parent.split(".").slice(0,-1-i.length).join(".")+".";t[a.replace(/(..\/)+/,r)]=t[a],n.push(a)}})),n.forEach((e=>delete t[e]))}$get(){return this}}Mg.$inject=["$stateRegistryProvider"];const Ng="spinnaker.core.navigation.stateHelper.provider";n(Ng,[]).provider("stateHelper",Mg);oi(".secondary-panel > div {\n flex: 1 1 auto;\n overflow-y: auto;\n overflow-x: hidden;\n}\n.secondary-panel .nav {\n margin: 52px 24px 32px 4px;\n}\n.secondary-panel .nav h3 {\n margin-right: 10px;\n font-weight: 600;\n}\n.secondary-panel .nav h4 {\n font-weight: 600;\n text-transform: uppercase;\n margin-bottom: 0;\n font-size: 16px;\n}\n.secondary-panel .nav .list-group-item.active {\n font-weight: 700;\n}\n.secondary-panel .nav .nav-search {\n margin-top: 10px;\n}\n.secondary-panel .nav-content .header {\n border-bottom: none;\n padding: 0;\n position: relative;\n z-index: 10;\n background-color: var(--color-alabaster);\n}\n.secondary-panel .nav-content .header h3 {\n display: inline-block;\n font-weight: 600;\n}\n.secondary-panel .nav-content .header .actions {\n display: inline-block;\n}\n.secondary-panel .nav-content .header .filters {\n display: inline-block;\n}\n.secondary-panel .nav-content .header .filters label {\n font-weight: normal;\n margin-bottom: 0;\n margin-left: 10px;\n}\n.secondary-panel .nav-content .header.header-clusters {\n padding-top: 0;\n}\n.secondary-panel .nav-content .header.header-clusters h3 {\n padding-bottom: 5px;\n}\n@media (min-width: 708px) and (max-width: 992px) {\n .secondary-panel .nav-content .header.header-clusters h3 {\n font-size: 110%;\n }\n}\n.secondary-panel .nav-content .header.header-clusters .filters {\n height: 40px;\n line-height: 40px;\n vertical-align: top;\n font-size: 90%;\n}\n.secondary-panel .nav-content .content {\n padding: 0 0 10px;\n}\n@media (min-width: 708px) and (max-width: 992px) {\n .secondary-panel .nav-content .content {\n padding: 0 5px;\n }\n}\n.nav.navbar-nav .remove-border-top:hover,\n.nav.navbar-nav .remove-border-top:active {\n border-top-color: transparent;\n transition: none;\n}\n.nav.navbar-nav .glyphicon {\n padding-right: 4px;\n}\n");class Dg{constructor(e,t){this.$urlRouterProvider=e,this.stateHelperProvider=t,this.root={name:"home",abstract:!0,params:{allowModalToStayOpen:{dynamic:!0,value:null}},url:"?{debug:boolean}&{vis:query}&{trace:query}",dynamic:!0,children:[]}}addToRootState(e){this.root.children.find((t=>t.name===e.name))||this.root.children.push(e),this.setStates()}setStates(){this.stateHelperProvider.setNestedState(this.root)}addRewriteRule(e,t){this.$urlRouterProvider.when(e,t)}buildDynamicParams(e){return e.reduce(((e,t)=>{const n=t.param||t.model;return e[n]={type:t.type||"string",dynamic:!0},t.array&&(e[n].array=!0),e}),{})}paramsToQuery(e){return e.map((e=>e.param||e.model)).join("&")}$get(){return this}}Dg.$inject=["$urlRouterProvider","stateHelperProvider"];const Ig={decode:e=>{if(e){const t={};return e.split(",").map((e=>e.replace(/%2c/g,","))).forEach((e=>t[e]=!0)),t}return{}},encode:e=>{if(e){const t=Object.keys(e).filter((t=>e[t]));return t.length?t.sort().map((e=>e.replace(/,/g,"%2c"))).join(","):null}return null},equals:(e,t)=>E(e,t),is:e=>w(e)},Fg={decode:e=>!e||"true"!==e,encode:e=>e?null:"true",equals:(e,t)=>e===t,is:()=>!0},Tg={decode:e=>!!e&&"true"===e,encode:e=>e?"true":null,equals:(e,t)=>e===t,is:()=>!0},Qg={decode:e=>({key:e}),encode:e=>e?e.key:null,equals:(e,t)=>E(e,t),is:e=>w(e)},Pg="spinnaker.core.navigation.state.config.provider";n(Pg,[ca,Ng]).provider("stateConfig",Dg).config(["$urlRouterProvider",e=>{e.otherwise("/"),e.when("/{path:.*}/",["$match",e=>"/"+e.path])}]).config(["$urlServiceProvider",e=>{e.config.type("trueKeyObject",Ig),e.config.type("inverse-boolean",Fg),e.config.type("boolean",Tg),e.config.type("sortKey",Qg)}]);class Rg{static forEachSorted(e,t,n){Object.keys(e).sort().forEach((a=>{t.call(n,e[a],a)}))}static encodeUriQuery(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}static buildUrl(e,t={}){if(!t)return e;const n=[];return Rg.forEachSorted(t,((e,t)=>{if(null===e||B(e))return;let a;a=Array.isArray(e)?e:[e],a.forEach((e=>{j(e)&&(e=ve(e)?e.toISOString():JSON.stringify(e)),n.push(`${Rg.encodeUriQuery(t)}=${Rg.encodeUriQuery(e)}`)}))})),n.length>0&&e&&(e+=(e.includes("?")?"&":"?")+n.join("&")),e}}class Ug{constructor(e){this.$state=e}createCloneTask(e){const t=e.getValueFor("deploy.server.groups"),n=e.getValueFor("deploy.account.name");let a;if(t&&Object.keys(t)[0]){const e=Object.keys(t),i=t[e[0]][0];a=!!i&&(!!i.match(gd.VERSION_PATTERN)&&this.$state.href("home.applications.application.insight.clusters.serverGroup",{application:i.split("-")[0],cluster:i.replace(gd.VERSION_PATTERN,""),account:n,accountId:n,region:e,serverGroup:i,q:i}))}else a=!1;return a}asgTask(e){const t=e.getValueFor("asgName"),n=e.getValueFor("credentials");let a;return a=!!t&&(t.match(gd.VERSION_PATTERN)?this.$state.href("home.applications.application.insight.clusters.serverGroup",{application:t.split("-")[0],cluster:t.replace(gd.VERSION_PATTERN,""),account:n,accountId:n,region:e.getValueFor("regions")[0],serverGroup:t}):"/"),a}static buildFromMetadata(e){const t=$m.urlBuilder.getBuilder(e.type);let n;return n=t?t.build(e,hi.$state):"/",n}buildFromTask(e){const t=e.name||"";function n(e){return t.includes(e)}let a;switch(!0){case n("Destroy Server Group"):a=!1;break;case n("Disable Server Group"):case n("Enable Server Group"):case n("Resize Server Group"):a=this.asgTask(e);break;case n("Create Cloned Server Group"):case n("Create New Server Group"):a=this.createCloneTask(e);break;default:a=!1}return a}}$m.urlBuilder.register("applications",new class{build(e,t){let n;return n=e.project?t.href("home.project.application",{application:e.application,project:e.project},{inherit:!1}):t.href("home.applications.application",{application:e.application},{inherit:!1}),n}}),$m.urlBuilder.register("clusters",new class{build(e,t){const n={acct:e.account};let a;return e.cluster&&(n.q=`cluster:${e.cluster}`),e.stack&&(n.stack=e.stack),e.detail&&(n.q=`detail:${e.detail}`),e.region&&(n.reg=e.region),a=e.project?t.href("home.project.application.insight.clusters",{application:e.application,project:e.project},{inherit:!1}):t.href("home.applications.application.insight.clusters",{application:e.application},{inherit:!1}),Rg.buildUrl(a,n)}}),$m.urlBuilder.register("instances",new class{build(e,t){let n;if(e.application){const a=t.href("home.applications.application.insight.clusters.instanceDetails",{application:e.application,instanceId:e.instanceId,provider:e.provider},{inherit:!1});n=Rg.buildUrl(a,{q:e.serverGroup,acct:e.account,reg:e.region})}else n=t.href("home.instanceDetails",{account:e.account,region:e.region,instanceId:e.instanceId,provider:e.provider});return n}}),$m.urlBuilder.register("loadBalancers",new class{build(e,t){const n=t.href("home.applications.application.insight.loadBalancers.loadBalancerDetails",{application:e.application,name:e.loadBalancer,region:e.region||e.namespace,accountId:e.account,vpcId:e.vpcId,provider:e.provider},{inherit:!1});return Rg.buildUrl(n,{q:e.loadBalancer,reg:e.region,acct:e.account})}}),$m.urlBuilder.register("projects",new class{build(e,t){return t.href("home.project.dashboard",{project:e.name},{inherit:!1})}}),$m.urlBuilder.register("securityGroups",new class{build(e,t){const n=t.href("home.firewallDetails",{accountId:e.account,region:e.region,name:e.name,vpcId:e.vpcId,provider:e.provider});return Rg.buildUrl(n)}}),$m.urlBuilder.register("serverGroups",new class{build(e,t){const n=e.project?"project":"applications",a=t.href(`home.${n}.application.insight.clusters.serverGroup`,{application:e.application,accountId:e.account,region:e.region,serverGroup:e.serverGroup,provider:e.provider,project:e.project},{inherit:!1});return Rg.buildUrl(a,{q:e.serverGroup,acct:e.account,reg:e.region})}}),$m.urlBuilder.register("task",new class{build(e,t){return t.href("home.applications.application.tasks.taskDetails",{application:e.application,taskId:e.taskId},{inherit:!1})}}),$m.urlBuilder.register("tasks",new class{build(e,t){return t.href("home.applications.application.tasks",{application:e.application},{inherit:!1})}});class zg{static parseQueryString(e=""){const t={};return e.split("&").forEach((e=>{let n,a,i;e&&(a=e=e.replace(/\+/g,"%20"),n=e.indexOf("="),-1!==n&&(a=e.substring(0,n),i=e.substring(n+1)),a=this.tryDecodeURIComponent(a),null!==a&&(i=!(i&&i.length>0)||this.tryDecodeURIComponent(i),void 0===t[a]?t[a]=i:Array.isArray(t[a])?t[a].push(i):t[a]=[t[a],i]))})),t}static tryDecodeURIComponent(e){try{return decodeURIComponent(e)}catch(e){return null}}}var Gg,jg;(jg=Gg||(Gg={}))[jg.INITIAL=0]="INITIAL",jg[jg.SEARCHING=1]="SEARCHING",jg[jg.FINISHED=2]="FINISHED",jg[jg.NO_RESULTS=3]="NO_RESULTS",jg[jg.ERROR=4]="ERROR";class Lg{constructor(){this.types=[]}register(e){this.types.push(e)}get(e){return this.types.find((t=>t.id===e))}getAll(){return this.types.slice().sort(((e,t)=>e.order-t.order))}getSearchCategories(){return this.types.map((e=>e.id))}}const Og=new Lg;class Yg{static search(e){if(re(e))return vt(this.EMPTY_RESULTS);const t={...e},n=Og.getAll(),a=new At,i=(t,n)=>{const a=Ae(t.results.map((e=>((e,t)=>({...e,href:Ug.buildFromMetadata(e),displayName:t.displayFormatter(e)}))(e,n))).filter((e=>e.href)),(e=>e.href)),i=e.key;return{type:n,results:a,status:Gg.FINISHED,query:i}};return vt(n).pipe(Rt((e=>e.search(t,a).pipe(St((t=>i(t,e))),Ut((t=>((e,t)=>Et({error:e,type:t,results:[],status:Gg.ERROR}))(t,e)))))),Pt((e=>a.next(e))),zt((()=>a.complete())))}}Yg.EMPTY_RESULTS=Og.getAll().map((e=>({type:e,results:[],status:Gg.FINISHED})));oi(".glyphicon.healthy,\n.fa.healthy {\n color: var(--color-success);\n}\n.glyphicon.unhealthy,\n.fa.unhealthy {\n color: var(--color-danger);\n}\n.glyphicon.unknown,\n.fa.unknown {\n color: var(--color-dovegray);\n}\nhealth-counts {\n display: inherit;\n}\n.health-counts .instance-health-counts .glyphicon {\n top: 0;\n}\n.health-counts .instance-health-counts .healthy {\n color: var(--color-success);\n}\n.health-counts .instance-health-counts .unhealthy {\n color: var(--color-alert);\n}\n.health-counts .instance-health-counts .dead {\n color: var(--color-danger);\n}\n");class $g extends ot.Component{constructor(e){super(e),this.state=this.calculatePercent(e.container)}calculatePercent(e){const t=(e=e||{}).up||0,n=e.down||0,a=e.succeeded||0,i=e.failed||0,r=e.unknown||0,s=e.starting||0,o=e.total||t+n+r+s+a+i,l=o?Math.floor(100*(t+a)/o):void 0;return{percentLabel:void 0===l?"n/a":l+"%",statusClass:void 0===l?"disabled":100===l?"healthy":l<100&&l>0?"unhealthy":0===l?"dead":"disabled",total:o}}componentWillReceiveProps(e){E(e.container,this.props.container)||this.setState(this.calculatePercent(e.container))}render(){const e=ot.createElement("span",null,ot.createElement("table",{className:"tooltip-table"},ot.createElement("tbody",null,ot.createElement("tr",null,ot.createElement("td",null,ot.createElement("span",{className:"glyphicon glyphicon-Up-triangle healthy"})),ot.createElement("td",null,"Up")),ot.createElement("tr",null,ot.createElement("td",null,ot.createElement("span",{className:"glyphicon glyphicon-Down-triangle dead"})),ot.createElement("td",null,"Down")),ot.createElement("tr",null,ot.createElement("td",null,ot.createElement("span",{className:"glyphicon glyphicon-Unknown-triangle unknown"})),ot.createElement("td",null,"In transition or no status reported")),ot.createElement("tr",null,ot.createElement("td",null,ot.createElement("span",{className:"glyphicon glyphicon-minus disabled small"})),ot.createElement("td",null,"Out of Service")),ot.createElement("tr",null,ot.createElement("td",null,ot.createElement("span",{className:"glyphicon glyphicon-Succeeded-triangle small"})),ot.createElement("td",null,"Terminated successfully")),ot.createElement("tr",null,ot.createElement("td",null,ot.createElement("span",{className:"glyphicon glyphicon-Failed-triangle small"})),ot.createElement("td",null,"Terminated unsuccessfully")))),ot.createElement("span",null,this.props.additionalLegendText)),t=this.props.container,n=this.state.percentLabel;let a=!1;const i=[];t.up&&(i.push(ot.createElement("span",{key:"up"}," ",t.up," ",ot.createElement("span",{className:"glyphicon glyphicon-Up-triangle healthy"}))),a=!0),t.down&&t.down!==t.missingHealthCount&&(a&&i.push(ot.createElement("span",{key:"downslash"}," / ")),i.push(ot.createElement("span",{key:"down"}," ",t.down," ",ot.createElement("span",{className:"glyphicon glyphicon-Down-triangle dead"}))),a=!0),(t.unknown||t.starting)&&(a&&i.push(ot.createElement("span",{key:"unknownslash"}," / ")),i.push(ot.createElement("span",{key:"unknown"}," ",t.unknown+t.starting," ",ot.createElement("span",{className:"glyphicon glyphicon-Unknown-triangle unknown"}))),a=!0),t.outOfService&&(a&&i.push(ot.createElement("span",{key:"outOfServiceslash"}," / ")),i.push(ot.createElement("span",{key:"outOfService"}," ",t.outOfService," ",ot.createElement("span",{className:"glyphicon glyphicon-OutOfService-triangle disabled small"}))),a=!0),t.succeeded&&(a&&i.push(ot.createElement("span",{key:"succeededslash"}," / ")),i.push(ot.createElement("span",{key:"succeeded"}," ",t.succeeded," ",ot.createElement("span",{className:"glyphicon glyphicon-Succeeded-triangle disabled small"}))),a=!0),t.failed&&(a&&i.push(ot.createElement("span",{key:"failedslash"}," / ")),i.push(ot.createElement("span",{key:"failed"}," ",t.failed," ",ot.createElement("span",{className:"glyphicon glyphicon-Failed-triangle disabled small"}))));const r=this.props.className||"";return"n/a"!==n?ot.createElement("span",{className:`health-counts ${r}`},ot.createElement(Ps,{template:e,placement:this.props.legendPlacement},ot.createElement("span",{className:"counter instance-health-counts"},i,t.unknown!==this.state.total&&ot.createElement("span",null," ",": ",ot.createElement("span",{className:this.state.statusClass},n))))):t.outOfService?ot.createElement("span",{className:`health-counts ${r}`},ot.createElement(Ps,{template:e},ot.createElement("span",{className:"counter instance-health-counts"},ot.createElement("span",null,t.outOfService," ",ot.createElement("span",{className:"glyphicon glyphicon-minus disabled small"}))))):null}}$g.defaultProps={legendPlacement:"top",container:{}};class Hg{static setDataSourceOrder(e){this.dataSourceOrder=e,this.sortDataSources()}static sortDataSources(){let e=this.defaultDataSourceOrder;this.dataSourceOrder.length&&(e=this.dataSourceOrder),this.dataSources.forEach((t=>{e.includes(t.key)||e.push(t.key)})),this.dataSources.sort(((t,n)=>e.indexOf(t.key)-e.indexOf(n.key)))}static registerDataSource(e){this.dataSources.push(e),this.sortDataSources()}static getDataSources(){return p(this.dataSources)}static removeDataSource(e){this.dataSources=this.dataSources.filter((t=>t.key!==e))}static clearDataSources(){this.dataSources.length=0}}Hg.defaultDataSourceOrder=["environments","serverGroups","executions","loadBalancers","securityGroups","tasks","config"],Hg.dataSources=[],Hg.dataSourceOrder=[];class Vg{static resetViewedApplications(){this.viewedApplications.length=0}static isInferredApplication(e){return!e.attributes||!e.attributes.email}static checkIfInferredAndWarn(e){this.check(e)&&this.warn(e.name)}static check(e){const{name:t}=e,n=this.viewedApplications.includes(t);return this.viewedApplications.push(t),!n&&this.isInferredApplication(e)}static warn(e){to.publish({key:"inferredApplicationWarning",action:"create",content:ot.createElement("div",null,"The application ",ot.createElement("b",null,e)," has not been ",ot.createElement("a",{href:`#/applications/${e}/config`},"configured"),".")})}}Vg.viewedApplications=[];class Jg{static listApplications(){return Si("/applications").useCache().get()}static getApplicationAttributes(e){return Si("/applications").path(e).query({expand:!1}).get().then((e=>(this.splitAttributes(e.attributes,["accounts","cloudProviders"]),e.attributes)))}static getApplicationPermissions(e){return Si("/applications").path(e).query({expand:!1}).get().then((e=>e.attributes.permissions))}static getApplication(e,t=!0){return Si("/applications").path(e).query({expand:t}).get().then((e=>{const t=Hg.getDataSources(),n=new Qh(e.name,eo.createScheduler(),t);return n.attributes=e.attributes,this.splitAttributes(n.attributes,["accounts","cloudProviders"]),this.setDisabledDataSources(n),n.refresh(),n}))}static splitAttributes(e,t){t.forEach((t=>{e[t]?Array.isArray(e[t])||(e[t]=e[t].split(",").map((e=>e.trim()))):e[t]=[]}))}static setDisabledDataSources(e){const t=e.dataSources,n=e.attributes.dataSources;n?t.forEach((t=>{t.optional&&(t.optIn?this.setDataSourceDisabled(t,e,!n.enabled.includes(t.key)):this.setDataSourceDisabled(t,e,n.disabled.includes(t.key)))})):(t.filter((e=>e.optIn)).forEach((t=>this.setDataSourceDisabled(t,e,!0))),Vg.isInferredApplication(e)&&t.filter((e=>e.requireConfiguredApp)).forEach((t=>this.setDataSourceDisabled(t,e,!0)))),t.filter((e=>e.requiresDataSource)).forEach((n=>{const a=t.find((e=>e.key===n.requiresDataSource));a&&this.setDataSourceDisabled(n,e,a.disabled)}))}static setDataSourceDisabled(e,t,n){e.disabled=n,e.badge&&(t.dataSources.find((t=>t.key===e.badge)).disabled=n)}}function Wg(e){const{result:t,status:n}=Jo((()=>Jg.listApplications().then((e=>e.map((e=>e.name)).sort()))),[],[]),a=pt((()=>t.map((e=>({label:e,value:e})))),[t]),i=qo((e=>{if("PENDING"===n)return Ur("Loading apps...");const a=(e?"string"==typeof e?[e]:e:[]).find((e=>!t.includes(e)));return a?zr(`Application ${a} does not exist.`):void 0}));return Do(e.validation,i,[t,n]),ot.createElement(qr,{...e,mode:"VIRTUALIZED",options:a,isLoading:"PENDING"===n})}class Kg{static get BACKSPACE(){return"Backspace"}static get DOWN_ARROW(){return"ArrowDown"}static get DELETE(){return"Delete"}static get ENTER(){return"Enter"}static get ESCAPE(){return"Escape"}static get LEFT_ARROW(){return"ArrowLeft"}static get RIGHT_ARROW(){return"ArrowRight"}static get UP_ARROW(){return"ArrowUp"}}class qg extends ot.Component{constructor(e){super(e),this.handleClusterChange=e=>{this.props.onChange&&this.props.onChange({clusterName:e.currentTarget.value})},this.toggleFreeFormClusterField=()=>this.setState({freeFormClusterField:!this.state.freeFormClusterField});const{clusters:t,model:n}=this.props,a=!(Array.isArray(t)&&t.some((e=>e===n))),i=null!=n||""!==(n||"").trim();this.state={freeFormClusterField:!!i&&a}}render(){return ot.createElement("div",null,ot.createElement("div",null,!this.state.freeFormClusterField&&ot.createElement("select",{className:"form-control input-sm",onChange:this.handleClusterChange,required:this.props.required,value:this.props.model||""},ot.createElement("option",{value:""},"-- select cluster --"),(this.props.clusters||[]).map((e=>ot.createElement("option",{key:e,value:e},e)))),this.state.freeFormClusterField&&ot.createElement("input",{type:"text",className:"form-control input-sm",required:this.props.required,value:this.props.model||"",onChange:this.handleClusterChange,onBlur:this.handleClusterChange})),ot.createElement("div",{className:"pull-right"},!this.state.freeFormClusterField&&ot.createElement("a",{className:"clickable",onClick:this.toggleFreeFormClusterField},"Toggle for text input"),this.state.freeFormClusterField&&ot.createElement("a",{className:"clickable",onClick:this.toggleFreeFormClusterField},"Toggle for list of existing clusters")))}}class Xg extends ot.Component{render(){const{matches:e}=this.props;return e&&e.length?ot.createElement("ul",{className:"nostyle"},e.map(((e,t)=>ot.createElement("li",{key:t},ot.createElement(ns,{account:e.account}),ot.createElement("span",{className:"break-word"},e.name),e.regions&&e.regions.length&&ot.createElement("i",null," in ",e.regions.join(", ")))))):ot.createElement("div",null,"(no matches)")}}const Zg="spinnaker.core.widget.cluster.clusterMatches.component";n(Zg,[]).component("clusterMatches",yn(jl(Xg,"clusterMatches"),["matches"]));class _g extends ot.Component{constructor(e){super(e),this.valueChanged=({target:{value:e}})=>{const t=parseInt(e,10);this.props.onChange(isNaN(t)?e:t)},this.state={expressionActive:C(e.value),glowing:!1}}componentWillReceiveProps(e){const t=C(e.value);this.state.expressionActive!==t&&this.setState({expressionActive:t})}setExpressionActive(e){this.setState({expressionActive:e})}setGlow(e){this.setState({glowing:e})}render(){const{expressionActive:e,glowing:t}=this.state,{value:n,min:a,max:i,required:r=!1,error:s,disabled:o}=this.props;return ot.createElement("div",{className:"navbar-form",style:{padding:0,margin:0,display:"inline-block"}},ot.createElement(Ps,{value:s,placement:"right"},ot.createElement("div",{className:`button-input${t&&!s?" focus":""}${s?" invalid":""}`},ot.createElement("span",{className:"btn-group btn-group-xs",role:"group"},ot.createElement("button",{type:"button",disabled:o,className:"btn btn-default "+(e?"":"active"),onClick:()=>this.setExpressionActive(!1),onFocus:()=>this.setGlow(!0),onBlur:()=>this.setGlow(!1)},ot.createElement(Ps,{value:"Toggle to enter number"},ot.createElement("span",null,"Num"))),ot.createElement("button",{type:"button",disabled:o,className:"btn btn-default "+(e?"active":""),onClick:()=>this.setExpressionActive(!0),onFocus:()=>this.setGlow(!0),onBlur:()=>this.setGlow(!1)},ot.createElement(Ps,{value:"Toggle to enter expression"},ot.createElement("span",null,"${","β¦","}")))),ot.createElement("input",{type:e?"text":"number",disabled:o,className:"form-control borderless inline-"+(e?"text":"number"),value:n,min:a,max:i,onChange:this.valueChanged,onFocus:()=>this.setGlow(!0),onBlur:()=>this.setGlow(!1),required:r}))))}}var eh,th;(th=eh||(eh={}))[th.BACKSPACE=0]="BACKSPACE",th[th.REMOVE=1]="REMOVE";class nh extends ot.Component{constructor(){super(...arguments),this.refCallback=e=>{e&&this.props.onCreate(e)},this.handleFocus=()=>{this.props.onFocus()},this.handleBlur=()=>{this.props.onBlur()},this.handleKeyUp=e=>{switch(e.key){case Kg.BACKSPACE:case Kg.DELETE:this.props.onDelete(this.props.tag,0);break;case Kg.LEFT_ARROW:case Kg.RIGHT_ARROW:this.props.onKeyUp(this.props.tag,e.key)}},this.handleRemoveClick=()=>{this.props.onDelete(this.props.tag,1)}}render(){const{key:e,text:t}=this.props.tag;return ot.createElement("div",{ref:this.refCallback,className:"tag",onBlur:this.handleBlur,onFocus:this.handleFocus,onKeyUp:this.handleKeyUp,tabIndex:-1},ot.createElement("div",{className:"tag__category"},e.toLocaleUpperCase()),ot.createElement("div",{className:"tag__label"},t),ot.createElement("div",{className:"tag__remove"},ot.createElement("i",{className:"fa fa-times-circle",onClick:this.handleRemoveClick})))}}nh.defaultProps={onBlur:()=>{},onCreate:()=>{},onDelete:()=>{},onFocus:()=>{},onKeyUp:()=>{}};oi(".tag-list {\n align-items: center;\n display: flex;\n}\n.tag-list .tag {\n align-items: center;\n cursor: default;\n display: flex;\n font-size: 14px;\n margin-right: 10px;\n}\n.tag-list .tag .tag__category {\n background-color: var(--color-primary);\n border-radius: 4px 0 0 4px;\n color: var(--color-white);\n padding: 8px;\n}\n.tag-list .tag .tag__label {\n background-color: var(--color-accent-g2);\n color: var(--color-primary);\n flex: 1 0 auto;\n padding: 8px;\n}\n.tag-list .tag .tag__remove {\n background-color: var(--color-accent-g2);\n border-radius: 0 4px 4px 0;\n color: var(--color-primary);\n padding: 8px;\n}\n.tag-list .tag .tag__remove .fa.fa-times-circle {\n cursor: pointer;\n}\n");class ah extends ot.Component{constructor(){super(...arguments),this.tagElements=[],this.handleBlur=()=>{this.props.onBlur()},this.handleCreate=e=>{this.tagElements.push(e),this.props.onUpdate(this.tagElements)},this.handleDelete=(e,t)=>{const n=this.findIndex(e);switch(this.tagElements.splice(n,1),this.props.onUpdate(this.tagElements),t){case eh.BACKSPACE:this.tagElements.length?(0===n?this.tagElements[0].focus():n<=this.tagElements.length-1?this.tagElements[n].focus():this.tagElements[n-1].focus(),this.props.onDelete(e,!1)):this.props.onDelete(e,!0);break;case eh.REMOVE:this.props.onDelete(e,!0)}Ui.log({category:"Infrastructure Search Tags",action:"Individual tag removed"})},this.handleFocus=()=>{this.props.onFocus()},this.handleKeyUp=(e,t)=>{const n=this.findIndex(e);switch(t){case Kg.LEFT_ARROW:0===n?this.props.onKeyUp():this.tagElements[n-1].focus();break;case Kg.RIGHT_ARROW:n===this.tagElements.length-1?this.props.onKeyUp():this.tagElements[n+1].focus()}}}findIndex(e){return this.props.tags.findIndex((t=>e===t))}render(){const e=this.props.tags||[];return ot.createElement("div",{className:"tag-list"},e.map((e=>ot.createElement(nh,{key:[e.key,e.text].join("|"),tag:e,onBlur:this.handleBlur,onCreate:this.handleCreate,onDelete:this.handleDelete,onFocus:this.handleFocus,onKeyUp:this.handleKeyUp}))))}}ah.defaultProps={onBlur:()=>{},onDelete:()=>{},onFocus:()=>{},onKeyUp:()=>{},onUpdate:()=>{}};class ih extends ot.Component{render(){return ot.createElement("div",{className:"table-header"},this.props.children)}}class rh extends ot.Component{render(){return ot.createElement("div",{className:"table-row small"},this.props.children)}}class sh extends ot.Component{render(){return ot.createElement("div",{className:"table-contents flex-fill"},this.props.children)}}const oh=e=>`col-${Ee(e)}`;class lh extends ot.Component{render(){const{col:e}=this.props;return ot.createElement("div",{className:oh(e.key)},e.label||N(e.key))}}class ch extends ot.Component{render(){const{item:e,col:t,defaultValue:n,children:a}=this.props;return ot.createElement("div",{className:oh(t.key)},a||e[t.key]||n)}}class ph extends ot.Component{render(){const{item:e,col:t}=this.props;return ot.createElement("div",{className:oh(t.key)},ot.createElement("a",{href:e.href},e[t.key]))}}class dh extends ot.Component{render(){const{item:e,col:t}=this.props,n=e[t.key];if(!n)return ot.createElement("div",{className:oh(t.key)},"-");const a=(Array.isArray(n)?n:n.split(",")).sort();return ot.createElement("div",{className:oh(t.key)},a.map((e=>ot.createElement(ns,{key:e,account:e}))))}}class uh extends ot.Component{cellContent(e){switch(e){case void 0:return ot.createElement(bs,{size:"small"});case null:return ot.createElement("span",null,"?");default:return ot.createElement($g,{container:e})}}render(){const{item:e,col:t}=this.props;return ot.createElement("div",{className:oh(t.key)},this.cellContent(e[t.key]))}}class mh extends ot.Component{render(){const{isActive:e,resultSet:t}=this.props,{type:n,results:a,status:i,error:r}=t,s=n.iconClass,o=a.length,l=o<hd.DEFAULT_PAGE_SIZE?`${o}`:`${o}+`,c=()=>{switch(i){case Gg.SEARCHING:return ot.createElement(bs,{size:"small"});case Gg.ERROR:return ot.createElement(Ps,{value:r&&r.toString()},ot.createElement("i",{className:"fa fa-exclamation-triangle"}));default:return a.length?ot.createElement("div",{className:"badge"},l):ot.createElement("div",{className:"badge faded"},l)}},p=e?"search-group--focus":"search-group--blur";return ot.createElement("div",{className:`flex-container-h baseline search-group ${p}`},ot.createElement("span",{className:`flex-nogrow search-group-icon ${s}`}),ot.createElement("div",{className:"flex-grow search-group-name"},n.displayName),ot.createElement("div",{className:"flex-nogrow"},ot.createElement(c,null)))}}class gh{constructor(){this.fieldsRequired=[],this.TabComponent=mh}search(e,t){const{cloudProvider:n,key:a,...i}=e,r={...i,q:a,cloudProvider:n,type:this.id};return Object.keys(i).length>0&&(r.allowShortQuery="true"),vt(hd.search(r))}}const hh=()=>ot.createElement("div",{className:"flex-grow vertical center middle"},ot.createElement(bs,{size:"large",message:"Fetching search results ..."})),fh=({resultSet:e})=>ot.createElement("div",{className:"flex-grow vertical center middle"},ot.createElement("h3",null,"No ",e.type.displayName," found for the specified search query")),vh=({resultSet:e})=>{const{type:t}=e,{HeaderComponent:n,DataComponent:a}=t;return ot.createElement("div",{className:"search-result-grid flex-fill",style:{height:"initial"}},ot.createElement("div",{className:`table table-search-results table-search-results-${Ee(t.id)}`},ot.createElement(n,{resultSet:e}),ot.createElement(a,{resultSet:e})))},Ah=({resultSet:e})=>ot.createElement("div",{className:"flex-grow vertical center middle"},ot.createElement("h4",{className:"error-message"},"Could not fetch ",e.type.displayName),ot.createElement("div",{className:"error-message"},e&&e.error&&e.error.toString()));class Eh extends ot.Component{render(){const e=this.props.resultSet||{},{status:t,results:n}=e;switch(t){case Gg.INITIAL:case void 0:return null;case Gg.ERROR:return ot.createElement(Ah,{resultSet:e});case Gg.SEARCHING:return ot.createElement(hh,null);case Gg.FINISHED:return n.length?ot.createElement(vh,{resultSet:e}):ot.createElement(fh,{resultSet:e});default:return null}}}var bh=Object.defineProperty,yh=Object.getOwnPropertyDescriptor;let Ch=class extends ot.Component{render(){const{activeSearchResultType:e}=this.props,t=this.props.resultSets.slice().sort(((e,t)=>e.type.order-t.type.order));return ot.createElement("ul",{className:"search-groups nostyle"},t.map((t=>{const{type:n}=t,{TabComponent:a}=n,i=n===e;return ot.createElement(Dn,{key:n.id,to:".",params:{tab:n.id}},ot.createElement("li",null,ot.createElement(a,{resultSet:t,isActive:i})))})))}};Ch=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?yh(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&bh(t,n,r),r})([na],Ch);oi(".table-search-results {\n width: auto;\n overflow-x: auto;\n white-space: nowrap;\n word-break: break-all;\n}\n.table-search-results .table-header {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n font-weight: 600;\n background-color: var(--color-alabaster);\n z-index: 2;\n}\n.table-search-results .table-header .fa {\n padding-left: 2px;\n}\n.table-search-results .table-header .fa.disabled {\n color: var(--color-alto);\n}\n.table-search-results .table-header .table-header {\n background-color: var(--color-alabaster);\n}\n.table-search-results .table-header,\n.table-search-results .table-row {\n display: flex;\n flex: 1 1 auto;\n}\n.table-search-results .table-header > div,\n.table-search-results .table-row > div {\n flex: 1 1 auto;\n padding: 10px;\n display: inline-block;\n width: 150px;\n word-break: break-all;\n white-space: normal;\n border-bottom: 1px solid var(--color-alto);\n}\n.table-search-results .table-row > div {\n background-color: var(--color-alabaster);\n flex: 1 1 auto;\n}\n.table-search-results .table-row:nth-child(even) > div {\n background-color: var(--color-white);\n}\n.table-search-results .table-row:hover > div {\n background-color: var(--color-cirrus);\n}\n.table-search-results .table-row.active > div {\n background-color: var(--color-accent-g2);\n}\n.search-results {\n display: flex;\n margin-top: 10px;\n height: 100%;\n overflow: hidden;\n}\n.search-results .faded {\n opacity: 0.2;\n}\n.search-results .search-groups {\n background-color: var(--color-alabaster);\n cursor: default;\n min-width: 275px;\n width: 275px;\n}\n.search-results .search-groups .search-group {\n cursor: pointer;\n padding: 10px;\n margin-bottom: 1px;\n}\n.search-results .search-groups .search-group .search-group-icon {\n background-color: var(--color-primary);\n border: 2px solid var(--color-white);\n border-radius: 50%;\n color: var(--color-white);\n display: inline-block;\n height: 32px;\n line-height: 29px;\n margin-right: 10px;\n text-align: center;\n width: 32px;\n}\n.search-results .search-groups .search-group .search-group-name {\n color: var(--color-primary);\n font-size: 110%;\n font-weight: 600;\n text-transform: uppercase;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.search-results .search-groups .search-group .badge {\n background-color: var(--color-primary);\n border-radius: 3px;\n}\n.search-results .search-groups .search-group.search-group--focus {\n background-color: var(--color-accent-g2);\n}\n.search-results .search-groups .search-group.search-group--blur {\n background-color: var(--color-alabaster);\n}\n.search-results .search-groups .search-group:hover {\n background-color: var(--color-accent-g2);\n transition: all 0.15s ease-in-out;\n}\n.search-results .search-groups .search-group:hover.faded {\n background-color: var(--color-alabaster);\n}\n.search-results .search-result-grid {\n padding-left: 15px;\n}\n.search-results .search-result-grid .small {\n font-size: 90%;\n}\n.search-results .search-result-grid .table-contents.flex-fill {\n height: inherit;\n}\n");const wh=()=>ot.createElement("div",{className:"flex-grow vertical center middle"},ot.createElement("h3",null,"No results found for the specified search query"));class xh extends ot.Component{constructor(){super(...arguments),this.state={active:null}}componentWillReceiveProps(e){const{resultSets:t,selectedTab:n}=e,a=t.map((e=>e.type)).find((e=>e.id===n));this.setState({active:a})}render(){const{resultSets:e,isSearching:t}=this.props,{active:n}=this.state,a=n&&e.find((e=>e.type===n)),i=e.every((e=>e.status===Gg.FINISHED&&0===e.results.length));return ot.createElement("div",{className:"search-results"},ot.createElement(Ch,{resultSets:e,activeSearchResultType:n}),a&&ot.createElement(Eh,{resultSet:a}),!a&&t&&ot.createElement(hh,null),i&&!n&&ot.createElement(wh,null))}}class kh{constructor(e,t){this.$q=e,this.providerServiceDelegate=t,this.querySubject=new At,this.querySubject.pipe(Dt((e=>{if(!e||""===e.trim()){const e=Og.getAll().map((e=>({type:e,results:[],status:Gg.INITIAL})));return Et(e)}return Yg.search({key:e}).pipe(Gt())}))).subscribe((e=>{this.deferred.resolve(e)}))}query(e){return this.deferred=this.$q.defer(),this.querySubject.next(e),this.deferred.promise}getCategoryConfig(e){return Og.get(e)}formatRouteResult(e,t){return this.formatResult(e,t,!0)}formatResult(e,t,n=!1){const a=Og.get(e);if(!a)return this.$q.when("");let i=a.displayFormatter;if(this.providerServiceDelegate.hasDelegate(t.provider,"search.resultFormatter")){const n=this.providerServiceDelegate.getDelegate(t.provider,"search.resultFormatter");n[e]&&(i=n[e])}return this.$q.when(i(t,n))}}class Bh{constructor(e,t){this.$q=e,this.providerServiceDelegate=t}getSearcher(){return new kh(this.$q,this.providerServiceDelegate)}}Bh.$inject=["$q","providerServiceDelegate"];const Sh="spinnaker.infrastructure.search.service";n(Sh,[hp]).service("infrastructureSearchService",Bh);class Mh extends ot.Component{constructor(){super(...arguments),this.handleClick=()=>{const{filterType:e,onClick:t}=this.props,{name:n,key:a}=e;t([n,a].join("|"))},this.handleKeyUp=e=>{this.props.onKeyUp(e)},this.handleMouseDown=e=>{this.props.onMouseDown(e)}}render(){const{isActive:e}=this.props,t=Cn({filter:!0,"filter--focus":e,"filter--blur":!e}),{key:n,name:a}=this.props.filterType;return ot.createElement("div",{role:"option",className:t,onClick:this.handleClick,onKeyUp:this.handleKeyUp,onMouseDown:this.handleMouseDown},ot.createElement("div",{className:"filter__text"},a),ot.createElement("div",{className:"filter__modifier"},"[",n.toLocaleUpperCase(),":]"))}}Mh.defaultProps={onClick:()=>{},onKeyUp:()=>{},onMouseDown:()=>{}};oi(".filter-list {\n background-color: var(--color-white);\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n cursor: default;\n margin-top: 40px;\n position: absolute;\n white-space: pre;\n width: 200px;\n z-index: 1000;\n}\n.filter-list.filter-list__open {\n display: block;\n}\n.filter-list.filter-list__closed {\n display: none;\n}\n.filter-list .filter-list__header {\n color: var(--color-concrete);\n margin-left: 5px;\n margin-top: 10px;\n margin-left: 10px;\n}\n.filter-list .filter {\n align-items: center;\n cursor: pointer;\n display: flex;\n padding: 5px 5px 5px 10px;\n}\n.filter-list .filter .filter__text {\n font-size: 14px;\n color: var(--color-mineshaft);\n}\n.filter-list .filter .filter__modifier {\n font-size: 14px;\n color: var(--color-concrete);\n margin-left: 5px;\n}\n.filter-list .filter.filter--focus {\n border-color: var(--color-accent-g1);\n background-color: var(--color-accent-g2);\n}\n.filter-list .filter.filter--blur {\n background-color: var(--color-white);\n}\n.filter-list .filter:hover {\n background-color: var(--color-accent-g2);\n border-color: var(--color-accent-g1);\n}\n");class Nh extends ot.Component{constructor(){super(...arguments),this.filters=[],this.refCallback=e=>{this.filters.push(e)},this.handleClick=e=>{const t=this.filters.find((t=>{const{name:n,key:a}=t.props.filterType;return e===[n,a].join("|")}));this.props.filterClicked(t)},this.handleKeyUp=e=>{switch(e.key){case Kg.UP_ARROW:case Kg.DOWN_ARROW:this.props.onKeyUp(e.key)}},this.handleMouseDown=()=>{this.props.onMouseDown()}}generateFilterElement(e){const{name:t,key:n}=e;return ot.createElement(Mh,{key:[t,n].join("|"),ref:this.refCallback,filterType:e,isActive:this.props.activeFilter.key===n,onClick:this.handleClick,onKeyUp:this.handleKeyUp,onMouseDown:this.handleMouseDown})}renderFilterLayout(e){const{header:t,filterTypes:n}=e,a=(n||[]).map((e=>this.generateFilterElement(e)));return ot.createElement("div",{key:[t,n.length].join("|")},ot.createElement("div",{className:"filter-list__header"},t),ot.createElement("div",{role:"listbox"},a))}render(){const{layouts:e,isOpen:t}=this.props,n=Cn({"filter-list":!0,"filter-list__open":t,"filter-list__closed":!t}),a=(e||[]).map((e=>this.renderFilterLayout(e)));return ot.createElement("div",{className:n},a)}}Nh.defaultProps={filterClicked:()=>{},onKeyUp:()=>{},onMouseDown:()=>{}};class Dh{constructor(){this.KEYWORD_FILTER=Object.freeze({key:"key",name:"Keyword"}),this.NAME_FILTER=Object.freeze({key:"name",name:"Name"}),this.registry=new Map,this.register(this.KEYWORD_FILTER),this.register(this.NAME_FILTER)}register(e){this.registry.set(e.key,e)}getFilterType(e){return this.registry.get(e)}getFilterByModifier(e){return[...this.registry.values()].find((t=>e===t.key))}getRegisteredFilterKeys(){return[...this.registry.keys()]}getValues(){const e=Array.from(this.registry.values());return e.sort(((e,t)=>e.name.localeCompare(t.name))),e}}const Ih=new Dh;oi(".search {\n align-items: center;\n display: flex;\n}\n.search .search__icon {\n flex: 1 0 auto;\n}\n.search .search__input {\n display: flex;\n align-items: center;\n width: 100%;\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n color: var(--color-mineshaft);\n background: var(--color-white) none;\n border: 1px solid;\n border-radius: 4px;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.search .search__input .search__input-wrapper {\n align-items: baseline;\n display: flex;\n flex: 1 1;\n width: 100%;\n}\n.search .search__input .search__input-wrapper .search__input-control {\n border: none;\n max-width: 100%;\n outline: 0;\n padding-right: 10px;\n width: 100%;\n}\n.search .search__input .search__input-wrapper .search__input-control::-moz-placeholder {\n color: var(--color-concrete);\n opacity: 1;\n}\n.search .search__input .search__input-wrapper .search__input-control:-ms-input-placeholder {\n color: var(--color-concrete);\n}\n.search .search__input .search__input-wrapper .search__input-control::-webkit-input-placeholder {\n color: var(--color-concrete);\n}\n.search .search__input .search__input-wrapper .fa.fa-times {\n cursor: pointer;\n}\n.search .search__input.search__input--focus {\n border-color: var(--color-accent);\n outline: 0;\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px -2px var(--color-accent);\n}\n.search .search__input.search__input--blur {\n border-color: var(--color-alto);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n");class Fh extends ot.Component{constructor(e){super(e),this.filterTypes=[],this.tagElements=[],this.mouseDownFired=!1,this.handleTagListUpdate=e=>{this.tagElements=e},this.refCallback=e=>{this.inputElement=e},this.handleBlur=()=>{this.mouseDownFired||this.setState({isFocused:!1,isOpen:!1})},this.handleChange=()=>{let e;const t=this.inputElement.value.trim();if(this.hasModifier(t)){const n=this.getModifier(t);e={activeFilter:this.filterTypes.find((e=>e.key===n)),isOpen:!0}}else e={isOpen:!!t};this.setState(e)},this.handleDelete=(e,t)=>{const n=this.state.tags.filter((t=>e!==t));this.setState({isFocused:!0,tags:n}),this.props.onChange(n),t&&this.inputElement.focus()},this.handleFocus=()=>{this.setState({isFocused:!0})},this.handleKeyUpFromInput=e=>{const t=this.tagElements.length;switch(e.key){case Kg.LEFT_ARROW:!this.inputElement.value&&t>=1&&this.tagElements[t-1].focus();break;case Kg.RIGHT_ARROW:this.inputElement.value||0===t||this.tagElements[0].focus();break;case Kg.UP_ARROW:this.navigateUp();break;case Kg.DOWN_ARROW:this.navigateDown();break;case Kg.ENTER:this.handleFilterSelection();break;case Kg.ESCAPE:{const e=this.inputElement.value;this.hasModifier(e)&&!this.getSearchText(e)&&(this.inputElement.value=""),this.setState({activeFilter:Ih.KEYWORD_FILTER,isOpen:!1});break}}},this.handleKeyUpFromTag=()=>{this.inputElement.focus()},this.filterClicked=e=>{this.handleFilterSelection(e.props.filterType),this.mouseDownFired=!1},this.handleKeyUp=e=>{switch(e){case Kg.UP_ARROW:this.navigateUp();break;case Kg.DOWN_ARROW:this.navigateDown()}},this.handleMouseDown=()=>{this.mouseDownFired=!0},this.handleClearClick=()=>{this.setState({isOpen:!1,tags:[]}),this.inputElement.value="",this.inputElement.focus(),this.props.onChange([])};const t=[];t.push({header:"SEARCH",filterTypes:[Ih.KEYWORD_FILTER]}),this.filterTypes=this.reorderFilterTypesForSearch(Ih.getValues()),t.push({header:"FILTER ON",filterTypes:this.filterTypes.filter((e=>e.key!==Ih.KEYWORD_FILTER.key))}),this.keys=new Set(Ih.getValues().map((e=>e.key))),this.state={activeFilter:Ih.KEYWORD_FILTER,isFocused:!0,isOpen:!1,layouts:t,tags:this.buildTagsFromParams(e.params,[])}}componentWillReceiveProps(e){const t=this.buildTagsFromParams(e.params,this.state.tags);this.setState({tags:t})}reorderFilterTypesForSearch(e){const t=new Set([Ih.KEYWORD_FILTER.key,Ih.NAME_FILTER.key]),n=e.filter((e=>!t.has(e.key)));return n.unshift(Ih.NAME_FILTER),n.unshift(Ih.KEYWORD_FILTER),n}buildTagsFromParams(e,t){const n=t.filter((t=>e[t.key])).map((t=>({key:t.key,text:e[t.key]}))),a=Object.keys(e).filter((t=>!!e[t]&&!n.some((e=>e.key===t)))).map((t=>({key:t,text:e[t]})));return n.concat(a)}isLongEnoughIfKeyword(e){return e.key!==Ih.KEYWORD_FILTER.key||e.key===Ih.KEYWORD_FILTER.key&&e.text.length>2}hasModifier(e){const t=e.indexOf(":");return this.keys.has(e.substring(0,t).toLocaleLowerCase())&&t!==e.length}getModifier(e){return e.substring(0,e.indexOf(":")).toLocaleLowerCase()}getSearchText(e){const t=e.trim(),n=t.split(":")[1]||"";return this.hasModifier(t)?n.trim():t}buildTagFromInputString(e=this.state.activeFilter){const t=this.inputElement.value.trim(),n=this.getSearchText(t).trim();if(!t||!n)return null;return{key:this.hasModifier(t)?this.getModifier(t):e.key,text:n}}getActiveFilterIndex(){return this.filterTypes.findIndex((e=>e===this.state.activeFilter))}getActiveFilterText(e){let t;const n=this.inputElement.value.trim();if(this.hasModifier(n)){const a=this.getModifier(n),i=new RegExp(a,"i");t=`${n.replace(i,e.key)}`}else t=`${e.key}:${n}`;return t}navigateUp(){const{filterTypes:e}=this,t=this.getActiveFilterIndex(),n=0===t?e[e.length-1]:e[t-1];this.navigate(n)}navigateDown(){const{filterTypes:e}=this,t=this.getActiveFilterIndex(),n=t===e.length-1?e[0]:e[t+1];this.navigate(n)}navigate(e){const t=this.state.isOpen?e:Ih.KEYWORD_FILTER,n={activeFilter:t};this.inputElement.value=this.getActiveFilterText(t),this.setState({...n,isOpen:!0})}handleFilterSelection(e){const t=this.buildTagFromInputString(e);if(t&&this.isLongEnoughIfKeyword(t)){const e=this.state.tags.filter((e=>e.key!==t.key)).concat(t);this.setState({activeFilter:Ih.KEYWORD_FILTER,isOpen:!1,tags:e}),this.inputElement.value="",this.props.onChange(e)}}render(){const{activeFilter:e,isFocused:t,isOpen:n,layouts:a,tags:i}=this.state,r=Cn({search__input:!0,"search__input--focus":t,"search__input--blur":!t});return ot.createElement("div",{className:"search"},ot.createElement("i",{className:"fa fa-search search__icon"}),ot.createElement("span",{className:"search-label"},"Search"),ot.createElement("div",{className:r},ot.createElement(ah,{tags:i,onBlur:this.handleBlur,onDelete:this.handleDelete,onFocus:this.handleFocus,onKeyUp:this.handleKeyUpFromTag,onUpdate:this.handleTagListUpdate}),ot.createElement("div",{className:"search__input-wrapper"},ot.createElement("input",{type:"text",ref:this.refCallback,autoFocus:!0,className:"search__input-control",placeholder:`projects, applications, clusters, load balancers, server groups, ${Js.get("firewalls")}`,onBlur:this.handleBlur,onChange:this.handleChange,onFocus:this.handleFocus,onKeyUp:this.handleKeyUpFromInput}),ot.createElement("i",{className:"fa fa-times",onClick:this.handleClearClick}),ot.createElement(Nh,{activeFilter:e,isOpen:n,layouts:a,filterClicked:this.filterClicked,onKeyUp:this.handleKeyUp,onMouseDown:this.handleMouseDown}))))}}Og.register(new class extends gh{constructor(){super(...arguments),this.id="securityGroups",this.order=6,this.displayName=Js.get("Firewalls"),this.iconClass="fa fa-exchange-alt",this.cols={NAME:{key:"name"},ACCOUNT:{key:"account"},REGION:{key:"region"}},this.TabComponent=mh,this.HeaderComponent=()=>ot.createElement(ih,null,ot.createElement(lh,{col:this.cols.NAME}),ot.createElement(lh,{col:this.cols.ACCOUNT}),ot.createElement(lh,{col:this.cols.REGION})),this.DataComponent=({resultSet:e})=>{const t=e=>[e.id,e.name,e.account,e.region].join("|"),n=(e,t)=>{const n=e.name.localeCompare(t.name);return 0!==n?n:e.region.localeCompare(t.region)},a=e.results.slice().sort(n);return ot.createElement(sh,null,a.slice().sort(n).map((e=>ot.createElement(rh,{key:t(e)},ot.createElement(ph,{item:e,col:this.cols.NAME}),ot.createElement(dh,{item:e,col:this.cols.ACCOUNT}),ot.createElement(ch,{item:e,col:this.cols.REGION})))))}}displayFormatter(e){return`${e.name} (${e.region})`}});class Th{constructor(e,t){if(this.application=t,this.autoActivate=!1,this.lazy=!1,this.optIn=!1,this.optional=!1,this.primary=!1,this.requireConfiguredApp=!1,this.visible=!0,this.hidden=!1,this.loaded=!1,this.loading=!1,this.disabled=!1,this.loadFailure=!1,this.active=!1,this.debugEnabled=!1,Object.assign(this,e),!e.hasOwnProperty("defaultData"))throw new Error("The defaultData field is required when registering a data source.\n\ndefaultData accepts the initial default value that will be used before data has been fetched.\nFor example, if your data source holds an array of objects, you should set defaultData to an empty array.");this.data=this.data||this.defaultData,this.label=Js.get(e.label||yr(e.key)),!e.activeState&&this.sref&&(this.activeState="**"+this.sref+".**"),e.autoActivate&&(hi.$uiRouter.transitionService.onSuccess({entering:this.activeState},(()=>this.activate())),hi.$uiRouter.transitionService.onSuccess({exiting:this.activeState},(()=>this.deactivate()))),this.destroy$=new At,this.fetchRequest$=new At,this.status$=new Ct({status:"NOT_INITIALIZED",loaded:this.loaded,lastRefresh:0,error:null,data:this.data}),this.data$=new Ct(this.data),this.refresh$=this.data$.pipe(jt(1)),this.refreshFailure$=this.status$.pipe(jt(1),Tt((({status:e})=>"ERROR"===e))),this.throwFailures$=this.refreshFailure$.pipe(St((({error:e})=>{throw e}))),this.nextRefresh$=bt(this.data$.pipe(jt(1)),this.throwFailures$).pipe(Lt(1));const n=this.fetchRequest$.pipe(Pt((()=>this.debug("fetch requested..."))),Dt((()=>vt(this.loader(this.application)).pipe(Rt((e=>this.onLoad(this.application,e))),St((e=>({status:"FETCHED",lastRefresh:Date.now(),data:e}))),Ut((e=>Et({status:"ERROR",lastRefresh:this.lastRefresh,data:this.data,error:e}))),Ot({status:"FETCHING",lastRefresh:this.lastRefresh,data:this.data})))),Ot(this.status$.value),It(this.destroy$)),a=vt(Ze.resolve());n.pipe(Yt(a)).subscribe((([e,t])=>{this.statusUpdated(e),e.loaded=this.loaded,"FETCHED"===e.status&&(this.updateData(e.data),this.afterLoad&&this.afterLoad(this.application),this.addAlerts()),this.status$.next(e)}))}dataUpdated(e){if(this.loaded){this.updateData(void 0!==e?e:this.data);const t={data:this.data,...this.status$.value};this.status$.next(t)}}statusUpdated(e){const{status:t}=e;this.status=e,this.loaded="FETCHED"===t||this.loaded,this.loading="FETCHING"===t,this.loadFailure="ERROR"===t,this.lastRefresh=e.lastRefresh,this.debug(`status: ${e.status}`)}destroy(){this.destroy$.next()}onNextRefresh(e,t,n){const a=this.nextRefresh$.subscribe((e=>t(e)),(e=>n&&n(e)));return e&&e.$on("$destroy",(()=>a.unsubscribe())),()=>a.unsubscribe()}onRefresh(e,t,n){const a=this.refreshFailure$.pipe(Rt((({error:e})=>(n&&n(e),wt())))),i=bt(this.data$.pipe(jt(1)),a).subscribe((e=>t(e)));return e&&e.$on("$destroy",(()=>i.unsubscribe())),()=>i.unsubscribe()}ready(){return this.disabled||this.loaded||this.lazy&&!this.active?Ze.resolve(this.data):Xi(this.nextRefresh$)}activate(){this.active||(this.active=!0,this.loaded||this.refresh())}deactivate(){this.active=!1}updateData(e){this.data=e||this.defaultData,this.data$.next(this.data),this.debug("this.data:",this.data)}refresh(e){if(this.debug(`refresh(${e})`),!this.loader||this.disabled||this.lazy&&!this.active)return this.loaded=!1,this.updateData(this.defaultData),Ze.resolve(this.data);const t=Xi(this.data$.pipe(jt(1),Lt(1)));return this.loading&&!e?Xe.info(`${this.key} still loading, skipping refresh`):this.fetchRequest$.next(),t}addAlerts(){this.alerts=[],Array.isArray(this.data)&&this.data.length&&(this.alerts=this.data.filter((e=>{var t,n,a;return null!=(a=null==(n=null==(t=e.entityTags)?void 0:t.alerts)?void 0:n.length)?a:0})).map((e=>e.entityTags)))}debug(e,t){this.debugEnabled&&console.log(`DEBUG ${this.application.name}.${this.key}: ${e}`,t)}}class Qh{constructor(e,t,n){this.applicationName=e,this.scheduler=t,this.dataSources=[],this.accounts=[],this.clusters=[],this.defaultCredentials={},this.defaultRegions={},this.attributes={},this.notFound=!1,this.hasError=!1,this.isStandalone=!1,this.isManagementPaused=!1,this.activeState=null,this.refreshListeners=[],this.activeDataSource$=new xt(1),this.activeStateChangeStream=new At,this.refreshStream=new At,this.refreshFailureStream=new At,n.forEach((e=>this.addDataSource(e))),this.status$=kt(this.dataSources.map((e=>e.status$))).pipe(St((e=>this.getDerivedApplicationStatus(e))))}get name(){return this.applicationName}getDerivedApplicationStatus(e){const t=e.some((({status:e})=>"ERROR"===e))?"ERROR":void 0,n=e.some((({status:e})=>"FETCHING"===e))?"FETCHING":void 0,a=e.some((({status:e})=>"FETCHED"===e))?"FETCHED":void 0,i=t||n||a||"NOT_INITIALIZED",r=e.every((({status:e})=>["FETCHED","NOT_INITIALIZED"].includes(e))),s=e.reduce(((e,t)=>Math.max(e,t.lastRefresh||0)),0),o=e.every((({loaded:e})=>e));return{status:i,lastRefresh:r?s:this.lastRefresh,loaded:o,data:void 0}}addDataSource(e){const t=new Th(e,this);this.dataSources.push(t),this[e.key]=t}getDataSource(e){return this.dataSources.find((t=>t.key===e))}refresh(e){return this.dataSources.filter((e=>!e.visible)).forEach((t=>t.refresh(e))),this.refreshListeners.forEach((e=>e())),Ze.all(this.dataSources.filter((e=>e.visible)).map((t=>t.refresh(e)))).then((()=>this.applicationLoadSuccess()),(e=>this.applicationLoadError(e)))}ready(){return Ze.all(this.dataSources.filter((e=>void 0!==e.onLoad&&e.visible)).map((e=>e.ready())))}onRefresh(e,t,n){const a=this.refreshStream.subscribe(t);let i=null;n&&(i=this.refreshFailureStream.subscribe(n));const r=()=>{a.unsubscribe(),i&&i.unsubscribe()};return e&&e.$on("$destroy",(()=>r())),r}enableAutoRefresh(){this.dataLoader=this.scheduler.subscribe((()=>this.refresh()))}disableAutoRefresh(){this.dataLoader&&this.dataLoader.unsubscribe(),this.scheduler.unsubscribe()}setActiveState(e=null){this.activeState!==e&&(this.activeState=e,this.activeDataSource$.next(e),this.activeStateChangeStream.next(null))}applicationLoadError(e){Xe.error(e,"Failed to load application, will retry on next scheduler execution."),this.refreshFailureStream.next(e)}applicationLoadSuccess(){this.setApplicationAccounts(),this.setDefaults(),this.lastRefresh=(new Date).getTime(),this.refreshStream.next(null)}setApplicationAccounts(){let e=this.accounts.concat(this.attributes.accounts||[]);this.dataSources.filter((e=>Array.isArray(e.data)&&void 0!==e.credentialsField)).forEach((t=>e=e.concat(t.data.map((e=>e[t.credentialsField]))))),this.accounts=f(e)}extractProviderDefault(e){const t=new Map,n=this.dataSources.filter((t=>void 0!==t[e]&&Array.isArray(t.data)&&void 0!==t.providerField)),a=n.map((e=>e.data.map((t=>t[e.providerField])))).filter((e=>e.length>0));return be(...a).forEach((a=>{const i=n.map((t=>F(t.data.filter((e=>"object"==typeof e&&e[t.providerField]===a)),t[e]))).filter((e=>e.length>0)),r=be(...i);1===r.length&&(t[a]=r[0])})),t}setDefaults(){this.defaultCredentials=this.extractProviderDefault("credentialsField"),this.defaultRegions=this.extractProviderDefault("regionField")}subscribeToRefresh(e){this.refreshListeners.push(e);return()=>{this.refreshListeners.filter((t=>t!==e))}}}const Ph=(e,t)=>new Promise(((n,a)=>{Si(e).post(null==t?void 0:t.body).then((e=>{n({ok:!0,status:200,text:()=>new Promise((t=>{t(JSON.stringify(e))}))})})).catch((e=>a(e)))})),Rh=()=>{const e=new ga({cache:new ha}),t=new fa({uri:"/managed/graphql",fetch:Ph});e.setLink(t);return{client:e,onRefresh:()=>e.reFetchObservableQueries()}};var Uh=Object.defineProperty,zh=Object.getOwnPropertyDescriptor;let Gh=class extends ot.Component{render(){return ot.createElement(Sn,{className:"app-fresh-icon horizontal middle",name:"appSynced"})}};Gh=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?zh(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&Uh(t,n,r),r})([ys("applicationIcon")],Gh);const jh=({appName:e,lastRefresh:t,refresh:n,refreshing:a})=>{const i=eo.createScheduler(2e3),[r,s]=ot.useState(sr(t)),[o,l]=ot.useState(!1);ot.useEffect((()=>(i.subscribe((()=>{s(sr(t))})),()=>i.unsubscribe())),[t]);const c=(new Date).getTime()-t>12e4,p=ot.createElement("span",null,ot.createElement("p",null,ot.createElement("strong",null,e)),ot.createElement("p",null,"app data is "+(a?"refreshing":"up to date (click to refresh)")),ot.createElement("p",null,"Last refresh: ",rr(t)," ",ot.createElement("br",null)," ",r),ot.createElement("p",null,"Note: Due to caching, data may be delayed up to 2 minutes")),d=o||a;return ot.createElement(Ps,{template:p,placement:at.innerWidth<1100?"bottom":"right"},ot.createElement("div",{className:"application-header-icon"+(d?" header-icon-pulsing":""),onClick:()=>{l(!0),setTimeout((()=>{l(!1)}),3e3),n()}},!c&&!d&&ot.createElement(Gh,null),(c||d)&&ot.createElement(Sn,{className:"app-fresh-icon horizontal middle",name:"appUnsynced"})))},Lh=({app:e})=>{const[t,n]=ot.useState(!1),[a,i]=ot.useState(0);Xo(e.status$,(e=>{"FETCHING"===e.status?n(!0):"FETCHED"===e.status?(n(!1),i(e.lastRefresh)):n(!1)}));return ot.createElement(jh,{appName:e.name,lastRefresh:a,refreshing:t,refresh:()=>{e.refresh(!0)}})};class Oh{constructor(){this.queue=[]}setRegistries(e){this.overrideRegistry=e,this.flush()}register(e,t,n){this.queue.push((()=>{n?Ni.overrideValue(n,t,e):this.overrideRegistry.overrideComponent(t,e)})),this.flush()}flush(){if(this.overrideRegistry&&Ni)for(;this.queue.length;)this.queue.splice(0,1)[0]()}}const Yh=new Oh;function $h(e,t){return function(n){Yh.register(n,e,t)}}const Hh=(e,t,n)=>{Yh.register(e,t,n)};class Vh{constructor(){this.templateOverrides=new Map,this.componentOverrides=new Map,this.controllerOverrides=new Map}overrideTemplate(e,t){this.templateOverrides.set(e,t)}overrideComponent(e,t){this.componentOverrides.set(e,t)}overrideController(e,t){this.controllerOverrides.set(e,t)}getTemplate(e,t){return this.templateOverrides.get(e)||t}getComponent(e){return this.componentOverrides.get(e)}getController(e,t=e){return this.controllerOverrides.get(e)||t}}const Jh="spinnaker.core.override.registry";n(Jh,[]).service("overrideRegistry",Vh).run(["overrideRegistry",e=>{Yh.setRegistries(e)}]);var Wh=Object.defineProperty,Kh=Object.getOwnPropertyDescriptor;let qh=class extends ot.Component{render(){return null}};qh=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Kh(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&Wh(t,n,r),r})([ys("core.nav.bottom")],qh);class Xh extends ot.Component{render(){const e=this.props.tag.entityRef;return e.account||e.region?ot.createElement("div",{className:"entityname"},ot.createElement("span",{className:"entityref"},ot.createElement("strong",null,e.entityId)),ot.createElement("span",{className:"account-region"}," ( ",e.account&&ot.createElement(ns,{account:e.account})," ",ot.createElement("span",null,e.region)," ) ")):null}}class Zh extends ot.Component{constructor(e){super(e),this.state={collapsed:!0,alertsByMessage:this.getAlertsByMessage(e.notifications)}}componentWillReceiveProps(e){this.setState({alertsByMessage:this.getAlertsByMessage(e.notifications)})}getAlertsByMessage(e){const t=ie(e,"entityTag.value.message");return Object.keys(t).map((e=>({message:e,tagline:t[e][0].entityTag.value.tagline,title:t[e][0].entityTag.value.title,notifications:t[e]})))}render(){return ot.createElement("div",{className:"notification-list"},this.state.alertsByMessage.map((e=>ot.createElement(_h,{key:e.message,alertsForMessage:e}))))}}Zh.defaultProps={notifications:[]};class _h extends ot.Component{constructor(){super(...arguments),this.state={collapsed:!0},this.toggleCollapsed=()=>{this.setState({collapsed:!this.state.collapsed})},this.renderServerGroupName=e=>{const{entityTags:t}=e,{entityRef:{region:n,entityId:a}}=t,i=`${n}+${a}`;return ot.createElement(Xh,{key:i,tag:t})}}renderServerGroupNames(e){return 1===e.length?this.renderServerGroupName(e[0]):ot.createElement("div",null,ot.createElement("a",{className:"clickable",onClick:this.toggleCollapsed},ot.createElement("strong",null,ot.createElement("span",null," ",this.state.collapsed?"Show":"Hide"," ",e.length," entities"))),ot.createElement("div",{className:"server-group-list"},!this.state.collapsed&&e.map(this.renderServerGroupName)))}render(){const{alertsForMessage:{notifications:e,title:t,message:n,tagline:a}}=this.props;return ot.createElement("div",{className:"notification-message"},t&&ot.createElement("div",{className:"notification-title"},ot.createElement(Sr,{message:t})),this.renderServerGroupNames(e),ot.createElement(Sr,{message:n}),ot.createElement(Sr,{className:"small",message:a}))}}class ef extends ot.Component{constructor(){super(...arguments),this.selectCategory=()=>{this.props.onCategorySelected(this.props.category)}}render(){const{category:e,notifications:t}=this.props,n=`clickable list-group-item flex-container-h baseline alerts-severity-${e.severity} `+(this.props.isSelected?"selected ":" ");return ot.createElement("li",{className:n,onClick:this.selectCategory,key:e.id},ot.createElement("i",{className:`notification-category-icon fa ${e.icon}`}),ot.createElement("span",{className:"notification-category-label flex-grow"},e.label),ot.createElement("span",{className:"badge"},t.length))}}class tf extends ot.Component{render(){const{notifications:e,onEditTag:t,onDeleteTag:n}=this.props;return ot.createElement("div",{className:"notification-list"},e.map(((e,a)=>{const{entityTag:{lastModified:i,value:{title:r,message:s,tagline:o}}}=e;return ot.createElement("div",{className:"notification-message",key:a},r&&ot.createElement("div",{className:"notification-title"},ot.createElement(Sr,{message:r})),ot.createElement(Sr,{message:s}),ot.createElement("div",{className:"notification-tagline flex-container-h baseline"},ot.createElement(Sr,{className:"small",message:o}),ot.createElement("div",{className:"small flex-grow",title:rr(i)},sr(i)),ot.createElement(nf,{notification:e,onEditTag:t,onDeleteTag:n})))})))}}class nf extends ot.Component{constructor(){super(...arguments),this.editTag=()=>{this.props.onEditTag(this.props.notification)},this.deleteTag=()=>{this.props.onDeleteTag(this.props.notification)}}render(){return ot.createElement("div",{className:"flex-nogrow actions actions-popover",style:{position:"relative"}},ot.createElement("a",{onClick:this.editTag},ot.createElement("span",{className:"glyphicon glyphicon-cog clickable"})),ot.createElement("a",{onClick:this.deleteTag},ot.createElement("span",{className:"glyphicon glyphicon-trash clickable"})))}}const af=ye([{id:"urgentissues",label:"Urgent Issues",icon:"fa-exclamation",severity:2},{id:"deprecation",label:"Deprecations",icon:"fa-wrench",severity:1},{id:"default",label:"Uncategorized",icon:"fa-exclamation-circle",severity:0}],"id");class rf{static defineCategory(e,t=e,n=0,a="fa-exclamation-circle"){return af[e]={id:e,label:t,severity:n,icon:a}}static getCategory(e){return e?af[e="blacklist"===e?"urgentissues":e]||rf.defineCategory(e):af.default}}class sf extends ot.Component{constructor(e){super(e),this.handleCategorySelected=e=>{this.setState({selectedCategory:e})};const t=this.categorizeNotifications(e.notifications);this.state={categorizedAlerts:t,selectedCategory:t[0].category}}componentWillReceiveProps(e){const t=this.categorizeNotifications(e.notifications);this.setState({categorizedAlerts:t})}categorizeNotifications(e){const t=e=>rf.getCategory(e.entityTag.category).id;return f(e.map(t)).map((n=>({category:rf.getCategory(n),notifications:e.filter((e=>t(e)===n))}))).sort(((e,t)=>t.category.severity-e.category.severity))}render(){const{categorizedAlerts:e,selectedCategory:t}=this.state,{onEditTag:n,onDeleteTag:a}=this.props;if(!e||!t)return null;const i=e.find((e=>e.category===t)).notifications;return ot.createElement("div",{className:"flex-container-h"},ot.createElement("ul",{className:"list-group notification-categories"},e.map((({category:e,notifications:n})=>ot.createElement(ef,{isSelected:e===t,key:e.id,category:e,notifications:n,onCategorySelected:this.handleCategorySelected})))),this.props.grouped?ot.createElement(Zh,{notifications:i}):ot.createElement(tf,{notifications:i,onEditTag:n,onDeleteTag:a}))}}class of{static upsertEntityTag(e,t,n,a){return tp.executeTask({application:e,description:`${a?"Create":"Update"} entity tag on ${n.entityId}`,job:[{type:"upsertEntityTags",application:e.name,entityId:n.entityId,entityRef:n,tags:[t],isPartial:!0}]})}static deleteEntityTag(e,t,n,a){return tp.executeTask({application:e,description:`Delete entity tag on ${t.name}`,job:[{type:"deleteEntityTags",application:e.name,id:n.id,tags:[a]}]})}}oi(".entity-tag-editor-modal .preview {\n background-color: var(--color-accent-g2);\n}\n.entity-tag-editor-modal .preview .marked,\n.entity-tag-editor-modal .preview [marked] {\n padding-top: 5px;\n}\n.entity-tag-editor-modal label .marked p,\n.entity-tag-editor-modal label [marked] p {\n margin-bottom: 0;\n}\n");const lf=class extends ot.Component{constructor(e){super(e),this.close=e=>{this.props.dismissModal.apply(null,e)},this.upsertTag=e=>{const{application:t,isNew:n,tag:a,onUpdate:i}=this.props,r=e.ownerOption?e.ownerOption.owner:this.props.owner,s=e.ownerOption?e.ownerOption.type:this.props.entityType,o=this.props.entityRef||class{static buildServerGroupRef(e){return{cloudProvider:e.cloudProvider,entityType:"servergroup",entityId:e.name,account:e.account,region:e.region}}static buildServerGroupManagerRef(e){return{cloudProvider:e.cloudProvider,entityType:"servergroupmanager",entityId:e.name,account:e.account,region:e.region}}static buildLoadBalancerRef(e){return{cloudProvider:e.cloudProvider,entityType:"loadbalancer",entityId:e.name,account:e.account,region:e.region}}static buildApplicationRef(e){return{cloudProvider:"*",entityType:"application",entityId:e.name}}static buildRegionalClusterRef(e){return{cloudProvider:e.cloudProvider,entityType:"cluster",entityId:e.name,account:e.account,region:e.region}}static buildSecurityGroupRef(e){return{cloudProvider:e.cloudProvider,entityType:"securitygroup",entityId:e.name,account:e.accountName,region:e.region,vpcId:e.vpcId}}static getBuilder(e){switch(e){case"application":return this.buildApplicationRef;case"serverGroup":return this.buildServerGroupRef;case"serverGroupManager":return this.buildServerGroupManagerRef;case"loadBalancer":return this.buildLoadBalancerRef;case"cluster":return this.buildRegionalClusterRef;case"securityGroup":return this.buildSecurityGroupRef;default:return null}}}.getBuilder(s)(r);o.application||(o.application=t.name),a.value.message=e.message;const l=qc.modalInstanceEmulation((e=>this.props.closeModal(e)),(e=>this.props.dismissModal(e))),c=new qc({application:t,modalInstance:l,title:`${n?"Create":"Update"} ${this.props.tag.value.type} for ${o.entityId}`,onTaskComplete:()=>t.entityTags.refresh().then((()=>i()))});c.submit((()=>{const e=of.upsertEntityTag(t,a,o,n),i=()=>this.setState({isSubmitting:!1});return e.then(i,i),e})),this.setState({taskMonitor:c,isSubmitting:!0})};const{tag:t}=this.props,n=this.props.ownerOptions||[],a=n.find((e=>e.isDefault))||n[0];t.name=t.name||`spinnaker_ui_${t.value.type}:${pr.generateUuid()}`,this.state={taskMonitor:null,initialValues:{message:t.value&&t.value.message||"",ownerOption:a},isSubmitting:!1}}static show(e){return si.show(lf,e)}render(){const{isNew:e,tag:t,ownerOptions:n}=this.props,{initialValues:a,isSubmitting:i}=this.state,r=n||[],s=`${e?" Create":" Update"} ${t.value.type}`;return ot.createElement("div",null,ot.createElement(jc,{monitor:this.state.taskMonitor}),ot.createElement(Gs,{initialValues:a,onSubmit:this.upsertTag,render:({isValid:n,values:a,setFieldValue:o})=>ot.createElement(Vn,{className:"form-horizontal"},ot.createElement(Nc,{dismiss:this.close}),ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,e?"Create":"Update"," ",t.value.type)),ot.createElement(qt.Body,{className:"entity-tag-editor-modal"},ot.createElement("div",{className:""},ot.createElement(kl,{label:"Message",name:"message",required:!0,input:e=>ot.createElement(Po,{...e,rows:5,required:!0})}),ot.createElement("div",{className:"small text-right"},"Markdown is okay ",ot.createElement(_s,{id:"markdown.examples"})),a.message&&ot.createElement("div",{className:"form-group preview"},ot.createElement("div",{className:"col-md-3 sm-label-right"},ot.createElement("strong",null,"Preview")),ot.createElement("div",{className:"col-md-9"},ot.createElement(Sr,{message:a.message})))),!!r.length&&ot.createElement(Dl,{name:"ownerOption",label:"Applies To",required:!0,value:a.ownerOption.label,onChange:e=>{const t=r.find((t=>t.label===e.target.value));o("ownerOption",t)},input:e=>ot.createElement(To,{...e,stringOptions:r.map((e=>e.label))})})),ot.createElement(qt.Footer,null,ot.createElement("button",{className:"btn btn-default",disabled:i,onClick:this.close,type:"button"},"Cancel"),ot.createElement(Dc,{isDisabled:!n||i,submitting:i,isFormSubmit:!0,label:s})))}))}};let cf=lf;cf.defaultProps={onUpdate:qi,ownerOptions:[]};oi(".notices-severity-0,\n.notices-severity-1,\n.notices-severity-2 {\n --color-notice: var(--color-accent);\n --color-notice-light: var(--color-accent-g2);\n}\n.alerts-severity-0 {\n --color-notice: var(--color-warning);\n --color-notice-light: var(--color-warning-light);\n}\n.alerts-severity-1 {\n --color-notice: var(--color-alert);\n --color-notice-light: var(--color-alert-light);\n}\n.alerts-severity-2 {\n --color-notice: var(--color-danger);\n --color-notice-light: var(--color-danger-light);\n}\n.notification.fa,\n.notifications-popover.fa {\n color: var(--color-notice);\n}\n.notification .popover-title,\n.notifications-popover .popover-title,\n.notification.inverse .notification.fa,\n.notifications-popover.inverse .notification.fa {\n background-color: var(--color-notice);\n color: var(--color-white);\n}\n.notification.bottom > div.arrow:after,\n.notifications-popover.bottom > div.arrow:after {\n border-bottom-color: var(--color-notice);\n}\n.notifications-popover .notification-categories li {\n color: var(--color-notice);\n}\n.notifications-popover .notification-categories li .notification-category-label {\n color: var(--color-black);\n}\n.notifications-popover .notification-categories li .badge {\n background-color: var(--color-notice);\n}\n.notifications-popover .notification-categories li.selected {\n background-color: var(--color-notice-light);\n}\n.notifications-popover .notification-categories li:hover {\n background-color: var(--color-notice-light);\n}\n.alert-severity-2 .notification-category-label {\n color: var(--color-danger);\n}\n.notification-category-icon {\n flex: 0 0 1em;\n text-align: center;\n}\n.entity-notifications {\n display: flex;\n}\n.entity-notifications .tag-marker {\n display: inline-block;\n margin-left: 5px;\n font-size: 15px;\n}\n.entity-notifications .tag-marker.inverse .fa {\n border-radius: 3px;\n padding: 2px;\n font-size: 90%;\n}\n.ephemeral.fa,\n.ephemeral-popover.fa {\n color: var(--color-mineshaft);\n}\n.ephemeral .popover-title,\n.ephemeral-popover .popover-title {\n background-color: var(--color-mineshaft);\n color: var(--color-white);\n}\n");oi("@-webkit-keyframes animate-glow {\n 0% {\n opacity: 0.9;\n }\n 50% {\n opacity: 0.4;\n }\n 100% {\n opacity: 0.9;\n }\n}\n@-webkit-keyframes pulse {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.25;\n }\n 100% {\n opacity: 1;\n }\n}\n@keyframes pulse {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.25;\n }\n 100% {\n opacity: 1;\n }\n}\n@-webkit-keyframes spin {\n from {\n -webkit-transform: rotate(0deg);\n }\n to {\n -webkit-transform: rotate(360deg);\n }\n}\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n/* Common mixins extracted from Bootstrap */\n@-webkit-keyframes fadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n@keyframes fadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n@-webkit-keyframes slideDown {\n 0% {\n height: 0;\n opacity: 0;\n }\n 100% {\n height: 100%;\n opacity: 1;\n }\n}\n@keyframes slideDown {\n 0% {\n height: 0;\n opacity: 0;\n }\n 100% {\n height: 100%;\n opacity: 1;\n }\n}\n.popover.notifications-popover {\n padding: 0;\n min-width: 200px;\n max-width: 500px;\n text-align: left;\n}\n.popover.notifications-popover .popover-title {\n padding: 0.6em 0.8em;\n margin: 0;\n border-bottom: none;\n}\n.popover.notifications-popover .list-group-item {\n padding: 0.333em 1em;\n border-radius: 0;\n background-color: var(--color-alabaster);\n border-left: none;\n border-right: none;\n}\n.popover.notifications-popover .notification-categories {\n margin: 0;\n background-color: var(--color-alabaster);\n border-right: 1px solid var(--color-alto);\n}\n.popover.notifications-popover .notification-categories .notification-category-label {\n padding: 0 1em;\n}\n.popover.notifications-popover .notification-categories .badge {\n border-radius: 3px;\n padding: 3px 6px;\n}\n.popover.notifications-popover .notification-list {\n flex: 1 1 auto;\n overflow-y: auto;\n max-height: 15em;\n padding: 1em;\n}\n.popover.notifications-popover .server-group-list {\n margin: 0.75em 0;\n}\n.popover.notifications-popover .entityname {\n display: flex;\n flex-flow: row wrap;\n justify-content: space-between;\n}\n.popover.notifications-popover .entityname .account-region {\n flex: 1 1 auto;\n text-align: end;\n}\n.popover.notifications-popover .entityname span {\n white-space: nowrap;\n}\n.popover.notifications-popover .notification-message {\n min-width: 150px;\n}\n.popover.notifications-popover .notification-message .notification-title {\n font-weight: bold;\n margin-bottom: 0.25em;\n}\n.popover.notifications-popover .notification-message:not(:first-child) {\n padding-top: 10px;\n margin-top: 5px;\n border-top: 1px solid var(--color-alto);\n}\n.popover.notifications-popover .notification-message .notification-tagline > *:not(:first-child) {\n margin-left: 0.5em;\n}\n");const pf={alerts:{title:"Alerts",icon:"fa-exclamation-triangle"},notices:{title:"Notices",icon:"fa-flag"}};class df extends ot.Component{constructor(e){super(e),this.fireGAEvent=()=>{const e=this.props.gaLabelFn(this.props);Ui.log({action:"SPAN",category:"Alerts hovered",data:{label:e}})},this.PopoverContent=({hidePopover:e})=>{const{type:t,categorized:n,grouped:a}=this.props,{notifications:i}=this.state;return ot.createElement(uf,{type:t,categorized:n,grouped:a,notifications:i,hidePopover:e,handleEditNotification:t=>{e(),this.handleEditNotification(t)},handleDeleteNotification:t=>{e(),this.handleDeleteNotification(t)}})},this.state=this.getState(e)}getState(e){const{tags:t,type:n}=e,a=t.filter((e=>!!e)).reduce(((e,t)=>e.concat(t[n].map((e=>({entityTags:t,entityTag:e}))))),[]),i=a.length,r=f(a.map((e=>e.entityTag.category))).map((e=>rf.getCategory(e))).reduce(((e,t)=>Math.max(e,t.severity)),0);return{notifications:a,count:i,severity:r}}componentWillReceiveProps(e){this.setState(this.getState(e))}handleEditNotification(e){const{entity:t,application:n,onUpdate:a}=this.props,{entityTags:i,entityTag:r}=e,s=W(r,"name","namespace","category");s.value={...r.value};const o={tag:s,isNew:!1,owner:t,entityType:i.entityRef.entityType,application:n,onUpdate:a,ownerOptions:null,entityRef:i.entityRef};cf.show(o)}handleDeleteNotification(e){const{application:t,entity:n,onUpdate:a}=this.props,{entityTags:i,entityTag:r}=e,s=r.value.type,o={application:t,title:`Deleting ${s} on ${n.name}`,onTaskComplete:()=>t.entityTags.refresh().then((()=>a()))};lp.confirm({header:`Really delete ${s}?`,buttonText:`Delete ${s}`,account:n.account,taskMonitorConfig:o,submitMethod:()=>of.deleteEntityTag(t,n,i,r.name)})}render(){const{type:e,className:t,placement:n,hOffsetPercent:a}=this.props,{count:i,severity:r}=this.state,{title:s,icon:o}=pf[e];if(i<1)return null;const l=`${e}-severity-${Math.min(Math.max(r,0),2)}`;return ot.createElement("span",{className:`tag-marker small ${t||""}`,onMouseEnter:this.fireGAEvent},ot.createElement(qs,{delayShow:100,placement:n,hOffsetPercent:a,Component:this.PopoverContent,title:s,className:`no-padding notifications-popover ${l}`},ot.createElement("i",{className:`notification fa ${o} ${l}`})))}}df.defaultProps={tags:[],categorized:!0,className:"",entity:null,grouped:!1,onUpdate:qi,placement:"bottom",type:"alerts"};const uf=e=>{const{type:t,grouped:n,categorized:a,notifications:i,handleEditNotification:r,handleDeleteNotification:s}=e,{title:o}=pf[t];return a?ot.createElement(sf,{notifications:i,onEditTag:r,onDeleteTag:s,grouped:n,title:o}):n?ot.createElement(Zh,{notifications:i}):ot.createElement(tf,{notifications:i,onEditTag:r,onDeleteTag:s})};class mf extends ot.Component{constructor(){super(...arguments),this.getDataSourceAnalyticsLabel=()=>{const{tabName:e,application:t,tags:n}=this.props,a=n.map((e=>e.alerts.map((e=>e.name)).join(",")));return[e,t.name,a].join(":")}}render(){const{application:e,tags:t}=this.props;return ot.createElement(df,{tags:t,application:e,type:"alerts",gaLabelFn:this.getDataSourceAnalyticsLabel,grouped:!0,categorized:!0,placement:"right"})}}n("spinnaker.core.entityTag.alerts.datasourcenotifications",[]).component("dataSourceNotifications",yn(jl(mf,"dataSourceNotifications"),["tags","application","tabName"]));const gf=ba({key:"verticalNavExpanded",default:!Ms.isSet("verticalNav")||Ms.isExpanded("verticalNav"),effects:[({setSelf:e,trigger:t})=>("get"===t&&e(!Ms.isSet("verticalNav")||Ms.isExpanded("verticalNav")),Ms.onChange("verticalNav",(t=>{e(t)})),()=>{Ms.onChange("verticalNav",null)})]}),hf=({app:e,dataSource:t,isActive:n})=>{const a=ya(gf),{alerts:i,badge:r,iconName:s,key:o,label:l}=t,{data:c}=_o(e.getDataSource(r||o)),p=r?c.length:0;_o(t);const d=i||[],u=p?"badge-running-count":"badge-none";return ot.createElement(ot.Fragment,null,ot.createElement("span",{className:u},p>0?p:""),ot.createElement("span",{className:"nav-row-item"},s&&(a?ot.createElement(Bn,{className:"nav-icon",name:s||"config",size:"medium",color:n?"primary":"accent"}):ot.createElement(Ps,{value:t.label,placement:"right"},ot.createElement("div",null,ot.createElement(Bn,{className:"nav-icon",name:s,size:"medium",color:n?"primary":"accent"}))))),ot.createElement("span",{className:"nav-row-item nav-name"}," "+t.label),ot.createElement(mf,{tags:d,application:e,tabName:l}))},ff=({app:e,dataSource:t})=>{const n=In(t.sref),a=Fn(t.activeState);return ot.createElement("a",{...n,className:"nav-category flex-container-h middle sp-padding-s-yaxis"+(a?" active":"")},ot.createElement(hf,{app:e,dataSource:t,isActive:a}))},vf=({app:e,dataSources:t})=>ot.createElement("div",{className:"nav-section sp-padding-s-yaxis text-semibold"},t.map((t=>ot.createElement(ff,{key:t.label,dataSource:t,app:e}))));class Af{constructor(){this.categories=[],this.orderOverrides=new Map}register(e){this.categories.push(e)}get(e){return p(this.categories.find((t=>t.key===e)))}has(e){return this.categories.some((t=>t.key===e))}getAll(){return this.categories.slice().sort(((e,t)=>this.getOrder(e)-this.getOrder(t)))}overrideCategoryOrder(e,t){this.orderOverrides.set(e,t)}getHighestOrder(){return Math.max(...this.categories.map((e=>e.order)).concat(Array.from(this.orderOverrides.values())))}getOrder(e){const{key:t,order:n}=e;return this.orderOverrides.has(t)?this.orderOverrides.get(t):n}}const Ef=new Af;class bf{static listServices(){return vt(Si("/pagerDuty/services").get())}static listOnCalls(){return vt(Si("/pagerDuty/oncalls").get())}}class yf{static pageApplicationOwnerModal(e){vi.modalService.open({templateUrl:"core/src/pagerDuty/pageApplicationOwner.html",controller:"PageModalCtrl as ctrl",resolve:{application:()=>e}}).result.catch((()=>{}))}static sendPage(e,t,n,a,i){const r={type:"pageApplicationOwner",message:n,details:i};e&&e.length>0&&(r.applications=e.map((e=>e.name))),t&&t.length>0&&(r.keys=t);const s={application:a,job:[r],description:"Send Page"};return tp.executeTask(s)}static pageApplicationOwner(e,t,n){return this.sendPage([e],void 0,t,e,{details:n})}}window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/pagerDuty/pageApplicationOwner.html",'<div modal-page>\n <task-monitor monitor="ctrl.taskMonitor"></task-monitor>\n <modal-close dismiss="$dismiss()"></modal-close>\n <div class="modal-header">\n <h4 class="modal-title">Page {{ctrl.application.name}} Owner</h4>\n </div>\n\n <form role="form" class="container-fluid" novalidate name="pageApplicationOwnerForm">\n <div class="modal-body">\n <div class="row" style="margin-top: 10px; margin-bottom: 10px">\n <div class="col-md-3 sm-label-right">Reason</div>\n <div class="col-md-7">\n <textarea\n class="form-control required"\n ng-model="ctrl.reason"\n rows="3"\n placeholder="Brief description of incident, severity and expected action."\n ></textarea>\n </div>\n </div>\n </div>\n\n <div class="modal-footer">\n <a href class="btn btn-default" ng-click="$dismiss()">Cancel</a>\n <button type="submit" class="btn btn-primary" ng-click="ctrl.submit()" ng-disabled="!ctrl.reason">\n Page Now\n </button>\n </div>\n </form>\n</div>\n')}]);class Cf{constructor(){this.servicesLoaded=!1}setCurrentService(){this.servicesLoaded=!1,bf.listServices().subscribe((e=>{this.currentService=e.find((e=>e.integration_key===this.apiKey)),this.servicesLoaded=!0}))}$onInit(){this.setCurrentService()}$onChanges(){this.setCurrentService()}}const wf={bindings:{apiKey:"<"},controller:Cf,template:'\n <span>\n <span ng-if="!$ctrl.servicesLoaded">\n <i class="fa fa-asterisk fa-spin fa-fw"></i> Loading...\n </span>\n <span ng-if="$ctrl.servicesLoaded && $ctrl.currentService">\n {{ $ctrl.currentService.name }} ({{ $ctrl.currentService.integration_key }})\n </span>\n <span ng-if="$ctrl.servicesLoaded && !$ctrl.currentService">\n Unable to locate PagerDuty key ({{ $ctrl.apiKey }})\n </span>\n </span>\n '},xf="spinnaker.core.pagerDuty.pagerDutyTag.component";n(xf,[]).component("pagerDutyTag",wf);class kf{constructor(){this.helpContents='<p>Make sure your service exists in Pager Duty and includes the "Generic API"\n integration.</p>\n <h5><b>Setting up a new integration</b></h5>\n <ol>\n <li>Find your service in Pager Duty</li>\n <li>Click "New Integration"</li>\n <li>Select "Use our API directly"</li>\n <li>Make sure to select "Events API v1" (Spinnaker is not compatible with v2)</li>\n </ol>\n <p><b>Note:</b> it can take up to five minutes for the service to appear in Spinnaker</p>',this.required=di.pagerDuty&&di.pagerDuty.required||!1,this.label="PagerDuty"+(this.required?" *":"")}$onInit(){this.scheduler=eo.createScheduler(1e4),this.scheduler.subscribe((()=>this.loadPagerDutyServices())),this.loadPagerDutyServices()}$onDestroy(){this.scheduler.unsubscribe()}loadPagerDutyServices(){bf.listServices().subscribe((e=>{this.pagerDutyServices=e.filter((e=>e.integration_key)),this.servicesLoaded=!0}))}}const Bf={bindings:{component:"="},controller:kf,template:'\n <div class="form-group row">\n <div class="col-sm-3 sm-label-right">{{$ctrl.label}} <help-field content="{{$ctrl.helpContents}}"></help-field></div>\n <div class="col-sm-9">\n <ui-select ng-if="$ctrl.servicesLoaded" ng-model="$ctrl.component.pdApiKey" class="form-control input-sm" ng-required="$ctrl.required">\n <ui-select-match placeholder="Select a PagerDuty Service">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="pagerDuty.integration_key as pagerDuty in $ctrl.pagerDutyServices | filter: $select.search">\n {{pagerDuty.name}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n'},Sf="spinnaker.core.pagerDuty.pagerDutySelectField.component";n(Sf,[]).component("pagerDutySelectField",Bf);oi(".vertical-navigation {\n background-color: var(--color-accent-g2);\n box-shadow: 2px 0 3px 1px var(--color-alto);\n min-width: 226px;\n max-width: 300px;\n display: grid;\n height: 100%;\n grid-template-columns: 1fr;\n grid-template-rows: auto 1fr auto;\n grid-template-areas: 'nav-header' 'nav-content' 'nav-bottom';\n}\n@media (max-width: 1640px) {\n .vertical-navigation {\n max-width: 226px;\n }\n}\n.vertical-navigation .nav-header {\n grid-area: nav-header;\n color: var(--color-primary);\n margin-bottom: unset;\n}\n.vertical-navigation .nav-header .application-header-icon {\n display: flex;\n justify-content: center;\n border-radius: 50%;\n background-color: var(--color-primary);\n color: var(--color-white);\n text-align: center;\n width: 36px;\n height: 36px;\n font-size: 15px;\n cursor: pointer;\n}\n.vertical-navigation .nav-header .app-fresh-icon {\n width: 20px;\n}\n.vertical-navigation .nav-header .header-icon-pulsing {\n -webkit-animation: pulse 4s steps(48) infinite;\n animation: pulse 4s steps(48) infinite;\n}\n.vertical-navigation .nav-header .application-name {\n word-break: break-word;\n}\n.vertical-navigation .nav-content {\n grid-area: nav-content;\n overflow: auto;\n}\n.vertical-navigation .nav-content .nav-section {\n font-size: 16px;\n text-transform: uppercase;\n}\n.vertical-navigation .nav-content .nav-section .nav-category {\n color: var(--color-accent);\n padding-left: 12px;\n align-items: center;\n}\n.vertical-navigation .nav-content .nav-section .nav-category .badge-running-count {\n min-width: 16px;\n height: 16px;\n margin-right: -12px;\n margin-top: 18px;\n border-radius: 3px;\n color: var(--color-white);\n background-color: var(--color-primary);\n line-height: 16px;\n text-align: center;\n font-size: 12px;\n z-index: 100;\n}\n.vertical-navigation .nav-content .nav-section .nav-category .badge-none {\n min-width: 16px;\n margin-right: -12px;\n margin-top: 18px;\n}\n.vertical-navigation .nav-content .nav-section .nav-category .nav-row-item {\n min-width: 16px;\n margin-right: 8px;\n line-height: 10px;\n padding: 0;\n font-size: 16px;\n}\n.vertical-navigation .nav-content .nav-section .nav-category .nav-row-item .bs-tooltip-right {\n display: none;\n}\n.vertical-navigation .nav-content .nav-section a {\n text-decoration: none;\n}\n.vertical-navigation .nav-content .nav-section .active.nav-category {\n background: #bbdee8;\n color: var(--color-primary);\n}\n.vertical-navigation .nav-content .nav-section .active.nav-category .nav-icon {\n color: var(--color-primary);\n}\n.vertical-navigation .nav-content .nav-section .active.nav-category .nav-name {\n color: var(--color-primary);\n}\n.vertical-navigation .nav-content .nav-section .page-category {\n color: var(--color-accent);\n padding-left: 16px;\n margin-top: -4px;\n}\n.vertical-navigation .nav-content .nav-section .page-category .nav-row-item {\n min-width: 16px;\n line-height: 10px;\n padding: 0;\n font-size: 16px;\n}\n.vertical-navigation .nav-content .nav-section:not(:first-of-type) {\n border-top: 1px solid var(--color-white);\n}\n.vertical-navigation .nav-bottom {\n max-height: 100px;\n grid-area: nav-bottom;\n overflow: auto;\n}\n.vertical-nav-collapsed {\n min-width: 60px;\n max-width: 60px;\n}\n.vertical-nav-collapsed .nav-header {\n margin-left: 12px;\n margin-right: 12px;\n}\n.vertical-nav-collapsed .application-name {\n display: none;\n}\n.vertical-nav-collapsed .nav-section .nav-category .nav-name,\n.vertical-nav-collapsed .nav-section .page-category .nav-name,\n.vertical-nav-collapsed .nav-section .nav-category .HoverablePopover,\n.vertical-nav-collapsed .nav-section .page-category .HoverablePopover {\n display: none;\n}\n.vertical-nav-collapsed .nav-section .nav-category .tooltip,\n.vertical-nav-collapsed .nav-section .page-category .tooltip {\n color: red;\n}\n");const Mf=({app:e})=>{const t=jo(e.attributes.dataSources);Tn();const n=cl(),a=ya(gf),i=e=>{const t=e.filter((e=>!1!==e.visible&&!e.disabled&&e.sref)),n=Ef.getAll(),a=n.map((e=>t.filter((t=>t.category===e.key)))),i=t.filter((e=>!e.category||!V(n,(t=>t.key==e.category))));return a.push(i),a},r=i(e.dataSources),[s,o]=ot.useState(r),l=e.onRefresh(null,(()=>{if(!E(e.attributes.dataSources,t)){const t=i(e.dataSources);o(t)}}));ot.useEffect((()=>l()),[]);return!a&&n?null:ot.createElement("div",{className:Cn(["vertical-navigation","layer-high",{"vertical-nav-collapsed":!a}])},ot.createElement("h3",{className:"heading-2 horizontal middle nav-header sp-margin-m-xaxis sp-margin-l-top"},ot.createElement(Lh,{app:e}),ot.createElement("span",{className:"application-name text-semibold heading-2 sp-margin-m-left"},e.name)),ot.createElement("div",{className:"nav-content"},s.filter((e=>e.length)).map(((t,n)=>ot.createElement(vf,{key:`section-${n}`,dataSources:t,app:e}))),di.feature.pagerDuty&&e.attributes.pdApiKey&&ot.createElement("div",{className:"nav-section sp-padding-s-yaxis"},ot.createElement("div",{className:"page-category flex-container-h middle text-semibold sp-padding-s-yaxis clickable",onClick:()=>{yf.pageApplicationOwnerModal(e)}},ot.createElement("div",{className:"nav-row-item sp-margin-s-right"},a?ot.createElement(Bn,{className:"nav-item-icon",name:"spMenuPager",size:"medium",color:"danger"}):ot.createElement(Ps,{value:"Page App Owner",placement:"right"},ot.createElement("div",null,ot.createElement(Bn,{className:"nav-item-icon",name:"spMenuPager",size:"medium",color:"danger"})))),ot.createElement("span",{className:"nav-name"}," Page App Owner")))),ot.createElement("div",{className:"nav-bottom"},ot.createElement(qh,{app:e})))};oi(".application {\n display: flex;\n flex-direction: row;\n flex: 1 1 auto;\n overflow-y: hidden;\n}\n.glyphicon-cloud {\n top: 4px;\n}\n.application-actions {\n margin-bottom: 10px;\n padding-top: 5px;\n display: inline-block;\n float: right !important;\n}\n.filter-tags {\n padding: 5px 15px 0;\n}\n.filter-tags .filter-tag {\n border-radius: 2px;\n display: inline-block;\n padding: 3px 5px;\n margin-right: 10px;\n margin-bottom: 5px;\n background-color: var(--color-cirrus);\n font-size: 90%;\n}\n.filter-tags .filter-tag strong {\n font-weight: 600;\n text-transform: uppercase;\n}\n.filter-tags .filter-tag a {\n font-size: 90%;\n color: var(--color-dovegray);\n}\n.filter-tags .filter-toggle {\n background-color: var(--color-accent);\n border-radius: 2px;\n color: var(--color-white);\n cursor: pointer;\n display: inline-block;\n font-size: 90%;\n font-weight: 600;\n margin-bottom: 5px;\n margin-right: 10px;\n padding: 3px 5px;\n text-transform: uppercase;\n}\n.filter-tags .clear-filters {\n display: inline-block;\n margin-left: 5px;\n color: var(--color-mineshaft);\n font-size: 90%;\n}\n.select2-highlighted .icon {\n color: inherit;\n}\n.glyphicon-none:before {\n content: '\\e113';\n color: transparent !important;\n}\ninput[type='checkbox'],\ninput[type='radio'] {\n cursor: pointer;\n}\n.table-search-results-application .table-header .col-application,\n.table-search-results-application .table-row .col-application {\n width: 200px;\n}\n.table-search-results-application .table-header .col-account,\n.table-search-results-application .table-row .col-account,\n.table-search-results-application .table-header .col-accounts,\n.table-search-results-application .table-row .col-accounts {\n width: 250px;\n}\n.table-search-results-application .table-header .col-email,\n.table-search-results-application .table-row .col-email {\n width: 250px;\n}\n");class Nf extends ot.Component{constructor(e){super(e),this.apolloClient=Rh(),this.mountApplication(e.app)}componentWillUnmount(){this.unmountApplication(this.props.app)}componentWillReceiveProps(e){this.unmountApplication(this.props.app),this.mountApplication(e.app)}mountApplication(e){var t;e.notFound||e.hasError?bg.removeLastItem("applications"):(_c.application=e,(null==(t=e.attributes)?void 0:t.disableAutoRefresh)||(this.unsubscribeAppRefresh=this.props.app.subscribeToRefresh(this.apolloClient.onRefresh),e.enableAutoRefresh()))}unmountApplication(e){var t;e.notFound||e.hasError||(_c.application=void 0,null==(t=this.unsubscribeAppRefresh)||t.call(this),this.unsubscribeAppRefresh=void 0,e.disableAutoRefresh())}render(){const{app:e}=this.props;return ot.createElement("div",{className:"application"},!e.notFound&&!e.hasError&&ot.createElement(Mf,{app:e}),e.notFound&&ot.createElement("div",null,ot.createElement("h2",{className:"text-center"},"Application Not Found"),ot.createElement("p",{className:"text-center",style:{marginBottom:"20px"}},"Please check your URL - we can't find any data for ",ot.createElement("em",null,e.name),".")),e.hasError&&ot.createElement("div",null,ot.createElement("h2",{className:"text-center"},"Something went wrong"),ot.createElement("p",{className:"text-center",style:{marginBottom:"20px"}},"There was a problem loading ",ot.createElement("em",null,e.name),". Try checking your browser console for errors.")),ot.createElement(is,{app:e},ot.createElement(va,{client:this.apolloClient.client},ot.createElement("div",{className:"container scrollable-columns"},ot.createElement(Qn,{className:"secondary-panel",name:"insight"})))))}}class Df{static createApplicationForTests(e,...t){return new Qh(e,eo.createScheduler(),t)}static createStandaloneApplication(e){const t=new Qh(e,eo.createScheduler(),[]);return t.isStandalone=!0,t}static createNotFoundApplication(e){const t=new Qh(e,eo.createScheduler(),[{key:"serverGroups",lazy:!0,defaultData:[]}]);return t.notFound=!0,t}static createApplicationWithError(e){const t=new Qh(e,eo.createScheduler(),[{key:"serverGroups",lazy:!0,defaultData:[]}]);return t.hasError=!0,t}}const If=({app:e})=>{const[t,n]=ot.useState(hi.insightFilterStateModel.filtersExpanded),{filtersHidden:a}=hi.insightFilterStateModel,i=t?"filters-expanded":"filters-collapsed",r=ya(gf)?"nav-expanded":"nav-collapsed",{state:s}=Tn(),o=Boolean(Object.keys(s.views).find((e=>-1!==e.indexOf("detail@")))),l=o?"details-open":"details-closed";return e.notFound||e.hasError?null:ot.createElement("div",{className:`insight ${i} ${r} ${l}`},!a&&ot.createElement("div",{onClick:()=>{hi.insightFilterStateModel.pinFilters(!t),n(!t)}},ot.createElement(od,null)),!a&&t&&ot.createElement("div",null,ot.createElement(Qn,{name:"nav",className:"nav ng-scope"})),ot.createElement("div",{className:"flex-1"},ot.createElement(Qn,{name:"master",className:"nav-content ng-scope","data-scroll-id":"nav-content"}),o&&ot.createElement("div",null,ot.createElement(Qn,{name:"detail",className:"detail-content"}))))};class Ff{constructor(e){this.stateConfigProvider=e,this.childStates=[],this.detailStates=[],this.insightStates=[],this.insightState={name:"insight",abstract:!0,views:{insight:{component:If,$type:"react"}},resolve:{app:["app",e=>e]},children:this.insightStates},this.childStates.push(this.insightState)}addChildState(e){this.childStates.push(e),this.stateConfigProvider.setStates()}addInsightState(e){this.insightStates.push(e),e.children=this.detailStates,this.stateConfigProvider.setStates()}addInsightDetailState(e){this.detailStates.push(e),this.insightState.children.forEach((t=>{t.children=t.children||[],t.children.some((t=>t.name===e.name))||t.children.push(e)})),this.stateConfigProvider.setStates()}addParentState(e,t,n=""){const a={name:"application",url:`${n}/:application`,redirectTo:e=>e.injector().getAsync("app").then((t=>{var n;const a=null==(n=t.dataSources.find((e=>e.sref&&!e.disabled)))?void 0:n.sref,i=e.params(),r={relative:a?e.to().name:void 0};return e.router.stateService.target(a||"home.search",i,r)})),resolve:{app:["$stateParams",e=>Jg.getApplication(e.application,!1).then((t=>(Vg.checkIfInferredAndWarn(t),t||Df.createNotFoundApplication(e.application)))).catch((t=>t.status&&404===t.status?Df.createNotFoundApplication(e.application):(console.error(t),Df.createApplicationWithError(e.application))))]},data:{pageTitleMain:{field:"application"},history:{type:"applications",state:"home.applications.application",keyParams:["application"]}},children:this.childStates,views:{}};a.views[t]={component:Nf,$type:"react"},e.children.push(a),this.stateConfigProvider.setStates()}$get(){return this}}Ff.$inject=["stateConfigProvider"];const Tf="spinnaker.core.application.state.provider";n(Tf,[Pg]).provider("applicationState",Ff);class Qf extends ot.Component{render(){const{isValid:e,isDirty:t,isSaving:n,saveError:a,onRevertClicked:i,onSaveClicked:r}=this.props;if(!t)return ot.createElement("div",{className:"row footer"},ot.createElement("div",{className:"col-md-12 text-right"},ot.createElement("span",{className:"btn btn-link disabled"},ot.createElement("span",{className:"far fa-check-circle"})," In sync with server")));const s=ot.createElement("button",{className:"btn btn-primary "+(e?"":"disabled"),onClick:r},ot.createElement("span",null,ot.createElement("span",{className:"far fa-check-circle"})," Save Changes")),o=ot.createElement("button",{className:"btn btn-primary",disabled:!0},ot.createElement("span",{className:"pulsing"},ot.createElement(bs,{size:"nano"})," Savingβ¦"));return ot.createElement("div",{className:"row footer"},ot.createElement("div",{className:"col-md-3"},ot.createElement("button",{className:"btn btn-default",onClick:i,style:{visibility:"visible"}},ot.createElement("span",{className:"glyphicon glyphicon-flash"})," Revert")),ot.createElement("div",{className:"col-md-9 text-right"},n?o:s,!!a&&ot.createElement("div",{className:"error-message"},"There was an error saving your changes. Please try again.")))}}class Pf{static createApplication(e){const t=this.buildJobs(e,"createApplication",p);return tp.executeTask({job:t,application:e,description:"Create Application: "+e.name})}static updateApplication(e){const t=this.buildJobs(e,"updateApplication",p);return tp.executeTask({job:t,application:e,description:"Update Application: "+e.name})}static deleteApplication(e){const t=this.buildJobs(e,"deleteApplication",(e=>({name:e.name})));return tp.executeTask({job:t,application:e,description:"Deleting Application: "+e.name}).then((t=>(bg.removeByAppName(e.name),t))).catch((e=>e))}static buildJobs(e,t,n){const a=[],i=n(e);return e.cloudProviders&&(i.cloudProviders=e.cloudProviders.join(",")),delete i.accounts,a.push({type:t,application:i}),a}}class Rf{revert(){r(this.viewState.originalConfig,this.config),this.viewState.isDirty=!1}saveSuccess(){this.viewState.originalConfig=p(this.config),this.viewState.originalStringVal=s(this.config),this.viewState.isDirty=!1,this.viewState.saving=!1,this.application.attributes[this.configField]=this.config}saveError(){this.viewState.saving=!1,this.viewState.saveError=!0}save(){this.viewState.saving=!0,this.viewState.saveError=!1;const e={name:this.application.name,accounts:this.application.attributes.accounts};e[this.configField]=this.config,Pf.updateApplication(e).then((()=>this.saveSuccess()),(()=>this.saveError()))}}const Uf={bindings:{application:"=",config:"=",viewState:"=",configField:"@",revert:"&?",afterSave:"&?",saveDisabled:"<"},controller:Rf,templateUrl:"core/src/application/config/footer/configSectionFooter.component.html"},zf="spinnaker.core.application.config.section.footer.component";n(zf,[]).component("configSectionFooter",Uf),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/application/config/footer/configSectionFooter.component.html",'<div class="row footer">\n <div class="col-md-3">\n <button\n class="btn btn-default"\n ng-click="$ctrl.revert()"\n ng-if="$ctrl.viewState.isDirty"\n style="visibility: visible"\n >\n <span class="glyphicon glyphicon-flash"></span> Revert\n </button>\n </div>\n <div class="col-md-9 text-right">\n <button\n class="btn btn-primary"\n ng-if="$ctrl.viewState.isDirty"\n ng-click="$ctrl.save()"\n ng-disabled="$ctrl.saveDisabled"\n >\n <span ng-if="!$ctrl.viewState.saving"> <span class="far fa-check-circle"></span> Save Changes </span>\n <span ng-if="$ctrl.viewState.saving" class="pulsing">\n <span class="fa fa-cog fa-spin"></span> Saving…\n </span>\n </button>\n <div class="error-message" ng-if="$ctrl.viewState.saveError">\n There was an error saving your changes. Please try again.\n </div>\n <span ng-if="!$ctrl.viewState.isDirty" class="btn btn-link disabled"\n ><span class="far fa-check-circle"></span> In sync with server</span\n >\n </div>\n</div>\n')}]);const Gf=()=>!0;class jf{static getMonikers(e,t=Gf){const n=e.map((e=>e.getDataSource("serverGroups").data.filter(t).map((e=>e.moniker))));return ce(T(n))}static getRegions(e,t=Gf){const n=e.map((e=>e.getDataSource("serverGroups").data.filter(t).map((e=>e.region))));return f(ce(T(n))).sort()}static getStacks(e,t=Gf){const n=e.map((e=>e.getDataSource("serverGroups").data.filter(t).map((e=>e.stack))));return f(ce(T(n))).sort()}static getClusters(e,t=Gf){const n=e.map((e=>e.getDataSource("serverGroups").data.filter(t).map((e=>e.cluster))));return f(ce(T(n))).sort()}static getAsgs(e,t=Gf){const n=e.map((e=>e.getDataSource("serverGroups").data.filter(t).map((e=>e.name))));return f(ce(T(n))).sort()}static getZones(e,t=Gf,n=Gf,a=Gf){const i=e.map((e=>e.getDataSource("serverGroups").data.filter(t).filter(n).filter(a).map((e=>e.instances)))),r=T(T(i)).map((e=>e.availabilityZone));return f(ce(r)).sort()}static getInstances(e,t=Gf,n=Gf,a=Gf){const i=e.map((e=>e.getDataSource("serverGroups").data.filter(t).filter(n).map((e=>e.instances))));return f(ce(T(T(i)).filter(a)))}static clusterFilterForCredentials(e){return t=>!e||t.account===e}static monikerClusterNameFilter(e){return t=>t.moniker.cluster===e}static clusterFilterForCredentialsAndRegion(e,t){return n=>{const a=!e||n.account===e,i=n&&Array.isArray(t)&&t.length?t.includes(n.region):!t||n.region===t;return a&&i}}}class Lf{static registerValidator(e,t){this.providerMap.has(e)||this.providerMap.set(e,[]),this.providerMap.get(e).push(t)}static setValidators(e,t){this.providerMap.set(e,t)}static validate(e,t){return Di.listProviders().then((n=>{const a=t&&t.length?t:n,i=[],r=[];return a.forEach((t=>{this.providerMap.has(t)&&this.providerMap.get(t).forEach((n=>{const a=n.validate(e);a.warnings.forEach((e=>r.push({cloudProvider:t,message:e}))),a.errors.forEach((e=>i.push({cloudProvider:t,message:e})))}))})),{errors:i,warnings:r}}))}}Lf.providerMap=new Map;const Of="infrastructure",Yf="delivery";Ef.register({key:Yf,label:"Delivery",icon:"fa fa-fw fa-xs fa-tasks",primary:!0,order:100}),Ef.register({key:Of,label:"Infrastructure",icon:"fa fa-fw fa-xs fa-cloud",primary:!0,order:200});oi(".user-menu .dropdown-toggle {\n background-color: var(--color-primary);\n border: none;\n box-shadow: none;\n color: var(--color-white);\n font-weight: 200;\n padding: var(--padd);\n}\n.user-menu .dropdown-menu {\n top: 80%;\n min-width: 125px;\n border: 0;\n}\n@media (max-width: 480px) {\n .user-menu .dropdown-menu {\n position: static;\n }\n}\n");const $f=()=>{const e=ri.getAuthenticatedUser(),t=e.authenticated;return di.authEnabled?st.createElement("div",{className:"user-menu"},st.createElement(tn,{id:"user-menu-dropdown"},st.createElement(tn.Toggle,null,st.createElement("i",{className:"hidden-lg glyphicon glyphicon-user"}),st.createElement("span",{className:"hidden-xs hidden-sm hidden-md"},e.name)),t&&st.createElement(tn.Menu,null,st.createElement("li",{className:"sp-padding-xs",onClick:()=>Ai.logOut()},"Log Out")))):null},Hf={};var Vf=Object.defineProperty,Jf=Object.getOwnPropertyDescriptor;let Wf=class extends ot.Component{render(){return ot.createElement(ta,null,ot.createElement(Kf,{app:this.props.app}))}};Wf=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Jf(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&Vf(t,n,r),r})([ys("core.insight.banners")],Wf);const Kf=({app:e})=>{const{state:t}=Tn(),n=(di.banners||[]).filter((e=>{const n=e.routes.some((e=>t.name.includes(e)));return e.active&&n&&Boolean(Hf[e.key])})).map((t=>{const n=Hf[t.key];return ot.createElement(n,{key:`banner-${t.key}`,app:e})}));return n.length?ot.createElement("div",{className:"sp-margin-sm vertical"},n):null};class qf{static listCertificates(){return Si("/certificates").get()}static listCertificatesByProvider(e){return Si("/certificates").path(e).get()}}class Xf extends ot.Component{constructor(e){super(e),this.PopoverContent=()=>{const{ttl:e}=this.state,t=!!e&&Date.now()>e,n=sr(e);return ot.createElement("div",null,"This server group ",t?"was scheduled to be":"will be"," automatically destroyed"," ",ot.createElement("strong",null,n),".")},this.state=this.getState(e)}getState(e){const t=e.entity&&e.entity.entityTags;if(t){const e=t.tags.filter((e=>"spinnaker:ttl"===e.name))[0];if(e)return{ttl:e.value.expiry}}return{}}componentWillReceiveProps(e){this.setState(this.getState(e))}render(){const{ttl:e}=this.state;return e?ot.createElement("span",{className:"tag-marker small"},ot.createElement(qs,{Component:this.PopoverContent,title:"Ephemeral Server Group",className:"ephemeral-popover"},ot.createElement("i",{className:"ephemeral fa fa-clock"}))):null}}class Zf extends ot.Component{constructor(){super(...arguments),this.getAlertAnalyticsLabel=()=>{const{entity:e,pageLocation:t,entityType:n}=this.props,a=e.entityTags,{account:i,region:r,entityId:s}=a.entityRef;return[t,n,i,r,s,r,a.alerts.map((e=>e.name)).join(",")].join(":")},this.getNoticeAnalyticsLabel=()=>{const{entity:e,pageLocation:t,entityType:n}=this.props,a=e.entityTags,{account:i,region:r,entityId:s}=a.entityRef;return[t,n,i,r,s,a.notices.map((e=>e.name)).join(",")].join(":")}}render(){const{entity:e,application:t,placement:n,hOffsetPercent:a,className:i,onUpdate:r}=this.props,s=e&&e.entityTags,o=s?[s]:[];return ot.createElement("div",{className:"entity-notifications"},ot.createElement(df,{entity:e,tags:o,application:t,type:"alerts",gaLabelFn:this.getAlertAnalyticsLabel,grouped:!1,categorized:!0,className:i,placement:n,hOffsetPercent:a,onUpdate:r}),ot.createElement(df,{entity:e,tags:o,application:t,type:"notices",gaLabelFn:this.getNoticeAnalyticsLabel,grouped:!1,categorized:!1,className:i,placement:n,hOffsetPercent:a,onUpdate:r}),ot.createElement(Xf,{entity:e}))}}Zf.defaultProps={placement:"bottom",hOffsetPercent:"50%",className:"",onUpdate:qi};class _f{static pauseResourceManagement(e){return Si("/managed/resources").path(e,"pause").post()}static resumeResourceManagement(e){return Si("/managed/resources").path(e,"pause").delete()}}var ev,tv;(tv=ev||(ev={})).ACTUATING="ACTUATING",tv.CREATED="CREATED",tv.DIFF="DIFF",tv.DIFF_NOT_ACTIONABLE="DIFF_NOT_ACTIONABLE",tv.CURRENTLY_UNRESOLVABLE="CURRENTLY_UNRESOLVABLE",tv.MISSING_DEPENDENCY="MISSING_DEPENDENCY",tv.ERROR="ERROR",tv.HAPPY="HAPPY",tv.PAUSED="PAUSED",tv.RESUMED="RESUMED",tv.UNHAPPY="UNHAPPY",tv.UNKNOWN="UNKNOWN",tv.WAITING="WAITING",tv.DELETING="DELETING";const nv=()=>ot.createElement("p",null,ot.createElement("div",{className:"horizontal top sp-padding-m alert alert-warning"},ot.createElement("i",{className:"fa fa-exclamation-triangle sp-margin-m-right sp-margin-xs-top"}),ot.createElement("span",null,"Pausing management will not interrupt the action Spinnaker is currently performing to resolve the difference from desired state."))),av=({isPaused:e,isActuating:t,regions:n})=>e?ot.createElement(ot.Fragment,null,ot.createElement("p",null,"Spinnaker will resume taking action to correct differences from the desired state."),ot.createElement(iv,{isPaused:!0,regions:n})):ot.createElement(ot.Fragment,null,ot.createElement("p",null,"While a resource is paused, Spinnaker will not take action to correct differences from the desired state."),t&&ot.createElement(nv,null),ot.createElement(iv,{isPaused:!0,regions:n})),iv=({isPaused:e,regions:t})=>t.length<2?null:ot.createElement("div",{className:"horizontal top sp-padding-m alert alert-warning"},ot.createElement("i",{className:"fa fa-exclamation-triangle sp-margin-m-right sp-margin-xs-top"}),ot.createElement("span",null,e?"Resuming":"Pausing"," management of this resource will affect the following regions:"," ",ot.createElement("b",null,t.join(", ")),"."));oi(".ManagedResourceStatusIndicator .HoverablePopover {\n display: flex;\n}\n.ManagedResourceStatusIndicator .info {\n background-color: var(--color-status-info);\n}\n.ManagedResourceStatusIndicator .warning {\n background-color: var(--color-status-warning);\n}\n.ManagedResourceStatusIndicator .error {\n background-color: var(--color-status-error);\n}\n.ManagedResourceStatusIndicator .square {\n padding: 0 8px;\n font-size: 20px;\n}\n.ManagedResourceStatusIndicator .circle {\n padding: 4px;\n font-size: 14px;\n border-radius: 50%;\n}\n");const rv=(e,t)=>{const{managedResourceSummary:n,isManaged:a}=e;if(!a||!n||n.isPaused)return Ze.when(!0);return lp.confirm({header:"Pause Management?",bodyContent:ot.createElement(lv,{resourceSummary:n}),account:n.locations.account,buttonText:"Pause management",submitMethod:()=>_f.pauseResourceManagement(n.id).then((()=>t.managedResources.refresh(!0)))}).then((()=>!0),(()=>!1))},sv=(e,t,n)=>{null==n||n();const{id:a,isPaused:i}=e;return lp.confirm({header:`Really ${i?"resume":"pause"} resource management?`,bodyContent:ot.createElement(av,{isActuating:e.status===ev.ACTUATING,isPaused:i,regions:ov(e)}),account:e.locations.account,buttonText:(i?"Resume":"Pause")+" management",submitMethod:()=>(i?_f.resumeResourceManagement(a):_f.pauseResourceManagement(a)).then((()=>t.managedResources.refresh(!0)))})},ov=e=>e.locations.regions.map((e=>e.name)).sort(),lv=({resourceSummary:e})=>{const{status:t}=e;return ot.createElement(ot.Fragment,null,ot.createElement("p",null,"π ",ot.createElement("b",null,"Spinnaker is managing this resource.")),ot.createElement("p",null,"If you need to temporarily stop Spinnaker from managing this resource β for example, if something is wrong and manual intervention is required β you can pause management and resume it later."),t===ev.ACTUATING&&ot.createElement(nv,null),ot.createElement(iv,{isPaused:!0,regions:ov(e)}))},cv=({app:e,formik:t})=>{const[n,a]=ot.useState(!1),i=t.values,r=ot.useCallback((()=>{const{resourceSummary:n,backingData:i}=t.values;n&&sv(n,e).then((()=>{var n,r;i.managedResources=null==(r=null==(n=e.getDataSource("managedResources"))?void 0:n.data)?void 0:r.resources,a(!0),t.setFieldValue("resourceSummary",null)}),(()=>{}))}),[e,t]);return i.resourceSummary||n?n?ot.createElement("div",{className:"alert alert-info"},ot.createElement("div",{className:"horizontal top"},ot.createElement("div",null,ot.createElement("i",{className:"fa fa-check-circle"})),ot.createElement("div",{className:"sp-margin-m-left"},"Resource management has been paused."))):ot.createElement("div",{className:"alert alert-danger"},ot.createElement("p",null,ot.createElement("b",null,"π Spinnaker is managing this resource.")),ot.createElement("p",null,"Any changes you make to this cluster will be overridden in favor of the desired state."),ot.createElement("p",null,"If you need to manually deploy a new version of this server group, you should pause management."),ot.createElement("div",{className:"sp-margin-m-top"},ot.createElement("button",{className:"passive",onClick:r},ot.createElement("i",{className:"fa fa-pause"})," Pause management"))):null},pv=({resource:e,application:t,onClick:n,children:a})=>{if(!e)return null;const i=e.isManaged&&(!e.managedResourceSummary||e.managedResourceSummary.isPaused),r=t.isManagementPaused,s=e.isManaged&&!i&&!r;return ot.createElement(an,{onClick:()=>(s?rv(e,t):Ze.when(!0)).then((e=>{e&&(null==n||n())}))},a)};class dv{constructor(e){this.handlers={};for(const t of e)this.registerHandler(t)}normalizeKind(e){return e.split("@")[0]}getHandler(e){return this.handlers[e]||this.handlers[this.normalizeKind(e)]}isSupported(e){return Boolean(this.getHandler(e))}registerHandler(e){this.handlers[e.kind]=e,this.handlers[this.normalizeKind(e.kind)]=e}}const uv=new class extends dv{getIcon(e){var t,n;return null!=(n=null==(t=this.getHandler(e))?void 0:t.iconName)?n:"placeholder"}getExperimentalDisplayLink(e){var t,n;return null==(n=null==(t=this.getHandler(e.kind))?void 0:t.experimentalDisplayLink)?void 0:n.call(t,e)}getSpinnakerType(e){var t;const n=this.normalizeKind(e);return(null==(t=n.split("/"))?void 0:t[1])||n}getNativeResourceRoutingInfo({kind:e,account:t,stack:n,detail:a,displayName:i}){const r={acct:t,stack:n,detail:a,q:i};switch(this.getSpinnakerType(e)){case"cluster":return{state:"home.applications.application.insight.clusters",params:r};case"security-group":return{state:"home.applications.application.insight.firewalls",params:r};case"classic-load-balancer":case"application-load-balancer":return{state:"home.applications.application.insight.loadBalancers",params:r}}}}([{kind:"titus/cluster",iconName:"cluster"},{kind:"ec2/cluster",iconName:"cluster"},{kind:"ec2/security-group",iconName:"securityGroup"},{kind:"ec2/classic-load-balancer",iconName:"loadBalancer"},{kind:"ec2/application-load-balancer",iconName:"loadBalancer"}]),mv=/^(.*)\[(.*)\]$/i,gv=e=>uv.getSpinnakerType(e),hv=e=>{switch(e){case"classic":return"classic-load-balancer";case"application":return"application-load-balancer";default:return null}};class fv{static decorateResources(e){return e.applicationPaused&&e.resources.forEach((e=>e.status=ev.PAUSED)),e.resources.forEach((e=>e.isPaused=e.status===ev.PAUSED)),e}static getApplicationSummary(e){return Si("/managed/application").path(e).query({entities:"resources"}).get().then(this.decorateResources)}static getResourceHistory(e){return Si("/history").path(e).query({limit:100}).get().then((e=>(e.forEach((e=>{var t;e.delta&&(e.delta=(t=e.delta)?Object.keys(t).reduce(((e,n)=>{const a=t[n],i=`["${Ce(n.split("/").filter(Boolean),(e=>{if(e.startsWith("{")&&e.endsWith("}"))return e.substring(1,e.length-1);const t=e.match(mv);return t?[t[1],t[2]]:e})).join('"]["fields"]["')}"]`,r=m(e,i);return g(e,i,{...r,key:n,diffType:a.state,actual:a.current,desired:a.desired}),e}),{}):{})})),e)))}}const vv=(e,t)=>e&&t&&e.app===t.app&&e.stack===t.stack&&e.detail===t.detail,Av=(e,t)=>e.managedResources.data.resources.filter((({kind:e})=>t.includes(gv(e)))),Ev=e=>{if(!di.feature.managedResources)return;const t=Av(e,["cluster"]);e.serverGroups.data.forEach((e=>{const n=t.find((({moniker:t,locations:{account:n,regions:a}})=>vv(t,e.moniker)&&n===e.account&&a.some((({name:t})=>t===e.region))));e.isManaged=!!n,e.managedResourceSummary=n})),e.serverGroups.dataUpdated()},bv=e=>{if(!di.feature.managedResources)return;const t=Av(e,["classic-load-balancer","application-load-balancer"]);e.loadBalancers.data.forEach((e=>{const n=t.find((({kind:t,moniker:n,locations:{account:a,regions:i}})=>e.loadBalancerType&&gv(t)===hv(e.loadBalancerType)&&vv(n,e.moniker)&&a===e.account&&i.some((({name:t})=>t===e.region))));e.isManaged=!!n,e.managedResourceSummary=n})),e.loadBalancers.dataUpdated()},yv=e=>{if(!di.feature.managedResources)return;const t=Av(e,["security-group"]);e.securityGroups.data.forEach((e=>{const n=t.find((({moniker:t,locations:{account:n,regions:a}})=>vv(t,e.moniker)&&n===e.account&&a.some((({name:t})=>t===e.region))));e.isManaged=!!n,e.managedResourceSummary=n})),e.securityGroups.dataUpdated()};const{memo:Cv}=ot,wv=(e,t,n)=>(Object.keys(e).sort(((e,t)=>e.localeCompare(t))).forEach((a=>{const{key:i,diffType:r,actual:s,desired:o,fields:l}=e[a];n.push({key:i,name:a,depth:t,actual:s,desired:o,type:r,isLeafNode:!l}),l&&wv(l,t+1,n)})),n),xv=Cv((({diff:e})=>{const t=(e=>wv(e,0,[]))(e);return ot.createElement(sc,{layout:mc,columns:["configuration","change","actual","desired"]},t.map((({key:e,name:t,depth:n,isLeafNode:a,type:i,actual:r,desired:s})=>ot.createElement(pc,{key:e},ot.createElement(uc,{indent:n},ot.createElement(yc,null,t)),ot.createElement(uc,null,a&&ot.createElement(yc,{className:"text-italic"},i.toLowerCase())),ot.createElement(uc,null,ot.createElement(bc,null,r)),ot.createElement(uc,null,ot.createElement(bc,null,s))))))})),kv={delayShow:400,delayHide:100},Bv={size:"medium",fullWidth:!0},Sv={root:"https://www.spinnaker.io/guides/user/managed-delivery",pinning:"https://www.spinnaker.io/guides/user/managed-delivery/pinning/",gettingStarted:"https://www.spinnaker.io/guides/user/managed-delivery/getting-started/",markAsBad:"https://www.spinnaker.io/guides/user/managed-delivery/marking-as-bad/",resourceStatus:"https://www.spinnaker.io/guides/user/managed-delivery/resource-status/"},Mv=e=>{var t,n;return(null==(n=null==(t=di.managedDelivery)?void 0:t.urls)?void 0:n[e])||Sv[e]},Nv=di.feature.displayTimestampsInUserLocalTime?void 0:di.defaultTimeZone,Dv=({startedAt:e,completedAt:t})=>{const[,n]=ot.useState(!1);ol((()=>{t||n((e=>!e))}),t?0:1e3);const a=En.fromISO(e),i=t?En.fromISO(t):En.utc();return ot.createElement(ot.Fragment,null,ir(a,i))},Iv=(e,t)=>{const n=Fv(e),a=t?" ago":"";if(n.years||n.months){let t=En.local();return Nv&&(t=t.setZone(Nv)),e.year===t.year?e.toFormat("MMM d"):e.toFormat("MMM d, y")}return n.days?n.toFormat("d")+"d"+a:n.hours?n.toFormat("h")+"h"+a:n.minutes?n.toFormat("m")+"m"+a:n.seconds?n.toFormat("s")+"s"+a:null},Fv=e=>e.diffNow().negate().shiftTo("years","months","days","hours","minutes","seconds"),Tv=mt((({timestamp:e,clickToCopy:t,delayShow:n,removeStyles:a,withSuffix:i=!1})=>{const r=(e=>"number"==typeof e?En.fromMillis(e):"string"==typeof e?En.fromISO(e):e)(e),s=Nv?r.setZone(Nv):r,[o,l]=dt(Iv(s,i)),c=()=>{l(Iv(s,i))};if(ol(c,1e3),lt(c,[s]),!o)return null;const p=s.toFormat("yyyy-MM-dd HH:mm:ss ZZZZ"),d=ot.createElement("span",{className:a?void 0:"text-regular text-italic",style:a?void 0:{fontSize:13,lineHeight:1}},o);return t?ot.createElement(zi,{buttonInnerNode:d,text:p,toolTip:`${p} (click to copy)`}):ot.createElement(Ps,{value:p,delayShow:n},d)})),Qv={WARNING:"event-warning",ERROR:"event-error",SUCCESS:"event-success"},Pv=({level:e,diff:t,tasks:n,dismissModal:a,message:i})=>ot.createElement("div",{className:"flex-container-v left"},i&&ot.createElement("div",{className:Cn("sp-padding-xs-yaxis",Qv[e])},i),n&&ot.createElement("div",{className:"flex-container-v"},n.map((({id:e,name:t})=>ot.createElement(Dn,{key:e,to:"home.applications.application.tasks.taskDetails",params:{taskId:e}},ot.createElement("a",{className:"sp-padding-xs-yaxis",onClick:()=>null==a?void 0:a()},t))))),t&&ot.createElement(xv,{diff:t})),Rv=ot.memo((({event:e,dismissModal:t})=>{const{timestamp:n,delta:a,tasks:i,message:r,reason:s,exceptionMessage:o,level:l}=e,c=ot.useMemo((()=>En.fromISO(n)),[n]),p=a||i||r||s||o;return ot.createElement(pc,{renderExpandedContent:p?()=>ot.createElement(Pv,{level:e.level,diff:a,tasks:i,message:r||s||o,dismissModal:t}):void 0},ot.createElement(uc,null,ot.createElement("span",{className:Cn(Qv[l]||"event-info","event-level")},e.level)),ot.createElement(uc,null,ot.createElement("span",{className:"event-type"},e.displayName)),ot.createElement(uc,null,ot.createElement("div",{className:"flex-container-h middle wrap"},ot.createElement(Tv,{timestamp:c,clickToCopy:!0}))))}),xa);oi(".ManagedResourceHistoryModal {\n width: 100%;\n}\n.ManagedResourceHistoryModal .event-type {\n color: var(--color-charcoal);\n}\n.ManagedResourceHistoryModal .event-level {\n font-size: 12px;\n line-height: 1;\n}\n.ManagedResourceHistoryModal .event-type-icon {\n font-size: 18px;\n}\n.ManagedResourceHistoryModal .event-time {\n white-space: nowrap;\n}\n.ManagedResourceHistoryModal .event-info {\n color: var(--color-charcoal);\n}\n.ManagedResourceHistoryModal .event-success {\n color: var(--color-success);\n}\n.ManagedResourceHistoryModal .event-warning {\n color: var(--color-alert);\n}\n.ManagedResourceHistoryModal .event-error {\n color: var(--color-danger);\n}\n.ManagedResourceHistoryModal .loading-error-message {\n color: var(--color-danger);\n}\n");const Uv=e=>Xl(Gv,e),zv=Ac([{unit:"px",size:70},8,1.5]),Gv=({id:e,displayName:t,dismissModal:n})=>{const{status:a,result:i,refresh:r}=pl((()=>fv.getResourceHistory(e)),null,1e4,[]),s=!i&&["NONE","PENDING"].includes(a),o=!s&&"REJECTED"!==a;return ot.createElement(ot.Fragment,null,ot.createElement(Wl,null,"Resource history - ",t),ot.createElement(Kl,null,ot.createElement("div",{className:Cn("ManagedResourceHistoryModal",{"flex-container-h middle center flex-grow":!o})},s&&ot.createElement(bs,{size:"medium"}),"REJECTED"===a&&ot.createElement("div",{className:"flex-container-v middle center"},ot.createElement("div",{className:"loading-error-message text-semibold sp-margin-m-bottom"},"Something went wrong."),ot.createElement("button",{className:"btn btn-default",onClick:r},ot.createElement("i",{className:"fa fa-xs fa-sync-alt sp-margin-xs-right"})," Try again")),o&&ot.createElement("div",{className:"sp-margin-xl-bottom"},ot.createElement(sc,{layout:zv,columns:["Level","Event","Time"],expandable:null==i?void 0:i.some((({delta:e,tasks:t,message:n,reason:a,exceptionMessage:i})=>e||t||n||a||i))},(i||[]).map((e=>ot.createElement(Rv,{key:e.type+e.timestamp,event:e,dismissModal:n}))))))))};oi(".ManagedResourceDetailsIndicator {\n background-color: var(--color-mineshaft);\n color: var(--color-white);\n}\n\n.ManagedResourceDetailsIndicator .md-logo {\n background-color: var(--color-black);\n padding: 18px;\n}\n\n.ManagedResourceDetailsIndicator .summary-message {\n font-size: 12px;\n font-weight: 300;\n}\n\n.ManagedResourceDetailsIndicator .resource-actions > .dropdown-toggle {\n color: var(--color-white);\n background-color: transparent;\n padding: 3px 10px;\n}\n");const jv=(e,t)=>Ui.log({category:"Managed Resource Menu",action:`${e} clicked`,data:{label:t}}),Lv=({resourceSummary:e,application:t})=>{if(!e)return null;const{id:n,isPaused:a}=e,i=ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker is managing this resource.")),ot.createElement("p",null,"If a difference from the desired state is detected, Spinnaker will act to correct it."," ",ot.createElement("a",{target:"_blank",onClick:()=>jv("Learn More",n),href:Mv("root")},"Learn More"))),r=`\n <p>Resource management is currently disabled for the entire application.\n <a\n href=${hi.$state.href("home.applications.application.config",{section:"managed-resources"})}\n >\n Resume application management\n </a>\n</p>`;return ot.createElement("div",{className:"flex-container-h middle ManagedResourceDetailsIndicator"},ot.createElement(qs,{template:i,placement:"left"},ot.createElement("div",{className:"md-logo flex-container-h middle"},ot.createElement("img",{src:"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%2014.37557%2015.52748%22%3E%20%20%3Cdefs%3E%20%20%20%20%3Cstyle%3E%20%20%20%20%20%20.a%20%7B%20%20%20%20%20%20%20%20fill%3A%20%23de4d53%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.b%20%7B%20%20%20%20%20%20%20%20fill%3A%20%23eeac3c%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.c%20%7B%20%20%20%20%20%20%20%20fill%3A%20%2396c25e%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.d%20%7B%20%20%20%20%20%20%20%20fill%3A%20%2349a9df%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.e%20%7B%20%20%20%20%20%20%20%20fill%3A%20%238f429b%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.f%20%7B%20%20%20%20%20%20%20%20opacity%3A%200.25%3B%20%20%20%20%20%20%20%20fill%3A%20url%28%23a%29%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.g%20%7B%20%20%20%20%20%20%20%20fill%3A%20url%28%23b%29%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.h%20%7B%20%20%20%20%20%20%20%20fill%3A%20url%28%23c%29%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.i%20%7B%20%20%20%20%20%20%20%20fill%3A%20%23fff%3B%20%20%20%20%20%20%7D%20%20%20%20%3C%2Fstyle%3E%20%20%20%20%3ClinearGradient%20id%3D%22a%22%20x1%3D%225.51119%22%20y1%3D%229.27236%22%20x2%3D%225.9233%22%20y2%3D%229.32662%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.26839%22%20stop-color%3D%22%23441b19%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.73261%22%20stop-color%3D%22%23441b19%22%20stop-opacity%3D%220%22%2F%3E%20%20%20%20%3C%2FlinearGradient%3E%20%20%20%20%3ClinearGradient%20id%3D%22b%22%20x1%3D%225.00789%22%20y1%3D%227.58774%22%20x2%3D%227.13963%22%20y2%3D%226.85373%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.21861%22%20stop-color%3D%22%234b0726%22%20stop-opacity%3D%220%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%221%22%20stop-color%3D%22%234b0726%22%20stop-opacity%3D%220.6%22%2F%3E%20%20%20%20%3C%2FlinearGradient%3E%20%20%20%20%3ClinearGradient%20id%3D%22c%22%20x1%3D%224.24719%22%20y1%3D%2215.7319%22%20x2%3D%226.15272%22%20y2%3D%220.21263%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.35048%22%20stop-color%3D%22%23ff0%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.40939%22%20stop-color%3D%22%23ffff1c%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.53687%22%20stop-color%3D%22%23ffff64%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.72174%22%20stop-color%3D%22%23ffffd5%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.7878%22%20stop-color%3D%22%23fff%22%2F%3E%20%20%20%20%3C%2FlinearGradient%3E%20%20%3C%2Fdefs%3E%20%20%3Cpath%20class%3D%22a%22%20d%3D%22M5.7%2C15.16747a.5.5%2C0%2C0%2C0%2C.43.56H6.2a.50007.50007%2C0%2C0%2C0%2C.5-.44L7.91827%2C6.45482%2C7.198%2C4.30693Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpath%20class%3D%22b%22%20d%3D%22M6.58716%2C1.48546%2C4.7%2C15.16747a.5.5%2C0%2C0%2C0%2C.43.56H5.2a.50007.50007%2C0%2C0%2C0%2C.5-.44L7.3075%2C3.63335Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpath%20class%3D%22c%22%20d%3D%22M3.20043%2C15.72258a.557.557%2C0%2C0%2C1-.06885-.00488.49923.49923%2C0%2C0%2C1-.42676-.56348l2-14.50049A.49241.49241%2C0%2C0%2C1%2C5.2683.227a.4995.4995%2C0%2C0%2C1%2C.42676.56348l-2%2C14.50049A.49982.49982%2C0%2C0%2C1%2C3.20043%2C15.72258Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpath%20class%3D%22d%22%20d%3D%22M2.20043%2C15.72258a.557.557%2C0%2C0%2C1-.06885-.00488.49923.49923%2C0%2C0%2C1-.42676-.56348l2-14.50049A.49241.49241%2C0%2C0%2C1%2C4.2683.227a.4995.4995%2C0%2C0%2C1%2C.42676.56348l-2%2C14.50049A.49982.49982%2C0%2C0%2C1%2C2.20043%2C15.72258Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpath%20class%3D%22e%22%20d%3D%22M1.20043%2C15.72258a.557.557%2C0%2C0%2C1-.06885-.00488.49923.49923%2C0%2C0%2C1-.42676-.56348l2-14.50049A.49241.49241%2C0%2C0%2C1%2C3.2683.227a.4995.4995%2C0%2C0%2C1%2C.42676.56348l-2%2C14.50049A.49982.49982%2C0%2C0%2C1%2C1.20043%2C15.72258Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpath%20class%3D%22f%22%20d%3D%22M6.6712%2C3.77776%2C6.397%2C2.95122l-1.68982%2C12.242a.49324.49324%2C0%2C0%2C0%2C.21478.43933.51145.51145%2C0%2C0%2C0%2C.16754-.31134Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpolygon%20class%3D%22g%22%20points%3D%225.692%202.719%205.02%207.591%206.46%2011.721%207.11%207.005%205.692%202.719%22%2F%3E%20%20%3Cpath%20class%3D%22h%22%20d%3D%22M4.20043%2C15.72258a.557.557%2C0%2C0%2C1-.06885-.00488.49923.49923%2C0%2C0%2C1-.42676-.56348l2-14.50049A.49241.49241%2C0%2C0%2C1%2C6.2683.227a.4995.4995%2C0%2C0%2C1%2C.42676.56348l-2%2C14.50049A.49982.49982%2C0%2C0%2C1%2C4.20043%2C15.72258Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpath%20class%3D%22i%22%20d%3D%22M13.07062.66277A.55391.55391%2C0%2C0%2C0%2C12.59216.2a.5261.5261%2C0%2C0%2C0-.53333.4549l-2.513%2C8.61346L6.68512.6278a.48865.48865%2C0%2C0%2C1%2C.00995.16266L6.37059%2C2.86276%2C9.101%2C11.10332a.49483.49483%2C0%2C0%2C0%2C.4834.34277.50023.50023%2C0%2C0%2C0%2C.47119-.35937l2.34375-8.00879%2C1.68115%2C12.18652a.49939.49939%2C0%2C0%2C0%2C.49463.43164.47593.47593%2C0%2C0%2C0%2C.06885-.00488.4995.4995%2C0%2C0%2C0%2C.42676-.56348Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%3C%2Fsvg%3E",width:"36px"}))),ot.createElement("div",{className:"flex-container-v middle flex-1 sp-margin-l-left"},ot.createElement("span",{className:"summary-message sp-margin-s-bottom"},"Managed by Spinnaker"),ot.createElement(tn,{className:"resource-actions sp-margin-xs-bottom flex-pull-left",id:"server-group-managed-resource-dropdown",pullRight:!0},ot.createElement(tn.Toggle,{className:"btn btn-sm btn-default dropdown-toggle"},"Resource Actions"),ot.createElement(tn.Menu,{className:"dropdown-menu"},!t.isManagementPaused&&ot.createElement(an,{onClick:()=>sv(e,t)},a?"Resume ":"Pause "," Management"),t.isManagementPaused&&ot.createElement(an,{disabled:!0,onClick:e=>{const t=e.target,n=null==t?void 0:t.getAttribute("href");n&&(window.location.href=n)}},"Resume Management ",ot.createElement(_s,{content:r})),ot.createElement("li",null,ot.createElement("a",{onClick:()=>{Uv(e),jv("History",n)}},"History")),ot.createElement("li",null,ot.createElement("a",{target:"_blank",onClick:()=>jv("Raw Source",n),href:`${di.gateUrl}/managed/resources/${n}`},"Raw Source"))))))},Ov="spinnaker.core.managed.resourceDetailsIndicator.component";n(Ov,[]).component("managedResourceDetailsIndicator",yn(jl(Lv,"managedResourceDetailsIndicator"),["resourceSummary","application"]));const Yv=({resourceSummary:e})=>ot.createElement("a",{target:"_blank",onClick:()=>((e,t,n)=>Ui.log({category:"Managed Resource Status Indicator",action:`${e} clicked`,data:{label:`${t},${n}`}}))("Status docs link",e.id,e.status),href:`${Mv("resourceStatus")}#${e.status.toLowerCase().replace("_","-")}`},"Learn more"),$v={DELETING:{appearance:"warning",iconName:"mdActuating",popoverContents:()=>ot.createElement("p",null,ot.createElement("b",null,"Spinnaker is deleting this temporary managed resource"))},ACTUATING:{appearance:"info",iconName:"mdActuating",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker is taking action to resolve a difference from this resource's desired state.")),ot.createElement("p",null,"You can click History to see more. ",ot.createElement(Yv,{resourceSummary:e})))},CREATED:{appearance:"info",iconName:"mdCreated",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker has started managing this resource.")),ot.createElement("p",null,"If a difference from the desired state is detected, Spinnaker will act to correct it."," ",ot.createElement(Yv,{resourceSummary:e})))},DIFF:{appearance:"info",iconName:"mdDiff",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker detected a difference from the desired state.")),ot.createElement("p",null,"In a moment, Spinnaker will take action to bring this resource back to its desired state. You can click History to see more. ",ot.createElement(Yv,{resourceSummary:e})))},DIFF_NOT_ACTIONABLE:{appearance:"warning",iconName:"mdDiff",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker detected a difference from the desired state, but can't take action to resolve it.")),ot.createElement("p",null,"Spinnaker doesn't have a way of resolving this kind of difference. Manual action might be required. You can click History to see more. ",ot.createElement(Yv,{resourceSummary:e})))},CURRENTLY_UNRESOLVABLE:{appearance:"warning",iconName:"mdError",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Waiting for a temporary issue to pass.")),ot.createElement("p",null,"Something required for management is temporarily experiencing issues. Spinnaker can't take action right now, but should be able to soon. You can click History to see more."," ",ot.createElement(Yv,{resourceSummary:e})))},MISSING_DEPENDENCY:{appearance:"warning",iconName:"mdError",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Waiting for a missing dependency to become available.")),ot.createElement("p",null,"Something required for management isn't ready yet. Spinnaker can't take action right now, but will resume once the missing dependencies exist. You can click History to see more."," ",ot.createElement(Yv,{resourceSummary:e})))},ERROR:{appearance:"error",iconName:"mdError",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Something went wrong.")),ot.createElement("p",null,"Something went wrong while trying to check this resource's current state. Spinnaker can't take action right now, and manual intervention might be required. You can click History to see more."," ",ot.createElement(Yv,{resourceSummary:e})))},HAPPY:{appearance:"info",iconName:"md",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker is managing this resource.")),ot.createElement("p",null,"If a difference from the desired state is detected, Spinnaker will act to correct it."," ",ot.createElement(Yv,{resourceSummary:e})))},PAUSED:{appearance:"warning",iconName:"mdPaused",popoverContents:(e,t)=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Management is paused.")),t.isManagementPaused&&ot.createElement("p",null,"Spinnaker is configured to manage this resource, but management for the entire application is temporarily paused. ",ot.createElement(Yv,{resourceSummary:e})),!t.isManagementPaused&&ot.createElement("p",null,"Spinnaker is configured to manage this resource, but management has been temporarily paused."," ",ot.createElement(Yv,{resourceSummary:e})))},RESUMED:{appearance:"info",iconName:"mdResumed",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Management was just resumed.")),ot.createElement("p",null,"Management was resumed after being temporarily paused. If Spinnaker detects that a difference from the desired state occurred while paused, it will act to correct it. ",ot.createElement(Yv,{resourceSummary:e})))},UNHAPPY:{appearance:"error",iconName:"mdUnhappy",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker detected a difference from the desired state, but hasn't been able to correct it.")),ot.createElement("p",null,"Spinnaker has been trying to correct a difference, but taking action hasn't helped. Manual intervention might be required. You can click History to see more. ",ot.createElement(Yv,{resourceSummary:e})))},UNKNOWN:{appearance:"warning",iconName:"mdUnknown",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Unable to determine resource status.")),ot.createElement("p",null,"Spinnaker is configured to manage this resource, but can't calculate its current status."," ",ot.createElement(Yv,{resourceSummary:e})))},WAITING:{appearance:"info",iconName:"mdCreated",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Waiting for information.")),ot.createElement("p",null,"This resource is part of a brand new environment. Spinnaker is waiting for an artifact to become available to deploy. It normally takes less than 5 minutes for a newly created artifact to be seen, and after that all constraints need to pass in order for it to start deploying. You can click History to see a more detailed message. ",ot.createElement(Yv,{resourceSummary:e})))}},Hv=({resourceSummary:e,application:t,hidePopover:n})=>{const a=ot.createElement("button",{className:"passive flex-none",onClick:()=>{null==n||n(),Uv(e)}},ot.createElement("i",{className:"fa fa-history"})," History");return ot.createElement("div",{className:"horizontal right"},ot.createElement("p",{className:"flex-container-h middle sp-margin-m-top sp-margin-xs-bottom sp-group-margin-s-xaxis"},a,!e.isPaused&&ot.createElement("button",{className:"passive flex-none",onClick:()=>sv(e,t,n)},ot.createElement("i",{className:"fa fa-pause"})," Pause management of this resource"),e.isPaused&&!t.isManagementPaused&&ot.createElement("button",{className:"passive flex-none",onClick:()=>sv(e,t,n)},ot.createElement("i",{className:"fa fa-play"})," Resume management of this resource"),t.isManagementPaused&&ot.createElement(Dn,{to:"home.applications.application.config",params:{section:"managed-resources"}},ot.createElement("a",null,"Resume application management"))))},Vv=({application:e,children:t,placement:n,resourceSummary:a})=>{const{status:i}=a;return ot.createElement(qs,{Component:({hidePopover:t})=>ot.createElement(ot.Fragment,null,$v[i].popoverContents(a,e),ot.createElement(Hv,{resourceSummary:a,application:e,hidePopover:t})),delayHide:200,delayShow:200,placement:n},t)},Jv=({shape:e,resourceSummary:t,application:n})=>{const{status:a}=t;return ot.createElement("div",{className:"flex-container-h stretch ManagedResourceStatusIndicator"},ot.createElement(Vv,{application:n,placement:"left",resourceSummary:t},ot.createElement("div",{className:Cn("flex-container-h middle",e,$v[a].appearance)},ot.createElement(Bn,{appearance:"light",name:$v[a].iconName,size:"small"}))))},Wv="spinnaker.core.managed.dataSource";n(Wv,[]).run(["$q",e=>{if(!di.feature.managedResources)return;Hg.registerDataSource({key:"managedResources",visible:!1,loader:e=>fv.getApplicationSummary(e.name),onLoad:(t,n)=>(t.isManagementPaused=n.applicationPaused,e.when(n)),afterLoad:e=>{e.serverGroups.ready().then((()=>Ev(e)),qi),e.loadBalancers.ready().then((()=>bv(e)),qi),e.securityGroups.ready().then((()=>yv(e)),qi)},defaultData:{applicationPaused:!1,hasManagedResources:!1,resources:[]}}),Hg.registerDataSource({key:"environments",sref:".environments",category:Yf,optional:!0,optIn:!0,label:"Environments",icon:"fa fa-fw fa-xs fa-code-branch",iconName:"spEnvironments",description:"Artifacts and environments managed by Spinnaker",defaultData:{applicationPaused:!1,hasManagedResources:!1,environments:[],artifacts:[],resources:[]}})}]);const Kv=e=>e.current?{width:e.current.offsetWidth,height:e.current.offsetHeight}:{width:0,height:0},qv=(e,t)=>{const n=Ro();return ot.useCallback((a=>{Ui.log({...a,category:`MD__${e}`,action:(null==a?void 0:a.action)||t||"",data:{label:null==a?void 0:a.label,application:null==n?void 0:n.name,...null==a?void 0:a.data}})}),[null==n?void 0:n.name,e,t])},Xv=["listView","gridView"],Zv=localStorage.getItem("MD_environmentsDirection"),_v=ba({key:"environmentsDisplay",default:(eA=Zv,Boolean(eA&&Xv.includes(eA))?Zv:"gridView")});var eA;const tA=()=>{const[e,t]=Ca(_v);return ot.useEffect((()=>{localStorage.setItem("MD_environmentsDirection",e)}),[e]),{direction:e,setDirection:t}},nA=()=>{const{direction:e,setDirection:t}=tA(),n=qv("environmentsDirection");return ot.useEffect((()=>{n({action:e})}),[e]),ot.createElement("button",{type:"button",className:"btn env-direction-btn",onClick:()=>t((e=>"listView"===e?"gridView":"listView"))},"listView"===e?"Grid view":"List view",ot.createElement("i",{className:Cn("listView"===e?"fas fa-columns":"far fa-list-alt","sp-margin-xs-left")}))},aA=(e,t)=>{const{direction:n}=tA(),{width:a}=((e,{delay:t=100,isActive:n=!0})=>{const[a,i]=ot.useState(Kv(e));return ot.useLayoutEffect((()=>{const a=we((()=>{i(Kv(e))}),t,{leading:!0});if(n&&e.current){const t=new ResizeObserver(a);return t.observe(e.current),()=>t.disconnect()}return()=>{}}),[t,n,e.current]),a})(e,{isActive:"gridView"===n}),i=Math.min(Math.round(a/500),t.length);return{environments:"gridView"===n?xe(t):t,style:"gridView"===n?{gridTemplateColumns:`repeat(${i}, 1fr)`}:{},className:"gridView"===n?"grid-view":void 0}},iA=ot.forwardRef((({className:e,style:t,children:n},a)=>ot.createElement("div",{ref:a,className:Cn(e,"environments-list"),style:t},n)));oi(".HorizontalTabs {\n display: flex;\n flex-direction: row;\n width: 100%;\n border-bottom: 1px solid var(--color-alto);\n margin-bottom: var(--xl-spacing);\n}\n.HorizontalTabs .tab {\n background: none;\n border: none;\n padding: 0;\n min-width: 150px;\n max-width: 33%;\n padding: var(--xs-spacing) var(--m-spacing);\n font-weight: 600;\n letter-spacing: 0.2px;\n border-bottom: 3px solid transparent;\n color: var(--color-concrete);\n text-align: center;\n}\n@media (max-width: 768px) {\n .HorizontalTabs .tab {\n min-width: 80px;\n }\n}\n.HorizontalTabs .tab:focus:active {\n text-decoration: none;\n}\n.HorizontalTabs .tab:hover {\n text-decoration: none;\n color: var(--color-dovegray);\n border-bottom: 3px solid var(--color-accent-g2);\n}\n.HorizontalTabs .tab.selected-tab {\n border-bottom: 3px solid var(--color-accent);\n color: var(--color-black);\n}\n.HorizontalTabs .right-element {\n margin-left: auto;\n align-self: center;\n}\n");const rA=({tabs:e,className:t,onClick:n,rightElement:a})=>ot.createElement("div",{className:Cn(t,"HorizontalTabs")},e.map((e=>ot.createElement(sA,{key:e.path,data:e,onClick:n}))),a&&ot.createElement("div",{className:"right-element"},a)),sA=({data:e,onClick:t})=>{const n=Pn(e.path,{},"selected-tab");return ot.createElement("a",{href:n.href,className:Cn("tab",n.className),onClick:a=>{n.onClick(a),null==t||t(e)}},e.title)},oA="MD_debug",lA="1",cA=()=>localStorage.getItem(oA)===lA,pA=e=>{e?localStorage.setItem(oA,lA):localStorage.removeItem(oA)};oi(".Environments {\n width: 100%;\n padding: 0 var(--l-spacing);\n --base-horizontal-padding: 20px;\n}\n@media (max-width: 768px) {\n .Environments {\n padding: 0;\n --base-horizontal-padding: var(--m-spacing);\n }\n}\n.Environments a,\n.Environments .btn-link {\n color: var(--color-text-link-g1);\n}\n.Environments a:focus,\n.Environments .btn-link:focus,\n.Environments a:active,\n.Environments .btn-link:active {\n outline: none;\n box-shadow: none;\n}\n.Environments a:focus:active,\n.Environments .btn-link:focus:active {\n outline: none;\n box-shadow: none;\n}\n.Environments .env-direction-btn {\n display: flex;\n flex-direction: row;\n align-items: center;\n line-height: 1;\n padding: var(--xs-spacing);\n background-color: transparent;\n color: var(--color-dovegray);\n}\n.Environments .env-direction-btn > i {\n margin-top: 1px;\n font-size: 16px;\n}\n.Environments .env-direction-btn:focus,\n.Environments .env-direction-btn:active:focus {\n outline: none;\n}\n@media (max-width: 768px) {\n .Environments .env-direction-btn {\n display: none;\n }\n}\n.Environments .environments-list {\n width: 100%;\n display: grid;\n gap: var(--m-spacing);\n align-items: flex-start;\n --row-element-icon-width: 32px;\n}\n.Environments .environments-list.grid-view {\n gap: var(--xl-spacing) var(--m-spacing);\n --row-element-icon-width: 26px;\n}\n.ui-switcher {\n background-color: var(--color-white);\n padding: var(--xs-spacing) var(--s-spacing);\n position: absolute;\n border-radius: 4px;\n border: 1px solid var(--color-alto);\n bottom: 4px;\n right: 30px;\n}\n@media (max-width: 768px) {\n .ui-switcher {\n right: 8px;\n }\n}\n");oi(".Environments .environment-row-element,\n.ActionModal .environment-row-element {\n display: grid;\n grid-template-columns: [icon] var(--row-element-icon-width) [details] 1fr;\n position: relative;\n}\n.Environments .environment-row-element.with-padding,\n.ActionModal .environment-row-element.with-padding {\n padding: var(--l-spacing) var(--base-horizontal-padding) var(--s-spacing) var(--base-horizontal-padding);\n}\n@media (max-width: 768px) {\n .Environments .environment-row-element,\n .ActionModal .environment-row-element {\n grid-template-columns: [icon] 30px [details] 1fr;\n }\n}\n.Environments .environment-row-element .no-items-message,\n.ActionModal .environment-row-element .no-items-message {\n grid-column: 1 / 3;\n}\n.Environments .environment-row-element .row-details,\n.ActionModal .environment-row-element .row-details {\n grid-column: details;\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n.Environments .environment-row-element .row-icon,\n.ActionModal .environment-row-element .row-icon {\n grid-column: icon;\n display: flex;\n align-self: flex-start;\n padding-top: var(--2xs-spacing);\n}\n.Environments .environment-row-element .row-icon.small,\n.ActionModal .environment-row-element .row-icon.small {\n padding-top: var(--3xs-spacing);\n}\n.Environments .environment-row-element .row-title,\n.ActionModal .environment-row-element .row-title {\n font-size: 18px;\n font-weight: 600;\n line-height: 1.3;\n color: var(--color-charcoal);\n display: grid;\n grid-template-columns: 1fr auto;\n}\n.Environments .environment-row-element .row-title.small,\n.ActionModal .environment-row-element .row-title.small {\n font-size: 14px;\n}\n.Environments .environment-row-element .row-title > a,\n.ActionModal .environment-row-element .row-title > a {\n color: inherit;\n}\n.Environments .md-icon-success,\n.ActionModal .md-icon-success {\n color: var(--color-status-success);\n}\n.Environments .md-icon-pending,\n.ActionModal .md-icon-pending {\n color: var(--color-titanium);\n}\n.Environments .md-icon-fail,\n.ActionModal .md-icon-fail {\n color: var(--color-status-error);\n}\n.Environments .delimited-element:not(:last-child),\n.ActionModal .delimited-element:not(:last-child) {\n margin-right: 6px;\n}\n.Environments .delimited-element:not(:first-child)::before,\n.ActionModal .delimited-element:not(:first-child)::before {\n content: 'β’';\n margin-right: 6px;\n}\n.Environments .delimited-elements > *:not(:last-child),\n.ActionModal .delimited-elements > *:not(:last-child) {\n margin-right: 6px;\n}\n.Environments .delimited-elements > *:not(:first-child)::before,\n.ActionModal .delimited-elements > *:not(:first-child)::before {\n content: 'β’';\n margin-right: 6px;\n}\n.Environments .truncate,\n.ActionModal .truncate {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.Environments button.md-btn,\n.ActionModal button.md-btn {\n background-color: transparent;\n box-shadow: 1px 2px 2px 0px rgba(0, 0, 0, 0.06), 0px 1px 3px 0px rgba(0, 0, 0, 0.03);\n}\n.Environments button.md-btn:hover,\n.ActionModal button.md-btn:hover {\n background-color: var(--color-cirrus);\n}\n.Environments button.md-btn:active,\n.ActionModal button.md-btn:active,\n.Environments button.md-btn:focus,\n.ActionModal button.md-btn:focus {\n outline: none;\n}\n.Environments button.md-btn-accent,\n.ActionModal button.md-btn-accent,\n.Environments button.md-btn-accent:hover,\n.ActionModal button.md-btn-accent:hover {\n color: var(--color-accent);\n border-color: var(--color-accent);\n}\n.Environments button.md-btn-success,\n.ActionModal button.md-btn-success,\n.Environments button.md-btn-success:hover,\n.ActionModal button.md-btn-success:hover {\n color: var(--color-validation-success);\n border-color: var(--color-validation-success);\n}\n.Environments button.md-btn-danger,\n.ActionModal button.md-btn-danger,\n.Environments button.md-btn-danger:hover,\n.ActionModal button.md-btn-danger:hover {\n color: var(--color-danger);\n border: 1px solid var(--color-danger);\n}\n.Environments .md-action-button,\n.ActionModal .md-action-button {\n padding: 0 var(--xs-spacing);\n text-transform: uppercase;\n color: inherit;\n font-size: 12px;\n font-weight: 500;\n padding: 2px var(--s-spacing);\n color: var(--color-primary-g1);\n letter-spacing: 0.2px;\n}\n.Environments .md-action-button:hover,\n.ActionModal .md-action-button:hover {\n background-color: var(--color-alabaster);\n}\n.Environments .no-underline,\n.ActionModal .no-underline {\n text-decoration: none;\n}\n.Environments .md-actions-gap,\n.ActionModal .md-actions-gap {\n gap: var(--s-spacing);\n}\n.Environments .in-progress-dot,\n.ActionModal .in-progress-dot {\n height: 8px;\n width: 8px;\n border-radius: 999px;\n display: flex;\n -webkit-animation: deployingAnimation 2s infinite;\n animation: deployingAnimation 2s infinite;\n}\n@-webkit-keyframes deployingAnimation {\n 0% {\n background-color: var(--color-status-success);\n }\n 50% {\n background-color: var(--color-status-success-light);\n }\n 100% {\n background-color: var(--color-status-success);\n }\n}\n@keyframes deployingAnimation {\n 0% {\n background-color: var(--color-status-success);\n }\n 50% {\n background-color: var(--color-status-success-light);\n }\n 100% {\n background-color: var(--color-status-success);\n }\n}\n@-webkit-keyframes deletingAnimation {\n 0% {\n background-color: var(--color-danger);\n }\n 50% {\n background-color: var(--color-danger-medium);\n }\n 100% {\n background-color: var(--color-danger);\n }\n}\n@keyframes deletingAnimation {\n 0% {\n background-color: var(--color-danger);\n }\n 50% {\n background-color: var(--color-danger-medium);\n }\n 100% {\n background-color: var(--color-danger);\n }\n}\n");const dA=Object.entries({overview:"Overview",history:"History",config:"Configuration"}).map((([e,t])=>({title:t,path:`.${e}`}))),uA=()=>{var e;const t=qv("EnvironmentsTab"),{state:n,params:a}=Tn();return ot.useEffect((()=>{"enabled"===a.md_debug?pA(!0):"disabled"===a.md_debug&&pA(!1)}),[a]),ot.createElement("div",{className:"vertical Environments"},ot.createElement(rA,{tabs:dA,rightElement:(null==(e=n.name)?void 0:e.endsWith(".config"))?void 0:ot.createElement(nA,null),onClick:({title:e,path:n})=>{t({action:`Open_${e}`,data:{path:n}})}}),ot.createElement(Qn,null),ot.createElement("div",{style:{minHeight:32,minWidth:32}}))},mA=()=>{const e=Mv("gettingStarted");return ot.createElement("div",{style:{width:"100%"}},"Welcome! This application does not have any environments or artifacts. Check out the"," ",ot.createElement("a",{href:e,target:"_blank"},"getting started guide")," ","to set some up!")},gA=({hasApplicationData:e,error:t})=>{const n=qv("Error","AppQuery");return ot.useEffect((()=>{t&&e&&n({level:"ERROR",error:t})}),[t,n,e]),e?ot.createElement("div",{style:{width:"100%"}},"Failed to load application data, please refresh and try again.",ot.createElement("p",null,t.message)):ot.createElement(mA,null)},hA={},fA=Aa`
|
|
2
2
|
fragment actionDetails on MdAction {
|
|
3
3
|
id
|
|
4
4
|
actionId
|