1import __buffer_polyfill from "/node_modules/.vite/deps/vite-plugin-node-polyfills_shims_buffer.js?v=bf763330"; 2globalThis.Buffer = globalThis.Buffer || __buffer_polyfill; 3import __global_polyfill from "/node_modules/.vite/deps/vite-plugin-node-polyfills_shims_global.js?v=bf763330"; 4globalThis.global = globalThis.global || __global_polyfill; 5import __process_polyfill from "/node_modules/.vite/deps/vite-plugin-node-polyfills_shims_process.js?v=bf763330"; 6globalThis.process = globalThis.process || __process_polyfill; 7import { 8 Provider_default, 9 ReactReduxContext, 10 batch, 11 shallowEqual, 12 useDispatch, 13 useSelector, 14 useStore 15} from "/node_modules/.vite/deps/chunk-4X6NLOIN.js?v=bf763330"; 16import { 17 NamedSchemaError, 18 QueryStatus, 19 _NEVER, 20 buildCreateApi, 21 copyWithStructuralSharing, 22 coreModule, 23 coreModuleName, 24 defaultSerializeQueryArgs, 25 fakeBaseQuery, 26 fetchBaseQuery, 27 retry, 28 setupListeners, 29 skipToken 30} from "/node_modules/.vite/deps/chunk-WO3AQFYS.js?v=bf763330"; 31import { 32 configureStore, 33 createSelector, 34 formatProdErrorMessage 35} from "/node_modules/.vite/deps/chunk-2ICND253.js?v=bf763330"; 36import { 37 require_react 38} from "/node_modules/.vite/deps/chunk-OLCRR3H2.js?v=bf763330"; 39import { 40 __toESM, 41 require_dist, 42 require_dist2, 43 require_dist3 44} from "/node_modules/.vite/deps/chunk-CURNFZRR.js?v=bf763330"; 45var import_dist = __toESM(require_dist(), 1); 46var import_dist2 = __toESM(require_dist2(), 1); 47var import_dist3 = __toESM(require_dist3(), 1); 48var import_react = __toESM(require_react(), 1); 49var React = __toESM(require_react(), 1); 50function capitalize(str) { 51 return str.replace(str[0], str[0].toUpperCase()); 52} 53function countObjectKeys(obj) { 54 let count = 0; 55 for (const _key in obj) { 56 count++; 57 } 58 return count; 59} 60var ENDPOINT_QUERY = "query"; 61var ENDPOINT_MUTATION = "mutation"; 62var ENDPOINT_INFINITEQUERY = "infinitequery"; 63function isQueryDefinition(e) { 64 return e.type === ENDPOINT_QUERY; 65} 66function isMutationDefinition(e) { 67 return e.type === ENDPOINT_MUTATION; 68} 69function isInfiniteQueryDefinition(e) { 70 return e.type === ENDPOINT_INFINITEQUERY; 71} 72function safeAssign(target, ...args) { 73 return Object.assign(target, ...args); 74} 75var UNINITIALIZED_VALUE = Symbol(); 76function useStableQueryArgs(queryArgs) { 77 const cache = (0, import_react.useRef)(queryArgs); 78 const copy = (0, import_react.useMemo)(() => copyWithStructuralSharing(cache.current, queryArgs), [queryArgs]); 79 (0, import_react.useEffect)(() => { 80 if (cache.current !== copy) { 81 cache.current = copy; 82 } 83 }, [copy]); 84 return copy; 85} 86function useShallowStableValue(value) { 87 const cache = (0, import_react.useRef)(value); 88 (0, import_react.useEffect)(() => { 89 if (!shallowEqual(cache.current, value)) { 90 cache.current = value; 91 } 92 }, [value]); 93 return shallowEqual(cache.current, value) ? cache.current : value; 94} 95var canUseDOM = () => !!(typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined"); 96var isDOM = canUseDOM(); 97var isRunningInReactNative = () => typeof navigator !== "undefined" && navigator.product === "ReactNative"; 98var isReactNative = isRunningInReactNative(); 99var getUseIsomorphicLayoutEffect = () => isDOM || isReactNative ? import_react.useLayoutEffect : import_react.useEffect; 100var useIsomorphicLayoutEffect = getUseIsomorphicLayoutEffect(); 101var noPendingQueryStateSelector = (selected) => { 102 if (selected.isUninitialized) { 103 return { 104 ...selected, 105 isUninitialized: false, 106 isFetching: true, 107 isLoading: selected.data !== void 0 ? false : true, 108 // This is the one place where we still have to use `QueryStatus` as an enum, 109 // since it's the only reference in the React package and not in the core. 110 status: QueryStatus.pending 111 }; 112 } 113 return selected; 114}; 115function pick(obj, ...keys) { 116 const ret = {}; 117 keys.forEach((key) => { 118 ret[key] = obj[key]; 119 }); 120 return ret; 121} 122var COMMON_HOOK_DEBUG_FIELDS = ["data", "status", "isLoading", "isSuccess", "isError", "error"]; 123function buildHooks({ 124 api, 125 moduleOptions: { 126 batch: batch2, 127 hooks: { 128 useDispatch: useDispatch2, 129 useSelector: useSelector2, 130 useStore: useStore2 131 }, 132 unstable__sideEffectsInRender, 133 createSelector: createSelector2 134 }, 135 serializeQueryArgs, 136 context 137}) { 138 const usePossiblyImmediateEffect = unstable__sideEffectsInRender ? (cb) => cb() : import_react.useEffect; 139 const unsubscribePromiseRef = (ref) => { 140 var _a, _b; 141 return (_b = (_a = ref.current) == null ? void 0 : _a.unsubscribe) == null ? void 0 : _b.call(_a); 142 }; 143 const endpointDefinitions = context.endpointDefinitions; 144 return { 145 buildQueryHooks, 146 buildInfiniteQueryHooks, 147 buildMutationHook, 148 usePrefetch 149 }; 150 function queryStatePreSelector(currentState, lastResult, queryArgs) { 151 if ((lastResult == null ? void 0 : lastResult.endpointName) && currentState.isUninitialized) { 152 const { 153 endpointName 154 } = lastResult; 155 const endpointDefinition = endpointDefinitions[endpointName]; 156 if (queryArgs !== skipToken && serializeQueryArgs({ 157 queryArgs: lastResult.originalArgs, 158 endpointDefinition, 159 endpointName 160 }) === serializeQueryArgs({ 161 queryArgs, 162 endpointDefinition, 163 endpointName 164 })) lastResult = void 0; 165 } 166 let data = currentState.isSuccess ? currentState.data : lastResult == null ? void 0 : lastResult.data; 167 if (data === void 0) data = currentState.data; 168 const hasData = data !== void 0; 169 const isFetching = currentState.isLoading; 170 const isLoading = (!lastResult || lastResult.isLoading || lastResult.isUninitialized) && !hasData && isFetching; 171 const isSuccess = currentState.isSuccess || hasData && (isFetching && !(lastResult == null ? void 0 : lastResult.isError) || currentState.isUninitialized); 172 return { 173 ...currentState, 174 data, 175 currentData: currentState.data, 176 isFetching, 177 isLoading, 178 isSuccess 179 }; 180 } 181 function infiniteQueryStatePreSelector(currentState, lastResult, queryArgs) { 182 if ((lastResult == null ? void 0 : lastResult.endpointName) && currentState.isUninitialized) { 183 const { 184 endpointName 185 } = lastResult; 186 const endpointDefinition = endpointDefinitions[endpointName]; 187 if (queryArgs !== skipToken && serializeQueryArgs({ 188 queryArgs: lastResult.originalArgs, 189 endpointDefinition, 190 endpointName 191 }) === serializeQueryArgs({ 192 queryArgs, 193 endpointDefinition, 194 endpointName 195 })) lastResult = void 0; 196 } 197 let data = currentState.isSuccess ? currentState.data : lastResult == null ? void 0 : lastResult.data; 198 if (data === void 0) data = currentState.data; 199 const hasData = data !== void 0; 200 const isFetching = currentState.isLoading; 201 const isLoading = (!lastResult || lastResult.isLoading || lastResult.isUninitialized) && !hasData && isFetching; 202 const isSuccess = currentState.isSuccess || isFetching && hasData; 203 return { 204 ...currentState, 205 data, 206 currentData: currentState.data, 207 isFetching, 208 isLoading, 209 isSuccess 210 }; 211 } 212 function usePrefetch(endpointName, defaultOptions) { 213 const dispatch = useDispatch2(); 214 const stableDefaultOptions = useShallowStableValue(defaultOptions); 215 return (0, import_react.useCallback)((arg, options) => dispatch(api.util.prefetch(endpointName, arg, { 216 ...stableDefaultOptions, 217 ...options 218 })), [endpointName, dispatch, stableDefaultOptions]); 219 } 220 function useQuerySubscriptionCommonImpl(endpointName, arg, { 221 refetchOnReconnect, 222 refetchOnFocus, 223 refetchOnMountOrArgChange, 224 skip = false, 225 pollingInterval = 0, 226 skipPollingIfUnfocused = false, 227 ...rest 228 } = {}) { 229 const { 230 initiate 231 } = api.endpoints[endpointName]; 232 const dispatch = useDispatch2(); 233 const subscriptionSelectorsRef = (0, import_react.useRef)(void 0); 234 if (!subscriptionSelectorsRef.current) { 235 const returnedValue = dispatch(api.internalActions.internal_getRTKQSubscriptions()); 236 if (true) { 237 if (typeof returnedValue !== "object" || typeof (returnedValue == null ? void 0 : returnedValue.type) === "string") { 238 throw new Error(false ? formatProdErrorMessage(37) : `Warning: Middleware for RTK-Query API at reducerPath "${api.reducerPath}" has not been added to the store. 239 You must add the middleware for RTK-Query to function correctly!`); 240 } 241 } 242 subscriptionSelectorsRef.current = returnedValue; 243 } 244 const stableArg = useStableQueryArgs(skip ? skipToken : arg); 245 const stableSubscriptionOptions = useShallowStableValue({ 246 refetchOnReconnect, 247 refetchOnFocus, 248 pollingInterval, 249 skipPollingIfUnfocused 250 }); 251 const initialPageParam = rest.initialPageParam; 252 const stableInitialPageParam = useShallowStableValue(initialPageParam); 253 const refetchCachedPages = rest.refetchCachedPages; 254 const stableRefetchCachedPages = useShallowStableValue(refetchCachedPages); 255 const promiseRef = (0, import_react.useRef)(void 0); 256 let { 257 queryCacheKey, 258 requestId 259 } = promiseRef.current || {};
vendor: 6,112 bytes, lines 260-403
260 let currentRenderHasSubscription = false; 261 if (queryCacheKey && requestId) { 262 currentRenderHasSubscription = subscriptionSelectorsRef.current.isRequestSubscribed(queryCacheKey, requestId); 263 } 264 const subscriptionRemoved = !currentRenderHasSubscription && promiseRef.current !== void 0; 265 usePossiblyImmediateEffect(() => { 266 if (subscriptionRemoved) { 267 promiseRef.current = void 0; 268 } 269 }, [subscriptionRemoved]); 270 usePossiblyImmediateEffect(() => { 271 var _a; 272 const lastPromise = promiseRef.current; 273 if (typeof process !== "undefined" && false) { 274 console.log(subscriptionRemoved); 275 } 276 if (stableArg === skipToken) { 277 lastPromise == null ? void 0 : lastPromise.unsubscribe(); 278 promiseRef.current = void 0; 279 return; 280 } 281 const lastSubscriptionOptions = (_a = promiseRef.current) == null ? void 0 : _a.subscriptionOptions; 282 if (!lastPromise || lastPromise.arg !== stableArg) { 283 lastPromise == null ? void 0 : lastPromise.unsubscribe(); 284 const promise = dispatch(initiate(stableArg, { 285 subscriptionOptions: stableSubscriptionOptions, 286 forceRefetch: refetchOnMountOrArgChange, 287 ...isInfiniteQueryDefinition(endpointDefinitions[endpointName]) ? { 288 initialPageParam: stableInitialPageParam, 289 refetchCachedPages: stableRefetchCachedPages 290 } : {} 291 })); 292 promiseRef.current = promise; 293 } else if (stableSubscriptionOptions !== lastSubscriptionOptions) { 294 lastPromise.updateSubscriptionOptions(stableSubscriptionOptions); 295 } 296 }, [dispatch, initiate, refetchOnMountOrArgChange, stableArg, stableSubscriptionOptions, subscriptionRemoved, stableInitialPageParam, stableRefetchCachedPages, endpointName]); 297 return [promiseRef, dispatch, initiate, stableSubscriptionOptions]; 298 } 299 function buildUseQueryState(endpointName, preSelector) { 300 const useQueryState = (arg, { 301 skip = false, 302 selectFromResult 303 } = {}) => { 304 const { 305 select 306 } = api.endpoints[endpointName]; 307 const stableArg = useStableQueryArgs(skip ? skipToken : arg); 308 const lastValue = (0, import_react.useRef)(void 0); 309 const selectDefaultResult = (0, import_react.useMemo)(() => ( 310 // Normally ts-ignores are bad and should be avoided, but we're 311 // already casting this selector to be `Selector<any>` anyway, 312 // so the inconsistencies don't matter here 313 // @ts-ignore 314 createSelector2([ 315 // @ts-ignore 316 select(stableArg), 317 (_, lastResult) => lastResult, 318 (_) => stableArg 319 ], preSelector, { 320 memoizeOptions: { 321 resultEqualityCheck: shallowEqual 322 } 323 }) 324 ), [select, stableArg]); 325 const querySelector = (0, import_react.useMemo)(() => selectFromResult ? createSelector2([selectDefaultResult], selectFromResult, { 326 devModeChecks: { 327 identityFunctionCheck: "never" 328 } 329 }) : selectDefaultResult, [selectDefaultResult, selectFromResult]); 330 const currentState = useSelector2((state) => querySelector(state, lastValue.current), shallowEqual); 331 const store = useStore2(); 332 const newLastValue = selectDefaultResult(store.getState(), lastValue.current); 333 useIsomorphicLayoutEffect(() => { 334 lastValue.current = newLastValue; 335 }, [newLastValue]); 336 return currentState; 337 }; 338 return useQueryState; 339 } 340 function usePromiseRefUnsubscribeOnUnmount(promiseRef) { 341 (0, import_react.useEffect)(() => { 342 return () => { 343 unsubscribePromiseRef(promiseRef); 344 promiseRef.current = void 0; 345 }; 346 }, [promiseRef]); 347 } 348 function refetchOrErrorIfUnmounted(promiseRef) { 349 if (!promiseRef.current) throw new Error(false ? formatProdErrorMessage(38) : "Cannot refetch a query that has not been started yet."); 350 return promiseRef.current.refetch(); 351 } 352 function buildQueryHooks(endpointName) { 353 const useQuerySubscription = (arg, options = {}) => { 354 const [promiseRef] = useQuerySubscriptionCommonImpl(endpointName, arg, options); 355 usePromiseRefUnsubscribeOnUnmount(promiseRef); 356 return (0, import_react.useMemo)(() => ({ 357 /** 358 * A method to manually refetch data for the query 359 */ 360 refetch: () => refetchOrErrorIfUnmounted(promiseRef) 361 }), [promiseRef]); 362 }; 363 const useLazyQuerySubscription = ({ 364 refetchOnReconnect, 365 refetchOnFocus, 366 pollingInterval = 0, 367 skipPollingIfUnfocused = false 368 } = {}) => { 369 const { 370 initiate 371 } = api.endpoints[endpointName]; 372 const dispatch = useDispatch2(); 373 const [arg, setArg] = (0, import_react.useState)(UNINITIALIZED_VALUE); 374 const promiseRef = (0, import_react.useRef)(void 0); 375 const stableSubscriptionOptions = useShallowStableValue({ 376 refetchOnReconnect, 377 refetchOnFocus, 378 pollingInterval, 379 skipPollingIfUnfocused 380 }); 381 usePossiblyImmediateEffect(() => { 382 var _a, _b; 383 const lastSubscriptionOptions = (_a = promiseRef.current) == null ? void 0 : _a.subscriptionOptions; 384 if (stableSubscriptionOptions !== lastSubscriptionOptions) { 385 (_b = promiseRef.current) == null ? void 0 : _b.updateSubscriptionOptions(stableSubscriptionOptions); 386 } 387 }, [stableSubscriptionOptions]); 388 const subscriptionOptionsRef = (0, import_react.useRef)(stableSubscriptionOptions); 389 usePossiblyImmediateEffect(() => { 390 subscriptionOptionsRef.current = stableSubscriptionOptions; 391 }, [stableSubscriptionOptions]); 392 const trigger = (0, import_react.useCallback)(function(arg2, preferCacheValue = false) { 393 let promise; 394 batch2(() => { 395 unsubscribePromiseRef(promiseRef); 396 promiseRef.current = promise = dispatch(initiate(arg2, { 397 subscriptionOptions: subscriptionOptionsRef.current, 398 forceRefetch: !preferCacheValue 399 })); 400 setArg(arg2); 401 }); 402 return promise; 403 }
vendor: 6,082 bytes, lines 403-556
403, [dispatch, initiate]); 404 const reset = (0, import_react.useCallback)(() => { 405 var _a, _b; 406 if ((_a = promiseRef.current) == null ? void 0 : _a.queryCacheKey) { 407 dispatch(api.internalActions.removeQueryResult({ 408 queryCacheKey: (_b = promiseRef.current) == null ? void 0 : _b.queryCacheKey 409 })); 410 } 411 }, [dispatch]); 412 (0, import_react.useEffect)(() => { 413 return () => { 414 unsubscribePromiseRef(promiseRef); 415 }; 416 }, []); 417 (0, import_react.useEffect)(() => { 418 if (arg !== UNINITIALIZED_VALUE && !promiseRef.current) { 419 trigger(arg, true); 420 } 421 }, [arg, trigger]); 422 return (0, import_react.useMemo)(() => [trigger, arg, { 423 reset 424 }], [trigger, arg, reset]); 425 }; 426 const useQueryState = buildUseQueryState(endpointName, queryStatePreSelector); 427 return { 428 useQueryState, 429 useQuerySubscription, 430 useLazyQuerySubscription, 431 useLazyQuery(options) { 432 const [trigger, arg, { 433 reset 434 }] = useLazyQuerySubscription(options); 435 const queryStateResults = useQueryState(arg, { 436 ...options, 437 skip: arg === UNINITIALIZED_VALUE 438 }); 439 const info = (0, import_react.useMemo)(() => ({ 440 lastArg: arg 441 }), [arg]); 442 return (0, import_react.useMemo)(() => [trigger, { 443 ...queryStateResults, 444 reset 445 }, info], [trigger, queryStateResults, reset, info]); 446 }, 447 useQuery(arg, options) { 448 const querySubscriptionResults = useQuerySubscription(arg, options); 449 const queryStateResults = useQueryState(arg, { 450 selectFromResult: arg === skipToken || (options == null ? void 0 : options.skip) ? void 0 : noPendingQueryStateSelector, 451 ...options 452 }); 453 const debugValue = pick(queryStateResults, ...COMMON_HOOK_DEBUG_FIELDS); 454 (0, import_react.useDebugValue)(debugValue); 455 return (0, import_react.useMemo)(() => ({ 456 ...queryStateResults, 457 ...querySubscriptionResults 458 }), [queryStateResults, querySubscriptionResults]); 459 } 460 }; 461 } 462 function buildInfiniteQueryHooks(endpointName) { 463 const useInfiniteQuerySubscription = (arg, options = {}) => { 464 const [promiseRef, dispatch, initiate, stableSubscriptionOptions] = useQuerySubscriptionCommonImpl(endpointName, arg, options); 465 const subscriptionOptionsRef = (0, import_react.useRef)(stableSubscriptionOptions); 466 usePossiblyImmediateEffect(() => { 467 subscriptionOptionsRef.current = stableSubscriptionOptions; 468 }, [stableSubscriptionOptions]); 469 const hookRefetchCachedPages = options.refetchCachedPages; 470 const stableHookRefetchCachedPages = useShallowStableValue(hookRefetchCachedPages); 471 const trigger = (0, import_react.useCallback)(function(arg2, direction) { 472 let promise; 473 batch2(() => { 474 unsubscribePromiseRef(promiseRef); 475 promiseRef.current = promise = dispatch(initiate(arg2, { 476 subscriptionOptions: subscriptionOptionsRef.current, 477 direction 478 })); 479 }); 480 return promise; 481 }, [promiseRef, dispatch, initiate]); 482 usePromiseRefUnsubscribeOnUnmount(promiseRef); 483 const stableArg = useStableQueryArgs(options.skip ? skipToken : arg); 484 const refetch = (0, import_react.useCallback)((options2) => { 485 if (!promiseRef.current) throw new Error(false ? formatProdErrorMessage(38) : "Cannot refetch a query that has not been started yet."); 486 const mergedOptions = { 487 refetchCachedPages: (options2 == null ? void 0 : options2.refetchCachedPages) ?? stableHookRefetchCachedPages 488 }; 489 return promiseRef.current.refetch(mergedOptions); 490 }, [promiseRef, stableHookRefetchCachedPages]); 491 return (0, import_react.useMemo)(() => { 492 const fetchNextPage = () => { 493 return trigger(stableArg, "forward"); 494 }; 495 const fetchPreviousPage = () => { 496 return trigger(stableArg, "backward"); 497 }; 498 return { 499 trigger, 500 /** 501 * A method to manually refetch data for the query 502 */ 503 refetch, 504 fetchNextPage, 505 fetchPreviousPage 506 }; 507 }, [refetch, trigger, stableArg]); 508 }; 509 const useInfiniteQueryState = buildUseQueryState(endpointName, infiniteQueryStatePreSelector); 510 return { 511 useInfiniteQueryState, 512 useInfiniteQuerySubscription, 513 useInfiniteQuery(arg, options) { 514 const { 515 refetch, 516 fetchNextPage, 517 fetchPreviousPage 518 } = useInfiniteQuerySubscription(arg, options); 519 const queryStateResults = useInfiniteQueryState(arg, { 520 selectFromResult: arg === skipToken || (options == null ? void 0 : options.skip) ? void 0 : noPendingQueryStateSelector, 521 ...options 522 }); 523 const debugValue = pick(queryStateResults, ...COMMON_HOOK_DEBUG_FIELDS, "hasNextPage", "hasPreviousPage"); 524 (0, import_react.useDebugValue)(debugValue); 525 return (0, import_react.useMemo)(() => ({ 526 ...queryStateResults, 527 fetchNextPage, 528 fetchPreviousPage, 529 refetch 530 }), [queryStateResults, fetchNextPage, fetchPreviousPage, refetch]); 531 } 532 }; 533 } 534 function buildMutationHook(name) { 535 return ({ 536 selectFromResult, 537 fixedCacheKey 538 } = {}) => { 539 const { 540 select, 541 initiate 542 } = api.endpoints[name]; 543 const dispatch = useDispatch2(); 544 const [promise, setPromise] = (0, import_react.useState)(); 545 (0, import_react.useEffect)(() => () => { 546 if (!(promise == null ? void 0 : promise.arg.fixedCacheKey)) { 547 promise == null ? void 0 : promise.reset(); 548 } 549 }, [promise]); 550 const triggerMutation = (0, import_react.useCallback)(function(arg) { 551 const promise2 = dispatch(initiate(arg, { 552 fixedCacheKey 553 })); 554 setPromise(promise2); 555 return promise2; 556 }
556, [dispatch, initiate, fixedCacheKey]); 557 const { 558 requestId 559 } = promise || {}; 560 const selectDefaultResult = (0, import_react.useMemo)(() => select({ 561 fixedCacheKey, 562 requestId: promise == null ? void 0 : promise.requestId 563 }), [fixedCacheKey, promise, select]); 564 const mutationSelector = (0, import_react.useMemo)(() => selectFromResult ? createSelector2([selectDefaultResult], selectFromResult) : selectDefaultResult, [selectFromResult, selectDefaultResult]); 565 const currentState = useSelector2(mutationSelector, shallowEqual); 566 const originalArgs = fixedCacheKey == null ? promise == null ? void 0 : promise.arg.originalArgs : void 0; 567 const reset = (0, import_react.useCallback)(() => { 568 batch2(() => { 569 if (promise) { 570 setPromise(void 0); 571 } 572 if (fixedCacheKey) { 573 dispatch(api.internalActions.removeMutationResult({ 574 requestId, 575 fixedCacheKey 576 })); 577 } 578 }); 579 }, [dispatch, fixedCacheKey, promise, requestId]); 580 const debugValue = pick(currentState, ...COMMON_HOOK_DEBUG_FIELDS, "endpointName"); 581 (0, import_react.useDebugValue)(debugValue); 582 const finalState = (0, import_react.useMemo)(() => ({ 583 ...currentState, 584 originalArgs, 585 reset 586 }), [currentState, originalArgs, reset]); 587 return (0, import_react.useMemo)(() => [triggerMutation, finalState], [triggerMutation, finalState]); 588 }; 589 } 590} 591var reactHooksModuleName = Symbol(); 592var reactHooksModule = ({ 593 batch: batch2 = batch, 594 hooks = { 595 useDispatch, 596 useSelector, 597 useStore 598 }, 599 createSelector: createSelector2 = createSelector, 600 unstable__sideEffectsInRender = false, 601 ...rest 602} = {}) => { 603 if (true) { 604 const hookNames = ["useDispatch", "useSelector", "useStore"]; 605 let warned = false; 606 for (const hookName of hookNames) { 607 if (countObjectKeys(rest) > 0) { 608 if (rest[hookName]) { 609 if (!warned) { 610 console.warn("As of RTK 2.0, the hooks now need to be specified as one object, provided under a `hooks` key:\n`reactHooksModule({ hooks: { useDispatch, useSelector, useStore } })`"); 611 warned = true; 612 } 613 } 614 hooks[hookName] = rest[hookName]; 615 } 616 if (typeof hooks[hookName] !== "function") { 617 throw new Error(false ? formatProdErrorMessage(36) : `When using custom hooks for context, all ${hookNames.length} hooks need to be provided: ${hookNames.join(", ")}. 618Hook ${hookName} was either not provided or not a function.`); 619 } 620 } 621 } 622 return { 623 name: reactHooksModuleName, 624 init(api, { 625 serializeQueryArgs 626 }, context) { 627 const anyApi = api; 628 const { 629 buildQueryHooks, 630 buildInfiniteQueryHooks, 631 buildMutationHook, 632 usePrefetch 633 } = buildHooks({ 634 api, 635 moduleOptions: { 636 batch: batch2, 637 hooks, 638 unstable__sideEffectsInRender, 639 createSelector: createSelector2 640 }, 641 serializeQueryArgs, 642 context 643 }); 644 safeAssign(anyApi, { 645 usePrefetch 646 }); 647 safeAssign(context, { 648 batch: batch2 649 }); 650 return { 651 injectEndpoint(endpointName, definition) { 652 if (isQueryDefinition(definition)) { 653 const { 654 useQuery, 655 useLazyQuery, 656 useLazyQuerySubscription, 657 useQueryState, 658 useQuerySubscription 659 } = buildQueryHooks(endpointName); 660 safeAssign(anyApi.endpoints[endpointName], { 661 useQuery, 662 useLazyQuery, 663 useLazyQuerySubscription, 664 useQueryState, 665 useQuerySubscription 666 }); 667 api[`use${capitalize(endpointName)}Query`] = useQuery; 668 api[`useLazy${capitalize(endpointName)}Query`] = useLazyQuery; 669 } 670 if (isMutationDefinition(definition)) { 671 const useMutation = buildMutationHook(endpointName); 672 safeAssign(anyApi.endpoints[endpointName], { 673 useMutation 674 }); 675 api[`use${capitalize(endpointName)}Mutation`] = useMutation; 676 } else if (isInfiniteQueryDefinition(definition)) { 677 const { 678 useInfiniteQuery, 679 useInfiniteQuerySubscription, 680 useInfiniteQueryState 681 } = buildInfiniteQueryHooks(endpointName); 682 safeAssign(anyApi.endpoints[endpointName], { 683 useInfiniteQuery, 684 useInfiniteQuerySubscription, 685 useInfiniteQueryState 686 }); 687 api[`use${capitalize(endpointName)}InfiniteQuery`] = useInfiniteQuery; 688 } 689 } 690 }; 691 } 692 }; 693}; 694function ApiProvider(props) { 695 const context = props.context || ReactReduxContext; 696 const existingContext = (0, import_react.useContext)(context); 697 if (existingContext) { 698 throw new Error(false ? formatProdErrorMessage(35) : "Existing Redux context detected. If you already have a store set up, please use the traditional Redux setup."); 699 } 700 const [store] = React.useState(() => configureStore({ 701 reducer: { 702 [props.api.reducerPath]: props.api.reducer 703 }, 704 middleware: (gDM) => gDM().concat(props.api.middleware) 705 })); 706 (0, import_react.useEffect)(() => props.setupListeners === false ? void 0 : setupListeners(store.dispatch, props.setupListeners), [props.setupListeners, store.dispatch]); 707 return React.createElement(Provider_default, { store, context }, props.children); 708}
709var createApi = buildCreateApi(coreModule(), reactHooksModule()); 710export { 711 ApiProvider, 712 NamedSchemaError, 713 QueryStatus, 714 UNINITIALIZED_VALUE, 715 _NEVER, 716 buildCreateApi, 717 copyWithStructuralSharing, 718 coreModule, 719 coreModuleName, 720 createApi, 721 defaultSerializeQueryArgs, 722 fakeBaseQuery, 723 fetchBaseQuery, 724 reactHooksModule, 725 reactHooksModuleName, 726 retry, 727 setupListeners, 728 skipToken 729}; 730 731//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkByZWR1eGpzX3Rvb2xraXRfcXVlcnlfcmVhY3QuanM/dj1iZjc2MzMzMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX19idWZmZXJfcG9seWZpbGwgZnJvbSAndml0ZS1wbHVnaW4tbm9kZS1wb2x5ZmlsbHMvc2hpbXMvYnVmZmVyJ1xuZ2xvYmFsVGhpcy5CdWZmZXIgPSBnbG9iYWxUaGlzLkJ1ZmZlciB8fCBfX2J1ZmZlcl9wb2x5ZmlsbFxuaW1wb3J0IF9fZ2xvYmFsX3BvbHlmaWxsIGZyb20gJ3ZpdGUtcGx1Z2luLW5vZGUtcG9seWZpbGxzL3NoaW1zL2dsb2JhbCdcbmdsb2JhbFRoaXMuZ2xvYmFsID0gZ2xvYmFsVGhpcy5nbG9iYWwgfHwgX19nbG9iYWxfcG9seWZpbGxcbmltcG9ydCBfX3Byb2Nlc3NfcG9seWZpbGwgZnJvbSAndml0ZS1wbHVnaW4tbm9kZS1wb2x5ZmlsbHMvc2hpbXMvcHJvY2Vzcydcbmdsb2JhbFRoaXMucHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcyB8fCBfX3Byb2Nlc3NfcG9seWZpbGxcblxuaW1wb3J0IHtcbiAgUHJvdmlkZXJfZGVmYXVsdCxcbiAgUmVhY3RSZWR1eENvbnRleHQsXG4gIGJhdGNoLFxuICBzaGFsbG93RXF1YWwsXG4gIHVzZURpc3BhdGNoLFxuICB1c2VTZWxlY3RvcixcbiAgdXNlU3RvcmVcbn0gZnJvbSBcIi4vY2h1bmstNFg2TkxPSU4uanNcIjtcbmltcG9ydCB7XG4gIE5hbWVkU2NoZW1hRXJyb3IsXG4gIFF1ZXJ5U3RhdHVzLFxuICBfTkVWRVIsXG4gIGJ1aWxkQ3JlYXRlQXBpLFxuICBjb3B5V2l0aFN0cnVjdHVyYWxTaGFyaW5nLFxuICBjb3JlTW9kdWxlLFxuICBjb3JlTW9kdWxlTmFtZSxcbiAgZGVmYXVsdFNlcmlhbGl6ZVF1ZXJ5QXJncyxcbiAgZmFrZUJhc2VRdWVyeSxcbiAgZmV0Y2hCYXNlUXVlcnksXG4gIHJldHJ5LFxuICBzZXR1cExpc3RlbmVycyxcbiAgc2tpcFRva2VuXG59IGZyb20gXCIuL2NodW5rLVdPM0FRRllTLmpzXCI7XG5pbXBvcnQge1xuICBjb25maWd1cmVTdG9yZSxcbiAgY3JlYXRlU2VsZWN0b3IsXG4gIGZvcm1hdFByb2RFcnJvck1lc3NhZ2Vcbn0gZnJvbSBcIi4vY2h1bmstMklDTkQyNTMuanNcIjtcbmltcG9ydCB7XG4gIHJlcXVpcmVfcmVhY3Rcbn0gZnJvbSBcIi4vY2h1bmstT0xDUlIzSDIuanNcIjtcbmltcG9ydCB7XG4gIF9fdG9FU00sXG4gIHJlcXVpcmVfZGlzdCxcbiAgcmVxdWlyZV9kaXN0MixcbiAgcmVxdWlyZV9kaXN0M1xufSBmcm9tIFwiLi9jaHVuay1DVVJORlpSUi5qc1wiO1xuXG4vLyBub2RlX21vZHVsZXMvLnBucG0vQHJlZHV4anMrdG9vbGtpdEAyLjExLjJfcmVhY3QtcmVkdXhAOS4yLjBfQHR5cGVzK3JlYWN0QDE4LjMuMjdfcmVhY3RAMTguMy4xX3JlZHV4QDUuMC4xX19yZWFjdEAxOC4zLjEvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvZGlzdC9xdWVyeS9yZWFjdC9ydGstcXVlcnktcmVhY3QubW9kZXJuLm1qc1xudmFyIGltcG9ydF9kaXN0ID0gX190b0VTTShyZXF1aXJlX2Rpc3QoKSwgMSk7XG52YXIgaW1wb3J0X2Rpc3QyID0gX190b0VTTShyZXF1aXJlX2Rpc3QyKCksIDEpO1xudmFyIGltcG9ydF9kaXN0MyA9IF9fdG9FU00ocmVxdWlyZV9kaXN0MygpLCAxKTtcbnZhciBpbXBvcnRfcmVhY3QgPSBfX3RvRVNNKHJlcXVpcmVfcmVhY3QoKSwgMSk7XG52YXIgUmVhY3QgPSBfX3RvRVNNKHJlcXVpcmVfcmVhY3QoKSwgMSk7XG5mdW5jdGlvbiBjYXBpdGFsaXplKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2Uoc3RyWzBdLCBzdHJbMF0udG9VcHBlckNhc2UoKSk7XG59XG5mdW5jdGlvbiBjb3VudE9iamVjdEtleXMob2JqKSB7XG4gIGxldCBjb3VudCA9IDA7XG4gIGZvciAoY29uc3QgX2tleSBpbiBvYmopIHtcbiAgICBjb3VudCsrO1xuICB9XG4gIHJldHVybiBjb3VudDtcbn1cbnZhciBFTkRQT0lOVF9RVUVSWSA9IFwicXVlcnlcIjtcbnZhciBFTkRQT0lOVF9NVVRBVElPTiA9IFwibXV0YXRpb25cIjtcbnZhciBFTkRQT0lOVF9JTkZJTklURVFVRVJZID0gXCJpbmZpbml0ZXF1ZXJ5XCI7XG5mdW5jdGlvbiBpc1F1ZXJ5RGVmaW5pdGlvbihlKSB7XG4gIHJldHVybiBlLnR5cGUgPT09IEVORFBPSU5UX1FVRVJZO1xufVxuZnVuY3Rpb24gaXNNdXRhdGlvbkRlZmluaXRpb24oZSkge1xuICByZXR1cm4gZS50eXBlID09PSBFTkRQT0lOVF9NVVRBVElPTjtcbn1cbmZ1bmN0aW9uIGlzSW5maW5pdGVRdWVyeURlZmluaXRpb24oZSkge1xuICByZXR1cm4gZS50eXBlID09PSBFTkRQT0lOVF9JTkZJTklURVFVRVJZO1xufVxuZnVuY3Rpb24gc2FmZUFzc2lnbih0YXJnZXQsIC4uLmFyZ3MpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24odGFyZ2V0LCAuLi5hcmdzKTtcbn1cbnZhciBVTklOSVRJQUxJWkVEX1ZBTFVFID0gU3ltYm9sKCk7XG5mdW5jdGlvbiB1c2VTdGFibGVRdWVyeUFyZ3MocXVlcnlBcmdzKSB7XG4gIGNvbnN0IGNhY2hlID0gKDAsIGltcG9ydF9yZWFjdC51c2VSZWYpKHF1ZXJ5QXJncyk7XG4gIGNvbnN0IGNvcHkgPSAoMCwgaW1wb3J0X3JlYWN0LnVzZU1lbW8pKCgpID0+IGNvcHlXaXRoU3RydWN0dXJhbFNoYXJpbmcoY2FjaGUuY3VycmVudCwgcXVlcnlBcmdzKSwgW3F1ZXJ5QXJnc10pO1xuICAoMCwgaW1wb3J0X3JlYWN0LnVzZUVmZmVjdCkoKCkgPT4ge1xuICAgIGlmIChjYWNoZS5jdXJyZW50ICE9PSBjb3B5KSB7XG4gICAgICBjYWNoZS5jdXJyZW50ID0gY29weTtcbiAgICB9XG4gIH0sIFtjb3B5XSk7XG4gIHJldHVybiBjb3B5O1xufVxuZnVuY3Rpb24gdXNlU2hhbGxvd1N0YWJsZVZhbHVlKHZhbHVlKSB7XG4gIGNvbnN0IGNhY2hlID0gKDAsIGltcG9ydF9yZWFjdC51c2VSZWYpKHZhbHVlKTtcbiAgKDAsIGltcG9ydF9yZWFjdC51c2VFZmZlY3QpKCgpID0+IHtcbiAgICBpZiAoIXNoYWxsb3dFcXVhbChjYWNoZS5jdXJyZW50LCB2YWx1ZSkpIHtcbiAgICAgIGNhY2hlLmN1cnJlbnQgPSB2YWx1ZTtcbiAgICB9XG4gI
731H0sIFt2YWx1ZV0pO1xuICByZXR1cm4gc2hhbGxvd0VxdWFsKGNhY2hlLmN1cnJlbnQsIHZhbHVlKSA/IGNhY2hlLmN1cnJlbnQgOiB2YWx1ZTtcbn1cbnZhciBjYW5Vc2VET00gPSAoKSA9PiAhISh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50ICE9PSBcInVuZGVmaW5lZFwiKTtcbnZhciBpc0RPTSA9IGNhblVzZURPTSgpO1xudmFyIGlzUnVubmluZ0luUmVhY3ROYXRpdmUgPSAoKSA9PiB0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiICYmIG5hdmlnYXRvci5wcm9kdWN0ID09PSBcIlJlYWN0TmF0aXZlXCI7XG52YXIgaXNSZWFjdE5hdGl2ZSA9IGlzUnVubmluZ0luUmVhY3ROYXRpdmUoKTtcbnZhciBnZXRVc2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gKCkgPT4gaXNET00gfHwgaXNSZWFjdE5hdGl2ZSA/IGltcG9ydF9yZWFjdC51c2VMYXlvdXRFZmZlY3QgOiBpbXBvcnRfcmVhY3QudXNlRWZmZWN0O1xudmFyIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgPSBnZXRVc2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCk7XG52YXIgbm9QZW5kaW5nUXVlcnlTdGF0ZVNlbGVjdG9yID0gKHNlbGVjdGVkKSA9PiB7XG4gIGlmIChzZWxlY3RlZC5pc1VuaW5pdGlhbGl6ZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc2VsZWN0ZWQsXG4gICAgICBpc1VuaW5pdGlhbGl6ZWQ6IGZhbHNlLFxuICAgICAgaXNGZXRjaGluZzogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogc2VsZWN0ZWQuZGF0YSAhPT0gdm9pZCAwID8gZmFsc2UgOiB0cnVlLFxuICAgICAgLy8gVGhpcyBpcyB0aGUgb25lIHBsYWNlIHdoZXJlIHdlIHN0aWxsIGhhdmUgdG8gdXNlIGBRdWVyeVN0YXR1c2AgYXMgYW4gZW51bSxcbiAgICAgIC8vIHNpbmNlIGl0J3MgdGhlIG9ubHkgcmVmZXJlbmNlIGluIHRoZSBSZWFjdCBwYWNrYWdlIGFuZCBub3QgaW4gdGhlIGNvcmUuXG4gICAgICBzdGF0dXM6IFF1ZXJ5U3RhdHVzLnBlbmRpbmdcbiAgICB9O1xuICB9XG4gIHJldHVybiBzZWxlY3RlZDtcbn07XG5mdW5jdGlvbiBwaWNrKG9iaiwgLi4ua2V5cykge1xuICBjb25zdCByZXQgPSB7fTtcbiAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICByZXRba2V5XSA9IG9ialtrZXldO1xuICB9KTtcbiAgcmV0dXJuIHJldDtcbn1cbnZhciBDT01NT05fSE9PS19ERUJVR19GSUVMRFMgPSBbXCJkYXRhXCIsIFwic3RhdHVzXCIsIFwiaXNMb2FkaW5nXCIsIFwiaXNTdWNjZXNzXCIsIFwiaXNFcnJvclwiLCBcImVycm9yXCJdO1xuZnVuY3Rpb24gYnVpbGRIb29rcyh7XG4gIGFwaSxcbiAgbW9kdWxlT3B0aW9uczoge1xuICAgIGJhdGNoOiBiYXRjaDIsXG4gICAgaG9va3M6IHtcbiAgICAgIHVzZURpc3BhdGNoOiB1c2VEaXNwYXRjaDIsXG4gICAgICB1c2VTZWxlY3RvcjogdXNlU2VsZWN0b3IyLFxuICAgICAgdXNlU3RvcmU6IHVzZVN0b3JlMlxuICAgIH0sXG4gICAgdW5zdGFibGVfX3NpZGVFZmZlY3RzSW5SZW5kZXIsXG4gICAgY3JlYXRlU2VsZWN0b3I6IGNyZWF0ZVNlbGVjdG9yMlxuICB9LFxuICBzZXJpYWxpemVRdWVyeUFyZ3MsXG4gIGNvbnRleHRcbn0pIHtcbiAgY29uc3QgdXNlUG9zc2libHlJbW1lZGlhdGVFZmZlY3QgPSB1bnN0YWJsZV9fc2lkZUVmZmVjdHNJblJlbmRlciA/IChjYikgPT4gY2IoKSA6IGltcG9ydF9yZWFjdC51c2VFZmZlY3Q7XG4gIGNvbnN0IHVuc3Vic2NyaWJlUHJvbWlzZVJlZiA9IChyZWYpID0+IHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHJldHVybiAoX2IgPSAoX2EgPSByZWYuY3VycmVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnVuc3Vic2NyaWJlKSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gIH07XG4gIGNvbnN0IGVuZHBvaW50RGVmaW5pdGlvbnMgPSBjb250ZXh0LmVuZHBvaW50RGVmaW5pdGlvbnM7XG4gIHJldHVybiB7XG4gICAgYnVpbGRRdWVyeUhvb2tzLFxuICAgIGJ1aWxkSW5maW5pdGVRdWVyeUhvb2tzLFxuICAgIGJ1aWxkTXV0YXRpb25Ib29rLFxuICAgIHVzZVByZWZldGNoXG4gIH07XG4gIGZ1bmN0aW9uIHF1ZXJ5U3RhdGVQcmVTZWxlY3RvcihjdXJyZW50U3RhdGUsIGxhc3RSZXN1bHQsIHF1ZXJ5QXJncykge1xuICAgIGlmICgobGFzdFJlc3VsdCA9PSBudWxsID8gdm9pZCAwIDogbGFzdFJlc3VsdC5lbmRwb2ludE5hbWUpICYmIGN1cnJlbnRTdGF0ZS5pc1VuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZW5kcG9pbnROYW1lXG4gICAgICB9ID0gbGFzdFJlc3VsdDtcbiAgICAgIGNvbnN0IGVuZHBvaW50RGVmaW5pdGlvbiA9IGVuZHBvaW50RGVmaW5pdGlvbnNbZW5kcG9pbnROYW1lXTtcbiAgICAgIGlmIChxdWVyeUFyZ3MgIT09IHNraXBUb2tlbiAmJiBzZXJpYWxpemVRdWVyeUFyZ3Moe1xuICAgICAgICBxdWVyeUFyZ3M6IGxhc3RSZXN1bHQub3JpZ2luYWxBcmdzLFxuICAgICAgICBlbmRwb2ludERlZmluaXRpb24sXG4gICAgICAgIGVuZHBvaW50TmFtZVxuICAgICAgfSkgPT09IHNlcmlhbGl6ZVF1ZXJ5QXJncyh7XG4gICAgICAgIHF1ZXJ5QXJncyxcbiAgICAgICAgZW5kcG9pbnREZWZpbml0aW9uLFxuICAgICAgICBlbmRwb2ludE5hbWVcbiAgICAgIH0pKSBsYXN0UmVzdWx0ID0gdm9pZCAwO1xuICAgIH1cbiAgICBsZXQgZGF0YSA9IGN1cnJlbnRTdGF0ZS5pc1N1Y2Nlc3MgPyBjdXJyZW50U3RhdGUuZGF0YSA6IGxhc3RSZXN1bHQgPT0gbnVsbCA/IHZvaWQgMCA6IGxhc3RSZXN1bHQuZGF0YTtcbiAgICBpZiAoZGF0YSA9PT0gdm9pZCAwKSBkYXRhID0gY3VycmVudFN0YXRlLmRhdGE7XG4gICAgY29uc3QgaGFzRGF0YSA9IGRhdGEgIT09IHZvaWQgMDtcbiAgICBjb25zdCBpc0ZldGNoaW5nID0gY3VycmVudFN0YXRlLmlzTG9hZGluZztcbiAgICBjb25zdCBpc0xvYWRpbmcgPSAoIWxhc3RSZXN1bHQgfHwgbGFzdFJlc3VsdC5pc0xvYWRpbmcgfHwgbGFzdFJlc3VsdC5pc1VuaW5pdGlhbGl6ZWQpICYmICFoYXNEYXRhICYmIGlzRmV0Y2hpbmc7XG4gICAgY29uc3QgaXNTdWNjZXNzID0gY3VycmVudFN0YXRlLmlzU3VjY2VzcyB8fCBoYXNEYXRhICYmIChpc0ZldGNoaW5nICYmICEobGFzdFJlc3VsdCA9PSBudWxsID8gdm9pZCAwIDogbGFzdFJlc3VsdC5pc0Vycm9yKSB8fCBjdXJyZW50U3RhdGUuaXNVbmluaXRpYWxpemVkKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uY3VycmVudFN0YXRlLFxuICAgICAgZGF0YSxcbiAgICAgIGN1cnJlbnREYXRhOi
731BjdXJyZW50U3RhdGUuZGF0YSxcbiAgICAgIGlzRmV0Y2hpbmcsXG4gICAgICBpc0xvYWRpbmcsXG4gICAgICBpc1N1Y2Nlc3NcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGluZmluaXRlUXVlcnlTdGF0ZVByZVNlbGVjdG9yKGN1cnJlbnRTdGF0ZSwgbGFzdFJlc3VsdCwgcXVlcnlBcmdzKSB7XG4gICAgaWYgKChsYXN0UmVzdWx0ID09IG51bGwgPyB2b2lkIDAgOiBsYXN0UmVzdWx0LmVuZHBvaW50TmFtZSkgJiYgY3VycmVudFN0YXRlLmlzVW5pbml0aWFsaXplZCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBlbmRwb2ludE5hbWVcbiAgICAgIH0gPSBsYXN0UmVzdWx0O1xuICAgICAgY29uc3QgZW5kcG9pbnREZWZpbml0aW9uID0gZW5kcG9pbnREZWZpbml0aW9uc1tlbmRwb2ludE5hbWVdO1xuICAgICAgaWYgKHF1ZXJ5QXJncyAhPT0gc2tpcFRva2VuICYmIHNlcmlhbGl6ZVF1ZXJ5QXJncyh7XG4gICAgICAgIHF1ZXJ5QXJnczogbGFzdFJlc3VsdC5vcmlnaW5hbEFyZ3MsXG4gICAgICAgIGVuZHBvaW50RGVmaW5pdGlvbixcbiAgICAgICAgZW5kcG9pbnROYW1lXG4gICAgICB9KSA9PT0gc2VyaWFsaXplUXVlcnlBcmdzKHtcbiAgICAgICAgcXVlcnlBcmdzLFxuICAgICAgICBlbmRwb2ludERlZmluaXRpb24sXG4gICAgICAgIGVuZHBvaW50TmFtZVxuICAgICAgfSkpIGxhc3RSZXN1bHQgPSB2b2lkIDA7XG4gICAgfVxuICAgIGxldCBkYXRhID0gY3VycmVudFN0YXRlLmlzU3VjY2VzcyA/IGN1cnJlbnRTdGF0ZS5kYXRhIDogbGFzdFJlc3VsdCA9PSBudWxsID8gdm9pZCAwIDogbGFzdFJlc3VsdC5kYXRhO1xuICAgIGlmIChkYXRhID09PSB2b2lkIDApIGRhdGEgPSBjdXJyZW50U3RhdGUuZGF0YTtcbiAgICBjb25zdCBoYXNEYXRhID0gZGF0YSAhPT0gdm9pZCAwO1xuICAgIGNvbnN0IGlzRmV0Y2hpbmcgPSBjdXJyZW50U3RhdGUuaXNMb2FkaW5nO1xuICAgIGNvbnN0IGlzTG9hZGluZyA9ICghbGFzdFJlc3VsdCB8fCBsYXN0UmVzdWx0LmlzTG9hZGluZyB8fCBsYXN0UmVzdWx0LmlzVW5pbml0aWFsaXplZCkgJiYgIWhhc0RhdGEgJiYgaXNGZXRjaGluZztcbiAgICBjb25zdCBpc1N1Y2Nlc3MgPSBjdXJyZW50U3RhdGUuaXNTdWNjZXNzIHx8IGlzRmV0Y2hpbmcgJiYgaGFzRGF0YTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uY3VycmVudFN0YXRlLFxuICAgICAgZGF0YSxcbiAgICAgIGN1cnJlbnREYXRhOiBjdXJyZW50U3RhdGUuZGF0YSxcbiAgICAgIGlzRmV0Y2hpbmcsXG4gICAgICBpc0xvYWRpbmcsXG4gICAgICBpc1N1Y2Nlc3NcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHVzZVByZWZldGNoKGVuZHBvaW50TmFtZSwgZGVmYXVsdE9wdGlvbnMpIHtcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoMigpO1xuICAgIGNvbnN0IHN0YWJsZURlZmF1bHRPcHRpb25zID0gdXNlU2hhbGxvd1N0YWJsZVZhbHVlKGRlZmF1bHRPcHRpb25zKTtcbiAgICByZXR1cm4gKDAsIGltcG9ydF9yZWFjdC51c2VDYWxsYmFjaykoKGFyZywgb3B0aW9ucykgPT4gZGlzcGF0Y2goYXBpLnV0aWwucHJlZmV0Y2goZW5kcG9pbnROYW1lLCBhcmcsIHtcbiAgICAgIC4uLnN0YWJsZURlZmF1bHRPcHRpb25zLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0pKSwgW2VuZHBvaW50TmFtZSwgZGlzcGF0Y2gsIHN0YWJsZURlZmF1bHRPcHRpb25zXSk7XG4gIH1cbiAgZnVuY3Rpb24gdXNlUXVlcnlTdWJzY3JpcHRpb25Db21tb25JbXBsKGVuZHBvaW50TmFtZSwgYXJnLCB7XG4gICAgcmVmZXRjaE9uUmVjb25uZWN0LFxuICAgIHJlZmV0Y2hPbkZvY3VzLFxuICAgIHJlZmV0Y2hPbk1vdW50T3JBcmdDaGFuZ2UsXG4gICAgc2tpcCA9IGZhbHNlLFxuICAgIHBvbGxpbmdJbnRlcnZhbCA9IDAsXG4gICAgc2tpcFBvbGxpbmdJZlVuZm9jdXNlZCA9IGZhbHNlLFxuICAgIC4uLnJlc3RcbiAgfSA9IHt9KSB7XG4gICAgY29uc3Qge1xuICAgICAgaW5pdGlhdGVcbiAgICB9ID0gYXBpLmVuZHBvaW50c1tlbmRwb2ludE5hbWVdO1xuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2gyKCk7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uU2VsZWN0b3JzUmVmID0gKDAsIGltcG9ydF9yZWFjdC51c2VSZWYpKHZvaWQgMCk7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25TZWxlY3RvcnNSZWYuY3VycmVudCkge1xuICAgICAgY29uc3QgcmV0dXJuZWRWYWx1ZSA9IGRpc3BhdGNoKGFwaS5pbnRlcm5hbEFjdGlvbnMuaW50ZXJuYWxfZ2V0UlRLUVN1YnNjcmlwdGlvbnMoKSk7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0dXJuZWRWYWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgKHJldHVybmVkVmFsdWUgPT0gbnVsbCA/IHZvaWQgMCA6IHJldHVybmVkVmFsdWUudHlwZSkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzNykgOiBgV2FybmluZzogTWlkZGxld2FyZSBmb3IgUlRLLVF1ZXJ5IEFQSSBhdCByZWR1Y2VyUGF0aCBcIiR7YXBpLnJlZHVjZXJQYXRofVwiIGhhcyBub3QgYmVlbiBhZGRlZCB0byB0aGUgc3RvcmUuXG4gICAgWW91IG11c3QgYWRkIHRoZSBtaWRkbGV3YXJlIGZvciBSVEstUXVlcnkgdG8gZnVuY3Rpb24gY29ycmVjdGx5IWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdWJzY3JpcHRpb25TZWxlY3RvcnNSZWYuY3VycmVudCA9IHJldHVybmVkVmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IHN0YWJsZUFyZyA9IHVzZVN0YWJsZVF1ZXJ5QXJncyhza2lwID8gc2tpcFRva2VuIDogYXJnKTtcbiAgICBjb25zdCBzdGFibGVTdWJzY3JpcHRpb25PcHRpb25zID0gdXNlU2hhbGxvd1N0YWJsZVZhbHVlKHtcbiAgICAgIHJlZmV0Y2hPblJlY29ubmVjdCxcbiAgICAgIHJlZmV0Y2hPbkZvY3VzLFxuICAgICAgcG9sbGluZ0ludGVydmFsLFxuICAgICAgc2tpcFBvbGxpbmdJZlVuZm9jdXNlZFxuICAgIH0pO1xuICAgIGNvbnN0IGluaXRpYWxQYWdlUGFyYW0gPSByZXN0LmluaXRpYWxQYWdlUGFyYW07XG4gICAgY29uc3Qgc3RhYmxlSW5pdGlhbFBhZ2VQYXJhbSA9IHVzZVNoYWxsb3dTdGFibGVWYWx1ZShpbml0aWFsUGFnZVBhcmFtKTtcbiAgICBjb25zdCByZWZldGNoQ2FjaGVkUGFnZXMgPSByZXN0LnJlZmV0Y2hDYWNoZWRQYWdlcztcbiAgICBjb25zdCBzdGFibGVSZWZldGNoQ2FjaGVkUGFnZXMgPSB1c2VTaGFsbG93U3RhYmxlVmFsdWUocmVmZXRjaENhY2hlZFBhZ2VzKTtcbiAgICBjb25zdCBwcm9taXNlUmVmID0gKDAsIGltcG9ydF9yZWFjdC51c2VSZWYpKHZvaWQgMCk7XG4gICAgbGV0IHtcbiAgICAgIHF1ZXJ5Q2FjaGVLZXksXG4gICAgICByZXF1ZXN0SWRcbiAgICB9ID0gcHJvbWlzZVJlZi5jdXJyZW50IHx8IHt9O1xuICAgIGxldCBjdXJyZW50UmVuZGVySGFzU3Vic2NyaXB0aW9uID0gZmFsc2U7XG4gICAgaWYgKHF1ZXJ5Q2FjaGVLZXkgJiYgcmVxdW
731VzdElkKSB7XG4gICAgICBjdXJyZW50UmVuZGVySGFzU3Vic2NyaXB0aW9uID0gc3Vic2NyaXB0aW9uU2VsZWN0b3JzUmVmLmN1cnJlbnQuaXNSZXF1ZXN0U3Vic2NyaWJlZChxdWVyeUNhY2hlS2V5LCByZXF1ZXN0SWQpO1xuICAgIH1cbiAgICBjb25zdCBzdWJzY3JpcHRpb25SZW1vdmVkID0gIWN1cnJlbnRSZW5kZXJIYXNTdWJzY3JpcHRpb24gJiYgcHJvbWlzZVJlZi5jdXJyZW50ICE9PSB2b2lkIDA7XG4gICAgdXNlUG9zc2libHlJbW1lZGlhdGVFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHN1YnNjcmlwdGlvblJlbW92ZWQpIHtcbiAgICAgICAgcHJvbWlzZVJlZi5jdXJyZW50ID0gdm9pZCAwO1xuICAgICAgfVxuICAgIH0sIFtzdWJzY3JpcHRpb25SZW1vdmVkXSk7XG4gICAgdXNlUG9zc2libHlJbW1lZGlhdGVFZmZlY3QoKCkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgbGFzdFByb21pc2UgPSBwcm9taXNlUmVmLmN1cnJlbnQ7XG4gICAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicmVtb3ZlTWVPbkNvbXBpbGF0aW9uXCIpIHtcbiAgICAgICAgY29uc29sZS5sb2coc3Vic2NyaXB0aW9uUmVtb3ZlZCk7XG4gICAgICB9XG4gICAgICBpZiAoc3RhYmxlQXJnID09PSBza2lwVG9rZW4pIHtcbiAgICAgICAgbGFzdFByb21pc2UgPT0gbnVsbCA/IHZvaWQgMCA6IGxhc3RQcm9taXNlLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHByb21pc2VSZWYuY3VycmVudCA9IHZvaWQgMDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbGFzdFN1YnNjcmlwdGlvbk9wdGlvbnMgPSAoX2EgPSBwcm9taXNlUmVmLmN1cnJlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYS5zdWJzY3JpcHRpb25PcHRpb25zO1xuICAgICAgaWYgKCFsYXN0UHJvbWlzZSB8fCBsYXN0UHJvbWlzZS5hcmcgIT09IHN0YWJsZUFyZykge1xuICAgICAgICBsYXN0UHJvbWlzZSA9PSBudWxsID8gdm9pZCAwIDogbGFzdFByb21pc2UudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IGRpc3BhdGNoKGluaXRpYXRlKHN0YWJsZUFyZywge1xuICAgICAgICAgIHN1YnNjcmlwdGlvbk9wdGlvbnM6IHN0YWJsZVN1YnNjcmlwdGlvbk9wdGlvbnMsXG4gICAgICAgICAgZm9yY2VSZWZldGNoOiByZWZldGNoT25Nb3VudE9yQXJnQ2hhbmdlLFxuICAgICAgICAgIC4uLmlzSW5maW5pdGVRdWVyeURlZmluaXRpb24oZW5kcG9pbnREZWZpbml0aW9uc1tlbmRwb2ludE5hbWVdKSA/IHtcbiAgICAgICAgICAgIGluaXRpYWxQYWdlUGFyYW06IHN0YWJsZUluaXRpYWxQYWdlUGFyYW0sXG4gICAgICAgICAgICByZWZldGNoQ2FjaGVkUGFnZXM6IHN0YWJsZVJlZmV0Y2hDYWNoZWRQYWdlc1xuICAgICAgICAgIH0gOiB7fVxuICAgICAgICB9KSk7XG4gICAgICAgIHByb21pc2VSZWYuY3VycmVudCA9IHByb21pc2U7XG4gICAgICB9IGVsc2UgaWYgKHN0YWJsZVN1YnNjcmlwdGlvbk9wdGlvbnMgIT09IGxhc3RTdWJzY3JpcHRpb25PcHRpb25zKSB7XG4gICAgICAgIGxhc3RQcm9taXNlLnVwZGF0ZVN1YnNjcmlwdGlvbk9wdGlvbnMoc3RhYmxlU3Vic2NyaXB0aW9uT3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSwgW2Rpc3BhdGNoLCBpbml0aWF0ZSwgcmVmZXRjaE9uTW91bnRPckFyZ0NoYW5nZSwgc3RhYmxlQXJnLCBzdGFibGVTdWJzY3JpcHRpb25PcHRpb25zLCBzdWJzY3JpcHRpb25SZW1vdmVkLCBzdGFibGVJbml0aWFsUGFnZVBhcmFtLCBzdGFibGVSZWZldGNoQ2FjaGVkUGFnZXMsIGVuZHBvaW50TmFtZV0pO1xuICAgIHJldHVybiBbcHJvbWlzZVJlZiwgZGlzcGF0Y2gsIGluaXRpYXRlLCBzdGFibGVTdWJzY3JpcHRpb25PcHRpb25zXTtcbiAgfVxuICBmdW5jdGlvbiBidWlsZFVzZVF1ZXJ5U3RhdGUoZW5kcG9pbnROYW1lLCBwcmVTZWxlY3Rvcikge1xuICAgIGNvbnN0IHVzZVF1ZXJ5U3RhdGUgPSAoYXJnLCB7XG4gICAgICBza2lwID0gZmFsc2UsXG4gICAgICBzZWxlY3RGcm9tUmVzdWx0XG4gICAgfSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHNlbGVjdFxuICAgICAgfSA9IGFwaS5lbmRwb2ludHNbZW5kcG9pbnROYW1lXTtcbiAgICAgIGNvbnN0IHN0YWJsZUFyZyA9IHVzZVN0YWJsZVF1ZXJ5QXJncyhza2lwID8gc2tpcFRva2VuIDogYXJnKTtcbiAgICAgIGNvbnN0IGxhc3RWYWx1ZSA9ICgwLCBpb
731XBvcnRfcmVhY3QudXNlUmVmKSh2b2lkIDApO1xuICAgICAgY29uc3Qgc2VsZWN0RGVmYXVsdFJlc3VsdCA9ICgwLCBpbXBvcnRfcmVhY3QudXNlTWVtbykoKCkgPT4gKFxuICAgICAgICAvLyBOb3JtYWxseSB0cy1pZ25vcmVzIGFyZSBiYWQgYW5kIHNob3VsZCBiZSBhdm9pZGVkLCBidXQgd2UncmVcbiAgICAgICAgLy8gYWxyZWFkeSBjYXN0aW5nIHRoaXMgc2VsZWN0b3IgdG8gYmUgYFNlbGVjdG9yPGFueT5gIGFueXdheSxcbiAgICAgICAgLy8gc28gdGhlIGluY29uc2lzdGVuY2llcyBkb24ndCBtYXR0ZXIgaGVyZVxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGNyZWF0ZVNlbGVjdG9yMihbXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHNlbGVjdChzdGFibGVBcmcpLFxuICAgICAgICAgIChfLCBsYXN0UmVzdWx0KSA9PiBsYXN0UmVzdWx0LFxuICAgICAgICAgIChfKSA9PiBzdGFibGVBcmdcbiAgICAgICAgXSwgcHJlU2VsZWN0b3IsIHtcbiAgICAgICAgICBtZW1vaXplT3B0aW9uczoge1xuICAgICAgICAgICAgcmVzdWx0RXF1YWxpdHlDaGVjazogc2hhbGxvd0VxdWFsXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKSwgW3NlbGVjdCwgc3RhYmxlQXJnXSk7XG4gICAgICBjb25zdCBxdWVyeVNlbGVjdG9yID0gKDAsIGltcG9ydF9yZWFjdC51c2VNZW1vKSgoKSA9PiBzZWxlY3RGcm9tUmVzdWx0ID8gY3JlYXRlU2VsZWN0b3IyKFtzZWxlY3REZWZhdWx0UmVzdWx0XSwgc2VsZWN0RnJvbVJlc3VsdCwge1xuICAgICAgICBkZXZNb2RlQ2hlY2tzOiB7XG4gICAgICAgICAgaWRlbnRpdHlGdW5jdGlvbkNoZWNrOiBcIm5ldmVyXCJcbiAgICAgICAgfVxuICAgICAgfSkgOiBzZWxlY3REZWZhdWx0UmVzdWx0LCBbc2VsZWN0RGVmYXVsdFJlc3VsdCwgc2VsZWN0RnJvbVJlc3VsdF0pO1xuICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gdXNlU2VsZWN0b3IyKChzdGF0ZSkgPT4gcXVlcnlTZWxlY3RvcihzdGF0ZSwgbGFzdFZhbHVlLmN1cnJlbnQpLCBzaGFsbG93RXF1YWwpO1xuICAgICAgY29uc3Qgc3RvcmUgPSB1c2VTdG9yZTIoKTtcbiAgICAgIGNvbnN0IG5ld0xhc3RWYWx1ZSA9IHNlbGVjdERlZmF1bHRSZXN1bHQoc3RvcmUuZ2V0U3RhdGUoKSwgbGFzdFZhbHVlLmN1cnJlbnQpO1xuICAgICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGxhc3RWYWx1ZS5jdXJyZW50ID0gbmV3TGFzdFZhbHVlO1xuICAgICAgfSwgW25ld0xhc3RWYWx1ZV0pO1xuICAgICAgcmV0dXJuIGN1cnJlbnRTdGF0ZTtcbiAgICB9O1xuICAgIHJldHVybiB1c2VRdWVyeVN0YXRlO1xuICB9XG4gIGZ1bmN0aW9uIHVzZVByb21pc2VSZWZVbnN1YnNjcmliZU9uVW5tb3VudChwcm9taXNlUmVmKSB7XG4gICAgKDAsIGltcG9ydF9yZWFjdC51c2VFZmZlY3QpKCgpID0+IHtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHVuc3Vic2NyaWJlUHJvbWlzZVJlZihwcm9taXNlUmVmKTtcbiAgICAgICAgcHJvbWlzZVJlZi5jdXJyZW50ID0gdm9pZCAwO1xuICAgICAgfTtcbiAgICB9LCBbcHJvbWlzZVJlZl0pO1xuICB9XG4gIGZ1bmN0aW9uIHJlZmV0Y2hPckVycm9ySWZVbm1vdW50ZWQocHJvbWlzZVJlZikge1xuICAgIGlmICghcHJvbWlzZVJlZi5jdXJyZW50KSB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzOCkgOiBcIkNhbm5vdCByZWZldGNoIGEgcXVlcnkgdGhhdCBoYXMgbm90IGJlZW4gc3RhcnRlZCB5ZXQuXCIpO1xuICAgIHJldHVybiBwcm9taXNlUmVmLmN1cnJlbnQucmVmZXRjaCgpO1xuICB9XG4gIGZ1bmN0aW9uIGJ1aWxkUXVlcnlIb29rcyhlbmRwb2ludE5hbWUpIHtcbiAgICBjb25zdCB1c2VRdWVyeVN1YnNjcmlwdGlvbiA9IChhcmcsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgW3Byb21pc2VSZWZdID0gdXNlUXVlcnlTdWJzY3JpcHRpb25Db21tb25JbXBsKGVuZHBvaW50TmFtZSwgYXJnLCBvcHRpb25zKTtcbiAgICAgIHVzZVByb21pc2VSZWZVbnN1YnNjcmliZU9uVW5tb3VudChwcm9taXNlUmVmKTtcbiAgICAgIHJldHVybiAoMCwgaW1wb3J0X3JlYWN0LnVzZU1lbW8pKCgpID0+ICh7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIG1ldGhvZCB0byBtYW51YWxseSByZWZldGNoIGRhdGEgZm9yIHRoZSBxdWVyeVxuICAgICAgICAgKi9cbiAgICAgICAgcmVmZXRjaDogKCkgPT4gcmVmZXRjaE9yRXJyb3JJZlVubW91bnRlZChwcm9taXNlUmVmKVxuICAgICAgfSksIFtwcm9taXNlUmVmXSk7XG4gICAgfTtcbiAgICBjb25zdCB1c2VMYXp5UXVlcnlTdWJzY3JpcHRpb24gPSAoe1xuICAgICAgcmVmZXRjaE9uUmVjb25uZWN0LFxuICAgICAgcmVmZXRjaE9uRm9jdXMsXG4gICAgICBwb2xsaW5nSW50ZXJ2YWwgPSAwLFxuICAgICAgc2tpcFBvbGxpbmdJZlVuZm9jdXNlZCA9IGZhbHNlXG4gICAgfSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGluaXRpYXRlXG4gICAgICB9ID0gYXBpLmVuZHBvaW50c1tlbmRwb2ludE5hbWVdO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaDIoKTtcbiAgICAgIGNvbnN0IFthcmcsIHNldEFyZ10gPSAoMCwgaW1wb3J0X3JlYWN0LnVzZVN0YXRlKShVTklOSVRJQUxJWkVEX1ZBTFVFKTtcbiAgICAgIGNvbnN0IHByb21pc2VSZWYgPSAoMCwgaW1wb3J0X3JlYWN0LnVzZVJlZikodm9pZCAwKTtcbiAgICAgIGNvbnN0IHN0YWJsZVN1YnNjcmlwdGlvbk9wdGlvbnMgPSB1c2VTaGFsbG93U3RhYmxlVmFsdWUoe1xuICAgICAgICByZWZldGNoT25SZWNvbm5lY3QsXG4gICAgICAgIHJlZmV0Y2hPbkZvY3VzLFxuICAgICAgICBwb2xsaW5nSW50ZXJ2YWwsXG4gICAgICAgIHNraXBQb2xsaW5nSWZVbmZvY3VzZWRcbiAgICAgIH0pO1xuICAgICAgdXNlUG9zc2libHlJbW1lZGlhdGVFZmZlY3QoKCkgPT4ge1xuICAgICAgICB2Y
731XIgX2EsIF9iO1xuICAgICAgICBjb25zdCBsYXN0U3Vic2NyaXB0aW9uT3B0aW9ucyA9IChfYSA9IHByb21pc2VSZWYuY3VycmVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnN1YnNjcmlwdGlvbk9wdGlvbnM7XG4gICAgICAgIGlmIChzdGFibGVTdWJzY3JpcHRpb25PcHRpb25zICE9PSBsYXN0U3Vic2NyaXB0aW9uT3B0aW9ucykge1xuICAgICAgICAgIChfYiA9IHByb21pc2VSZWYuY3VycmVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLnVwZGF0ZVN1YnNjcmlwdGlvbk9wdGlvbnMoc3RhYmxlU3Vic2NyaXB0aW9uT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH0sIFtzdGFibGVTdWJzY3JpcHRpb25PcHRpb25zXSk7XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb25PcHRpb25zUmVmID0gKDAsIGltcG9ydF9yZWFjdC51c2VSZWYpKHN0YWJsZVN1YnNjcmlwdGlvbk9wdGlvbnMpO1xuICAgICAgdXNlUG9zc2libHlJbW1lZGlhdGVFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzdWJzY3JpcHRpb25PcHRpb25zUmVmLmN1cnJlbnQgPSBzdGFibGVTdWJzY3JpcHRpb25PcHRpb25zO1xuICAgICAgfSwgW3N0YWJsZVN1YnNjcmlwdGlvbk9wdGlvbnNdKTtcbiAgICAgIGNvbnN0IHRyaWdnZXIgPSAoMCwgaW1wb3J0X3JlYWN0LnVzZUNhbGxiYWNrKShmdW5jdGlvbihhcmcyLCBwcmVmZXJDYWNoZVZhbHVlID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IHByb21pc2U7XG4gICAgICAgIGJhdGNoMigoKSA9PiB7XG4gICAgICAgICAgdW5zdWJzY3JpYmVQcm9taXNlUmVmKHByb21pc2VSZWYpO1xuICAgICAgICAgIHByb21pc2VSZWYuY3VycmVudCA9IHByb21pc2UgPSBkaXNwYXRjaChpbml0aWF0ZShhcmcyLCB7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb25PcHRpb25zOiBzdWJzY3JpcHRpb25PcHRpb25zUmVmLmN1cnJlbnQsXG4gICAgICAgICAgICBmb3JjZVJlZmV0Y2g6ICFwcmVmZXJDYWNoZVZhbHVlXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIHNldEFyZyhhcmcyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgfSwgW2Rpc3BhdGNoLCBpbml0aWF0ZV0pO1xuICAgICAgY29uc3QgcmVzZXQgPSAoMCwgaW1wb3J0X3JlYWN0LnVzZUNhbGxiYWNrKSgoKSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmICgoX2EgPSBwcm9taXNlUmVmLmN1cnJlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYS5xdWVyeUNhY2hlS2V5KSB7XG4gICAgICAgICAgZGlzcGF0Y2goYXBpLmludGVybmFsQWN0aW9ucy5yZW1vdmVRdWVyeVJlc3VsdCh7XG4gICAgICAgICAgICBxdWVyeUNhY2hlS2V5OiAoX2IgPSBwcm9taXNlUmVmLmN1cnJlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5xdWVyeUNhY2hlS2V5XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9LCBbZGlzcGF0Y2hdKTtcbiAgICAgICgwLCBpbXBvcnRfcmVhY3QudXNlRWZmZWN0KSgoKSA9PiB7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgdW5zdWJzY3JpYmVQcm9taXNlUmVmKHByb21pc2VSZWYpO1xuICAgICAgICB9O1xuICAgICAgfSwgW10pO1xuICAgICAgKDAsIGltcG9ydF9yZWFjdC51c2VFZmZlY3QpKCgpID0+IHtcbiAgICAgICAgaWYgKGFyZyAhPT0gVU5JTklUSUFMSVpFRF9WQUxVRSAmJiAhcHJvbWlzZVJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgdHJpZ2dlcihhcmcsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9LCBbYXJnLCB0cmlnZ2VyXSk7XG4gICAgICByZXR1cm4gKDAsIGltcG9ydF9yZWFjdC51c2VNZW1vKSgoKSA9PiBbdHJpZ2dlciwgYXJnLCB7XG4gICAgICAgIHJlc2V0XG4gICAgICB9XSwgW3RyaWdnZXIsIGFyZywgcmVzZXRdKTtcbiAgICB9O1xuICAgIGNvbnN0IHVzZVF1ZXJ5U3RhdGUgPSBidWlsZFVzZVF1ZXJ5U3RhdGUoZW5kcG9pbnROYW1lLCBxdWVyeVN0YXRlUHJlU2VsZWN0b3IpO1xuICAgIHJldHVybiB7XG4gICAgICB1c2VRdWVyeVN0YXRlLFxuICAgICAgdXNlUXVlcnlTdWJzY3JpcHRpb24sXG4gICAgICB1c2VMYXp5UXVlcnlTdWJzY3JpcHRpb24sXG4gICAgICB1c2VMYXp5UXVlcnkob3B0aW9ucykge1xuICAgICAgICBjb25zdCBbdHJpZ2dlciwgYXJnLCB7XG4gICAgICAgICAgcmVzZXRcbiAgICAgICAgfV0gPSB1c2VMYXp5UXVlcnlTdWJzY3JpcHRpb24ob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHF1ZXJ5U3RhdGVSZXN1bHRzID0gdXNlUXVlcnlTdGF0ZShhcmcsIHtcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgIHNraXA6IGFyZyA9PT0gVU5JTklUSUFMSVpFRF9WQUxVRVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaW5mbyA9ICgwLCBpbXBvcnRfcmVhY3QudXNlTWVtbykoKCkgPT4gKHtcbiAgICAgICAgICBsYXN0QXJnOiBhcmdcbiAgICAgICAgfSksIFthcmddKTtcbiAgICAgICAgcmV0dXJuICgwLCBpbXBvcnRfcmVhY3QudXNlTWVtbykoKCkgPT4gW3RyaWdnZXIsIHtcbiAgICAgICAgICAuLi5xdWVyeVN0YXRlUmVzdWx0cyxcbiAgICAgICAgICByZXNldFxuICAgICAgICB9LCBpbmZvXSwgW3RyaWdnZXIsIHF1ZXJ5U3RhdGVSZXN1bHRzLCByZXNldCwgaW5mb10pO1xuICAgICAgfSxcbiAgICAgIHVzZVF1ZXJ5KGFyZywgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBxdWVyeVN1YnNjcmlwdGlvblJlc3VsdHMgPSB1c2VRdWVyeVN1YnNjcmlwdGlvbihhcmcsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBxdWVyeVN0YXRlUmVzdWx0cyA9IHVzZVF1ZXJ5U3RhdGUoYXJnLCB7XG4gICAgICAgICAgc2VsZWN0RnJvbVJlc3VsdDogYXJnID09PSBza2lwVG9rZW4gfHwgKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuc2tpcCkgPyB2b2lkIDAgOiBub1BlbmRpbmdRdWVyeVN0YXRlU2VsZWN0b3IsXG4gICAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGVidWdWYWx1ZSA9IHBpY2socXVlcnlTdGF0ZVJlc3VsdHMsIC4uLkNPTU1PTl9IT09LX0RFQlVHX0ZJRUxEUyk7XG4gICAgICAgICgwLCBpbXBvcnRfcmVhY3QudXNlRGVidWdWYWx1ZSkoZGVidWdWYWx1ZSk7XG4gICAgICAgI
731HJldHVybiAoMCwgaW1wb3J0X3JlYWN0LnVzZU1lbW8pKCgpID0+ICh7XG4gICAgICAgICAgLi4ucXVlcnlTdGF0ZVJlc3VsdHMsXG4gICAgICAgICAgLi4ucXVlcnlTdWJzY3JpcHRpb25SZXN1bHRzXG4gICAgICAgIH0pLCBbcXVlcnlTdGF0ZVJlc3VsdHMsIHF1ZXJ5U3Vic2NyaXB0aW9uUmVzdWx0c10pO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gYnVpbGRJbmZpbml0ZVF1ZXJ5SG9va3MoZW5kcG9pbnROYW1lKSB7XG4gICAgY29uc3QgdXNlSW5maW5pdGVRdWVyeVN1YnNjcmlwdGlvbiA9IChhcmcsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgW3Byb21pc2VSZWYsIGRpc3BhdGNoLCBpbml0aWF0ZSwgc3RhYmxlU3Vic2NyaXB0aW9uT3B0aW9uc10gPSB1c2VRdWVyeVN1YnNjcmlwdGlvbkNvbW1vbkltcGwoZW5kcG9pbnROYW1lLCBhcmcsIG9wdGlvbnMpO1xuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uT3B0aW9uc1JlZiA9ICgwLCBpbXBvcnRfcmVhY3QudXNlUmVmKShzdGFibGVTdWJzY3JpcHRpb25PcHRpb25zKTtcbiAgICAgIHVzZVBvc3NpYmx5SW1tZWRpYXRlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc3Vic2NyaXB0aW9uT3B0aW9uc1JlZi5jdXJyZW50ID0gc3RhYmxlU3Vic2NyaXB0aW9uT3B0aW9ucztcbiAgICAgIH0sIFtzdGFibGVTdWJzY3JpcHRpb25PcHRpb25zXSk7XG4gICAgICBjb25zdCBob29rUmVmZXRjaENhY2hlZFBhZ2VzID0gb3B0aW9ucy5yZWZldGNoQ2FjaGVkUGFnZXM7XG4gICAgICBjb25zdCBzdGFibGVIb29rUmVmZXRjaENhY2hlZFBhZ2VzID0gdXNlU2hhbGxvd1N0YWJsZVZhbHVlKGhvb2tSZWZldGNoQ2FjaGVkUGFnZXMpO1xuICAgICAgY29uc3QgdHJpZ2dlciA9ICgwLCBpb
731XBvcnRfcmVhY3QudXNlQ2FsbGJhY2spKGZ1bmN0aW9uKGFyZzIsIGRpcmVjdGlvbikge1xuICAgICAgICBsZXQgcHJvbWlzZTtcbiAgICAgICAgYmF0Y2gyKCgpID0+IHtcbiAgICAgICAgICB1bnN1YnNjcmliZVByb21pc2VSZWYocHJvbWlzZVJlZik7XG4gICAgICAgICAgcHJvbWlzZVJlZi5jdXJyZW50ID0gcHJvbWlzZSA9IGRpc3BhdGNoKGluaXRpYXRlKGFyZzIsIHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbk9wdGlvbnM6IHN1YnNjcmlwdGlvbk9wdGlvbnNSZWYuY3VycmVudCxcbiAgICAgICAgICAgIGRpcmVjdGlvblxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgfSwgW3Byb21pc2VSZWYsIGRpc3BhdGNoLCBpbml0aWF0ZV0pO1xuICAgICAgdXNlUHJvbWlzZVJlZlVuc3Vic2NyaWJlT25Vbm1vdW50KHByb21pc2VSZWYpO1xuICAgICAgY29uc3Qgc3RhYmxlQXJnID0gdXNlU3RhYmxlUXVlcnlBcmdzKG9wdGlvbnMuc2tpcCA/IHNraXBUb2tlbiA6IGFyZyk7XG4gICAgICBjb25zdCByZWZldGNoID0gKDAsIGltcG9ydF9yZWFjdC51c2VDYWxsYmFjaykoKG9wdGlvbnMyKSA9PiB7XG4gICAgICAgIGlmICghcHJvbWlzZVJlZi5jdXJyZW50KSB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzOCkgOiBcIkNhbm5vdCByZWZldGNoIGEgcXVlcnkgdGhhdCBoYXMgbm90IGJlZW4gc3RhcnRlZCB5ZXQuXCIpO1xuICAgICAgICBjb25zdCBtZXJnZWRPcHRpb25zID0ge1xuICAgICAgICAgIHJlZmV0Y2hDYWNoZWRQYWdlczogKG9wdGlvbnMyID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zMi5yZWZldGNoQ2FjaGVkUGFnZXMpID8/IHN0YWJsZUhvb2tSZWZldGNoQ2FjaGVkUGFnZXNcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHByb21pc2VSZWYuY3VycmVudC5yZWZldGNoKG1lcmdlZE9wdGlvbnMpO1xuICAgICAgfSwgW3Byb21pc2VSZWYsIHN0YWJsZUhvb2tSZWZldGNoQ2FjaGVkUGFnZXNdKTtcbiAgICAgIHJldHVybiAoMCwgaW1wb3J0X3JlYWN0LnVzZU1lbW8pKCgpID0+IHtcbiAgICAgICAgY29uc3QgZmV0Y2hOZXh0UGFnZSA9ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gdHJpZ2dlcihzdGFibGVBcmcsIFwiZm9yd2FyZFwiKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmV0Y2hQcmV2aW91c1BhZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRyaWdnZXIoc3RhYmxlQXJnLCBcImJhY2t3YXJkXCIpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRyaWdnZXIsXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogQSBtZXRob2QgdG8gbWFudWFsbHkgcmVmZXRjaCBkYXRhIGZvciB0aGUgcXVlcnlcbiAgICAgICAgICAgKi9cbiAgICAgICAgICByZWZldGNoLFxuICAgICAgICAgIGZldGNoTmV4dFBhZ2UsXG4gICAgICAgICAgZmV0Y2hQcmV2aW91c1BhZ2VcbiAgICAgICAgfTtcbiAgICAgIH0sIFtyZWZldGNoLCB0cmlnZ2VyLCBzdGFibGVBcmddKTtcbiAgICB9O1xuICAgIGNvbnN0IHVzZUluZmluaXRlUXVlcnlTdGF0ZSA9IGJ1aWxkVXNlUXVlcnlTdGF0ZShlbmRwb2ludE5hbWUsIGluZmluaXRlUXVlcnlTdGF0ZVByZVNlbGVjdG9yKTtcbiAgICByZXR1cm4ge1xuICAgICAgdXNlSW5maW5pdGVRdWVyeVN0YXRlLFxuICAgICAgdXNlSW5maW5pdGVRdWVyeVN1YnNjcmlwdGlvbixcbiAgICAgIHVzZUluZmluaXRlUXVlcnkoYXJnLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICByZWZldGNoLFxuICAgICAgICAgIGZldGNoTmV4dFBhZ2UsXG4gICAgICAgICAgZmV0Y2hQcmV2aW91c1BhZ2VcbiAgICAgICAgfSA9IHVzZUluZmluaXRlUXVlcnlTdWJzY3JpcHRpb24oYXJnLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgcXVlcnlTdGF0ZVJlc3VsdHMgPSB1c2VJbmZpbml0ZVF1ZXJ5U3RhdGUoYXJnLCB7XG4gICAgICAgICAgc2VsZWN0RnJvbVJlc3VsdDogYXJnID09PSBza2lwVG9rZW4gfHwgKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuc2tpcCkgPyB2b2lkIDAgOiBub1BlbmRpbmdRdWVyeVN0YXRlU2VsZWN0b3IsXG4gICAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGVidWdWYWx1ZSA9IHBpY2socXVlcnlTdGF0ZVJlc3VsdHMsIC4uLkNPTU1PTl9IT09LX0RFQlVHX0ZJRUxEUywgXCJoYXNOZXh0UGFnZVwiLCBcImhhc1ByZXZpb3VzUGFnZVwiKTtcbiAgICAgICAgKDAsIGltcG9ydF9yZWFjdC51c2VEZWJ1Z1ZhbHVlKShkZWJ1Z1ZhbHVlKTtcbiAgICAgICAgcmV0dXJuICgwLCBpbXBvcnRfcmVhY3QudXNlTWVtbykoKCkgPT4gKHtcbiAgICAgICAgICAuLi5xdWVyeVN0YXRlUmVzdWx0cyxcbiAgICAgICAgICBmZXRjaE5leHRQYWdlLFxuICAgICAgICAgIGZldGNoUHJldmlvdXNQYWdlLFxuICAgICAgICAgIHJlZmV0Y2hcbiAgICAgICAgfSksIFtxdWVyeVN0YXRlUmVzdWx0cywgZmV0Y2hOZXh0UGFnZSwgZmV0Y2hQcmV2aW91c1BhZ2UsIHJlZmV0Y2hdKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGJ1aWxkTXV0YXRpb25Ib29rKG5hbWUpIHtcbiAgICByZXR1cm4gKHtcbiAgICAgIHNlbGVjdEZyb21SZXN1bHQsXG4gICAgICBmaXhlZENhY2hlS2V5XG4gICAgfSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHNlbGVjdCxcbiAgICAgICAgaW5pdGlhdGVcbiAgICAgIH0gPSBhcGkuZW5kcG9pbnRzW25hbWVdO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaDIoKTtcbiAgICAgIGNvbnN0IFtwcm9taXNlLCBzZXRQcm9taXNlXSA9ICgwLCBpb
731XBvcnRfcmVhY3QudXNlU3RhdGUpKCk7XG4gICAgICAoMCwgaW1wb3J0X3JlYWN0LnVzZUVmZmVjdCkoKCkgPT4gKCkgPT4ge1xuICAgICAgICBpZiAoIShwcm9taXNlID09IG51bGwgPyB2b2lkIDAgOiBwcm9taXNlLmFyZy5maXhlZENhY2hlS2V5KSkge1xuICAgICAgICAgIHByb21pc2UgPT0gbnVsbCA/IHZvaWQgMCA6IHByb21pc2UucmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgfSwgW3Byb21pc2VdKTtcbiAgICAgIGNvbnN0IHRyaWdnZXJNdXRhdGlvbiA9ICgwLCBpbXBvcnRfcmVhY3QudXNlQ2FsbGJhY2spKGZ1bmN0aW9uKGFyZykge1xuICAgICAgICBjb25zdCBwcm9taXNlMiA9IGRpc3BhdGNoKGluaXRpYXRlKGFyZywge1xuICAgICAgICAgIGZpeGVkQ2FjaGVLZXlcbiAgICAgICAgfSkpO1xuICAgICAgICBzZXRQcm9taXNlKHByb21pc2UyKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2UyO1xuICAgICAgfSwgW2Rpc3BhdGNoLCBpbml0aWF0ZSwgZml4ZWRDYWNoZUtleV0pO1xuICAgICAgY29uc3Qge1xuICAgICAgICByZXF1ZXN0SWRcbiAgICAgIH0gPSBwcm9taXNlIHx8IHt9O1xuICAgICAgY29uc3Qgc2VsZWN0RGVmYXVsdFJlc3VsdCA9ICgwLCBpbXBvcnRfcmVhY3QudXNlTWVtbykoKCkgPT4gc2VsZWN0KHtcbiAgICAgICAgZml4ZWRDYWNoZUtleSxcbiAgICAgICAgcmVxdWVzdElkOiBwcm9taXNlID09IG51bGwgPyB2b2lkIDAgOiBwcm9taXNlLnJlcXVlc3RJZFxuICAgICAgfSksIFtmaXhlZENhY2hlS2V5LCBwcm9taXNlLCBzZWxlY3RdKTtcbiAgICAgIGNvbnN0IG11dGF0aW9uU2VsZWN0b3IgPSAoMCwgaW1wb3J0X3JlYWN0LnVzZU1lbW8pKCgpID0+IHNlbGVjdEZyb21SZXN1bHQgPyBjcmVhdGVTZWxlY3RvcjIoW3NlbGVjdERlZmF1bHRSZXN1bHRdLCBzZWxlY3RGcm9tUmVzdWx0KSA6IHNlbGVjdERlZmF1bHRSZXN1bHQsIFtzZWxlY3RGcm9tUmVzdWx0LCBzZWxlY3REZWZhdWx0UmVzdWx0XSk7XG4gICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB1c2VTZWxlY3RvcjIobXV0YXRpb25TZWxlY3Rvciwgc2hhbGxvd0VxdWFsKTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsQXJncyA9IGZpeGVkQ2FjaGVLZXkgPT0gbnVsbCA/IHByb21pc2UgPT0gbnVsbCA/IHZvaWQgMCA6IHByb21pc2UuYXJnLm9yaWdpbmFsQXJncyA6IHZvaWQgMDtcbiAgICAgIGNvbnN0IHJlc2V0ID0gKDAsIGltcG9ydF9yZWFjdC51c2VDYWxsYmFjaykoKCkgPT4ge1xuICAgICAgICBiYXRjaDIoKCkgPT4ge1xuICAgICAgICAgIGlmIChwcm9taXNlKSB7XG4gICAgICAgICAgICBzZXRQcm9taXNlKHZvaWQgMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmaXhlZENhY2hlS2V5KSB7XG4gICAgICAgICAgICBkaXNwYXRjaChhcGkuaW50ZXJuYWxBY3Rpb25zLnJlbW92ZU11dGF0aW9uUmVzdWx0KHtcbiAgICAgICAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICAgICAgICBmaXhlZENhY2hlS2V5XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sIFtkaXNwYXRjaCwgZml4ZWRDYWNoZUtleSwgcHJvbWlzZSwgcmVxdWVzdElkXSk7XG4gICAgICBjb25zdCBkZWJ1Z1ZhbHVlID0gcGljayhjdXJyZW50U3RhdGUsIC4uLkNPTU1PTl9IT09LX0RFQlVHX0ZJRUxEUywgXCJlbmRwb2ludE5hbWVcIik7XG4gICAgICAoMCwgaW1wb3J0X3JlYWN0LnVzZURlYnVnVmFsdWUpKGRlYnVnVmFsdWUpO1xuICAgICAgY29uc3QgZmluYWxTdGF0ZSA9ICgwLCBpb
731XBvcnRfcmVhY3QudXNlTWVtbykoKCkgPT4gKHtcbiAgICAgICAgLi4uY3VycmVudFN0YXRlLFxuICAgICAgICBvcmlnaW5hbEFyZ3MsXG4gICAgICAgIHJlc2V0XG4gICAgICB9KSwgW2N1cnJlbnRTdGF0ZSwgb3JpZ2luYWxBcmdzLCByZXNldF0pO1xuICAgICAgcmV0dXJuICgwLCBpbXBvcnRfcmVhY3QudXNlTWVtbykoKCkgPT4gW3RyaWdnZXJNdXRhdGlvbiwgZmluYWxTdGF0ZV0sIFt0cmlnZ2VyTXV0YXRpb24sIGZpbmFsU3RhdGVdKTtcbiAgICB9O1xuICB9XG59XG52YXIgcmVhY3RIb29rc01vZHVsZU5hbWUgPSBTeW1ib2woKTtcbnZhciByZWFjdEhvb2tzTW9kdWxlID0gKHtcbiAgYmF0Y2g6IGJhdGNoMiA9IGJhdGNoLFxuICBob29rcyA9IHtcbiAgICB1c2VEaXNwYXRjaCxcbiAgICB1c2VTZWxlY3RvcixcbiAgICB1c2VTdG9yZVxuICB9LFxuICBjcmVhdGVTZWxlY3RvcjogY3JlYXRlU2VsZWN0b3IyID0gY3JlYXRlU2VsZWN0b3IsXG4gIHVuc3RhYmxlX19zaWRlRWZmZWN0c0luUmVuZGVyID0gZmFsc2UsXG4gIC4uLnJlc3Rcbn0gPSB7fSkgPT4ge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgY29uc3QgaG9va05hbWVzID0gW1widXNlRGlzcGF0Y2hcIiwgXCJ1c2VTZWxlY3RvclwiLCBcInVzZVN0b3JlXCJdO1xuICAgIGxldCB3YXJuZWQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IGhvb2tOYW1lIG9mIGhvb2tOYW1lcykge1xuICAgICAgaWYgKGNvdW50T2JqZWN0S2V5cyhyZXN0KSA+IDApIHtcbiAgICAgICAgaWYgKHJlc3RbaG9va05hbWVdKSB7XG4gICAgICAgICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIkFzIG9mIFJUSyAyLjAsIHRoZSBob29rcyBub3cgbmVlZCB0byBiZSBzcGVjaWZpZWQgYXMgb25lIG9iamVjdCwgcHJvdmlkZWQgdW5kZXIgYSBgaG9va3NgIGtleTpcXG5gcmVhY3RIb29rc01vZHVsZSh7IGhvb2tzOiB7IHVzZURpc3BhdGNoLCB1c2VTZWxlY3RvciwgdXNlU3RvcmUgfSB9KWBcIik7XG4gICAgICAgICAgICB3YXJuZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBob29rc1tob29rTmFtZV0gPSByZXN0W2hvb2tOYW1lXTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgaG9va3NbaG9va05hbWVdICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMzYpIDogYFdoZW4gdXNpbmcgY3VzdG9tIGhvb2tzIGZvciBjb250ZXh0LCBhbGwgJHtob29rTmFtZXMubGVuZ3RofSBob29rcyBuZWVkIHRvIGJlIHByb3ZpZGVkOiAke2hvb2tOYW1lcy5qb2luKFwiLCBcIil9LlxuSG9vayAke2hvb2tOYW1lfSB3YXMgZWl0aGVyIG5vdCBwcm92aWRlZCBvciBub3QgYSBmdW5jdGlvbi5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiByZWFjdEhvb2tzTW9kdWxlTmFtZSxcbiAgICBpbml0KGFwaSwge1xuICAgICAgc2VyaWFsaXplUXVlcnlBcmdzXG4gICAgfSwgY29udGV4dCkge1xuICAgICAgY29uc3QgYW55QXBpID0gYXBpO1xuICAgICAgY29uc3Qge1xuICAgICAgICBidWlsZFF1ZXJ5SG9va3MsXG4gICAgICAgIGJ1aWxkSW5maW5pdGVRdWVyeUhvb2tzLFxuICAgICAgICBidWlsZE11dGF0aW9uSG9vayxcbiAgICAgICAgdXNlUHJlZmV0Y2hcbiAgICAgIH0gPSBidWlsZEhvb2tzKHtcbiAgICAgICAgYXBpLFxuICAgICAgICBtb2R1bGVPcHRpb25zOiB7XG4gICAgICAgICAgYmF0Y2g6IGJhdGNoMixcbiAgICAgICAgICBob29rcyxcbiAgICAgICAgICB1bnN0YWJsZV9fc2lkZUVmZmVjdHNJblJlbmRlcixcbiAgICAgICAgICBjcmVhdGVTZWxlY3RvcjogY3JlYXRlU2VsZWN0b3IyXG4gICAgICAgIH0sXG4gICAgICAgIHNlcmlhbGl6ZVF1ZXJ5QXJncyxcbiAgICAgICAgY29udGV4dFxuICAgICAgfSk7XG4gICAgICBzYWZlQXNzaWduKGFueUFwaSwge1xuICAgICAgICB1c2VQcmVmZXRjaFxuICAgICAgfSk7XG4gICAgICBzYWZlQXNzaWduKGNvbnRleHQsIHtcbiAgICAgICAgYmF0Y2g6IGJhdGNoMlxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbmplY3RFbmRwb2ludChlbmRwb2ludE5hbWUsIGRlZmluaXRpb24pIHtcbiAgICAgICAgICBpZiAoaXNRdWVyeURlZmluaXRpb24oZGVmaW5pdGlvbikpIHtcbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgdXNlUXVlcnksXG4gICAgICAgICAgICAgIHVzZUxhenlRdWVyeSxcbiAgICAgICAgICAgICAgdXNlTGF6eVF1ZXJ5U3Vic2NyaXB0aW9uLFxuICAgICAgICAgICAgICB1c2VRdWVyeVN0YXRlLFxuICAgICAgICAgICAgICB1c2VRdWVyeVN1YnNjcmlwdGlvblxuICAgICAgICAgICAgfSA9IGJ1aWxkUXVlcnlIb29rcyhlbmRwb2ludE5hbWUpO1xuICAgICAgICAgICAgc2FmZUFzc2lnbihhbnlBcGkuZW5kcG9pbnRzW2VuZHBvaW50TmFtZV0sIHtcbiAgICAgICAgICAgICAgdXNlUXVlcnksXG4gICAgICAgICAgICAgIHVzZUxhenlRdWVyeSxcbiAgICAgICAgICAgICAgdXNlTGF6eVF1ZXJ5U3Vic2NyaXB0aW9uLFxuICAgICAgICAgICAgICB1c2VRdWVyeVN0YXRlLFxuICAgICAgICAgICAgICB1c2VRdWVyeVN1YnNjcmlwdGlvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcGlbYHVzZSR7Y2FwaXRhbGl6ZShlbmRwb2ludE5hbWUpfVF1ZXJ5YF0gPSB1c2VRdWVyeTtcbiAgICAgICAgICAgIGFwaVtgdXNlTGF6eSR7Y2FwaXRhbGl6ZShlbmRwb2ludE5hbWUpfVF1ZXJ5YF0gPSB1c2VMYXp5UXVlcnk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc011dGF0aW9uRGVmaW5pdGlvbihkZWZpbml0aW9uKSkge1xuICAgICAgICAgICAgY29uc3QgdXNlTXV0YXRpb24gPSBidWlsZE11dGF0aW9uSG9vayhlbmRwb2ludE5hbWUpO1xuICAgICAgICAgICAgc2FmZUFzc2lnbihhbnlBcGkuZW5kcG9pbnRzW2VuZHBvaW50TmFtZV0sIHtcbiAgICAgICAgICAgICAgdXNlTXV0YXRpb25cbiAgICAgICAgICAgI
731H0pO1xuICAgICAgICAgICAgYXBpW2B1c2Uke2NhcGl0YWxpemUoZW5kcG9pbnROYW1lKX1NdXRhdGlvbmBdID0gdXNlTXV0YXRpb247XG4gICAgICAgICAgfSBlbHNlIGlmIChpc0luZmluaXRlUXVlcnlEZWZpbml0aW9uKGRlZmluaXRpb24pKSB7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIHVzZUluZmluaXRlUXVlcnksXG4gICAgICAgICAgICAgIHVzZUluZmluaXRlUXVlcnlTdWJzY3JpcHRpb24sXG4gICAgICAgICAgICAgIHVzZUluZmluaXRlUXVlcnlTdGF0ZVxuICAgICAgICAgICAgfSA9IGJ1aWxkSW5maW5pdGVRdWVyeUhvb2tzKGVuZHBvaW50TmFtZSk7XG4gICAgICAgICAgICBzYWZlQXNzaWduKGFueUFwaS5lbmRwb2ludHNbZW5kcG9pbnROYW1lXSwge1xuICAgICAgICAgICAgICB1c2VJbmZpbml0ZVF1ZXJ5LFxuICAgICAgICAgICAgICB1c2VJbmZpbml0ZVF1ZXJ5U3Vic2NyaXB0aW9uLFxuICAgICAgICAgICAgICB1c2VJbmZpbml0ZVF1ZXJ5U3RhdGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpW2B1c2Uke2NhcGl0YWxpemUoZW5kcG9pbnROYW1lKX1JbmZpbml0ZVF1ZXJ5YF0gPSB1c2VJbmZpbml0ZVF1ZXJ5O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuZnVuY3Rpb24gQXBpUHJvdmlkZXIocHJvcHMpIHtcbiAgY29uc3QgY29udGV4dCA9IHByb3BzLmNvbnRleHQgfHwgUmVhY3RSZWR1eENvbnRleHQ7XG4gIGNvbnN0IGV4aXN0aW5nQ29udGV4dCA9ICgwLCBpb
731XBvcnRfcmVhY3QudXNlQ29udGV4dCkoY29udGV4dCk7XG4gIGlmIChleGlzdGluZ0NvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzNSkgOiBcIkV4aXN0aW5nIFJlZHV4IGNvbnRleHQgZGV0ZWN0ZWQuIElmIHlvdSBhbHJlYWR5IGhhdmUgYSBzdG9yZSBzZXQgdXAsIHBsZWFzZSB1c2UgdGhlIHRyYWRpdGlvbmFsIFJlZHV4IHNldHVwLlwiKTtcbiAgfVxuICBjb25zdCBbc3RvcmVdID0gUmVhY3QudXNlU3RhdGUoKCkgPT4gY29uZmlndXJlU3RvcmUoe1xuICAgIHJlZHVjZXI6IHtcbiAgICAgIFtwcm9wcy5hcGkucmVkdWNlclBhdGhdOiBwcm9wcy5hcGkucmVkdWNlclxuICAgIH0sXG4gICAgbWlkZGxld2FyZTogKGdETSkgPT4gZ0RNKCkuY29uY2F0KHByb3BzLmFwaS5taWRkbGV3YXJlKVxuICB9KSk7XG4gICgwLCBpbXBvcnRfcmVhY3QudXNlRWZmZWN0KSgoKSA9PiBwcm9wcy5zZXR1cExpc3RlbmVycyA9PT0gZmFsc2UgPyB2b2lkIDAgOiBzZXR1cExpc3RlbmVycyhzdG9yZS5kaXNwYXRjaCwgcHJvcHMuc2V0dXBMaXN0ZW5lcnMpLCBbcHJvcHMuc2V0dXBMaXN0ZW5lcnMsIHN0b3JlLmRpc3BhdGNoXSk7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFByb3ZpZGVyX2RlZmF1bHQsIHsgc3RvcmUsIGNvbnRleHQgfSwgcHJvcHMuY2hpbGRyZW4pO1xufVxudmFyIGNyZWF0ZUFwaSA9IGJ1aWxkQ3JlYXRlQXBpKGNvcmVNb2R1bGUoKSwgcmVhY3RIb29rc01vZHVsZSgpKTtcbmV4cG9ydCB7XG4gIEFwaVByb3ZpZGVyLFxuICBOYW1lZFNjaGVtYUVycm9yLFxuICBRdWVyeVN0YXR1cyxcbiAgVU5JTklUSUFMSVpFRF9WQUxVRSxcbiAgX05FVkVSLFxuICBidWlsZENyZWF0ZUFwaSxcbiAgY29weVdpdGhTdHJ1Y3R1cmFsU2hhcmluZyxcbiAgY29yZU1vZHVsZSxcbiAgY29yZU1vZHVsZU5hbWUsXG4gIGNyZWF0ZUFwaSxcbiAgZGVmYXVsdFNlcmlhbGl6ZVF1ZXJ5QXJncyxcbiAgZmFrZUJhc2VRdWVyeSxcbiAgZmV0Y2hCYXNlUXVlcnksXG4gIHJlYWN0SG9va3NNb2R1bGUsXG4gIHJlYWN0SG9va3NNb2R1bGVOYW1lLFxuICByZXRyeSxcbiAgc2V0dXBMaXN0ZW5lcnMsXG4gIHNraXBUb2tlblxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUByZWR1eGpzX3Rvb2xraXRfcXVlcnlfcmVhY3QuanMubWFwXG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sdUJBQXVCO0FBQzlCLFdBQVcsU0FBUyxXQUFXLFVBQVU7QUFDekMsT0FBTyx1QkFBdUI7QUFDOUIsV0FBVyxTQUFTLFdBQVcsVUFBVTtBQUN6QyxPQUFPLHdCQUF3QjtBQUMvQixXQUFXLFVBQVUsV0FBVyxXQUFXO0FBRTNDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFHUCxJQUFJLGNBQWMsUUFBUSxhQUFhLEdBQUcsQ0FBQztBQUMzQyxJQUFJLGVBQWUsUUFBUSxjQUFjLEdBQUcsQ0FBQztBQUM3QyxJQUFJLG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QkFBSSxNQUFNLFdBQVcsWUFBWSxDQUFDLFVBQVUsSUFBSTtBQUFBLFVBQ2xELFdBQVcsMEJBQTBCLFVBQVUsR0FBRztBQUNoRCxrQkFBTTtBQUFBLGNBQ0o7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLFlBQ0YsSUFBSSx3QkFBd0IsWUFBWTtBQUN4Qyx1QkFBVyxPQUFPLFVBQVUsWUFBWSxHQUFHO0FBQUEsY0FDekM7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLFlBQ0YsQ0FBQztBQUNELGdCQUFJLE1BQU0sV0FBVyxZQUFZLENBQUMsZUFBZSxJQUFJO0FBQUEsVUFDdkQ7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7QUFDQSxTQUFTLFlBQVksT0FBTztBQUMxQixRQUFNLFVBQVUsTUFBTSxXQUFXO0FBQ2pDLFFBQU0sbUJBQW1CLEdBQUcsYUFBYSxZQUFZLE9BQU87QUFDNUQsTUFBSSxpQkFBaUI7QUFDbkIsVUFBTSxJQUFJLE1BQU0sUUFBd0MsdUJBQXVCLEVBQUUsSUFBSSw4R0FBOEc7QUFBQSxFQUNyTTtBQUNBLFFBQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxTQUFTLE1BQU0sZUFBZTtBQUFBLElBQ2xELFNBQVM7QUFBQSxNQUNQLENBQUMsTUFBTSxJQUFJLFdBQVcsR0FBRyxNQUFNLElBQUk7QUFBQSxJQUNyQztBQUFBLElBQ0EsWUFBWSxDQUFDLFFBQVEsSUFBSSxFQUFFLE9BQU8sTUFBTSxJQUFJLFVBQVU7QUFBQSxFQUN4RCxDQUFDLENBQUM7QUFDRixHQUFDLEdBQUcsYUFBYSxXQUFXLE1BQU0sTUFBTSxtQkFBbUIsUUFBUSxTQUFTLGVBQWUsTUFBTSxVQUFVLE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBTSxnQkFBZ0IsTUFBTSxRQUFRLENBQUM7QUFDeEssU0FBTyxNQUFNLGNBQWMsa0JBQWtCLEVBQUUsT0FBTyxRQUFRLEdBQUcsTUFBTSxRQUFRO0FBQ2pGO0FBQ0EsSUFBSSxZQUFZLGVBQWUsV0FBVyxHQUFHLGlCQUFpQixDQUFDO0FBQy9EO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUE7IiwibmFtZXMiOltdLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMF19
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.