{"version":3,"sources":["store/form/fields.js","reportWebVitals.js","components/Utility/LogoutWarning.jsx","components/Global/Header.jsx","components/Global/Footer.jsx","images/hecc-logo-white.png","components/Alerts/Modal.jsx","components/Utility/ActivityListener.jsx","components/Global/PortalView.jsx","components/Forms/FieldSection/FieldRow.jsx","components/Forms/FieldSection/FieldSection.jsx","components/Forms/FieldSection/FieldSlot.jsx","components/Utility/RepeatableField.jsx","components/Utility/FieldValueAdapter.jsx","components/InputDecorator.js","components/MaskedDatePicker.js","components/Input.js","views/migrations/index.jsx","components/Utility/ProtectedRoute.jsx","components/DashboardDisplay/Scholarships.jsx","views/dashboard/NotificationAlert.jsx","components/DashboardDisplay/Grants.jsx","utils/dtos/ProgramApplicationInfo.js","views/dashboard/index.jsx","components/award/AwardSummary.jsx","views/awards/index.jsx","components/PrintIcon.js","components/Utility/ConvertCode.jsx","components/AwardAnnouncement.js","components/Scholarships/ScholarshipsDisplay.js","components/SearchBar.js","components/Pagination.js","components/Scholarships/AllScholarships.js","components/Scholarships/ScholarshipTabs.js","views/applications/index.jsx","components/NumericFormat.js","components/Telephone.js","components/Dropdown.js","components/Email.js","components/Numeric.js","components/LargeTextEditor.js","views/feedback/index.jsx","views/glossary/index.jsx","components/Dialog.jsx","components/ReadOnly.js","components/ReadOnlyField.js","components/AppHistory/AppSnapshotPromise.jsx","components/Checkbox.js","components/AppHistory/AppSnapshotGuard.jsx","components/AppHistory/AppSnapshotChafee.jsx","components/CollegeDisplay.js","components/AppHistory/AppSnapshotChild.jsx","utils/dtos/AnswerSet.js","utils/dtos/Question.js","components/answer/readonly/ResponseAnswerDisplay.jsx","components/ReadOnlyCheckbox.jsx","components/answer/readonly/BooleanDisplay.jsx","components/answer/readonly/ContactDisplay.jsx","components/answer/readonly/SchoolDisplay.jsx","components/answer/readonly/DegreeDisplay.jsx","components/answer/readonly/DateDisplay.jsx","components/answer/readonly/ActivityDisplay.jsx","components/answer/readonly/index.jsx","components/AppHistory/AppSnapshotScholarship.jsx","components/AppHistory/AppHistoryMobile.jsx","components/Utility/GetAppHistory.js","views/history/index.jsx","components/MessageList.jsx","views/messages/index.jsx","components/Utility/HiddenInput.jsx","components/FormSection.jsx","components/answer/status/AnswerLock.jsx","components/answer/CertifyAnswer.jsx","components/MonthYearPicker.jsx","components/answer/DateAnswer.jsx","components/answer/TextAnswer.jsx","views/profile/EditBasicInfo.jsx","components/DropdownSearch.js","components/ZipCodeInput.js","components/AddressInput.js","components/DataDriven/AddressPicker.jsx","views/profile/EditContactInfo.jsx","components/RadioGroup.js","components/SSNtext.js","components/answer/DropdownAnswer.jsx","components/BooleanRadioGroup.jsx","components/answer/BooleanAnswer.jsx","components/answer/RadioGroupAnswer.jsx","views/profile/EditAboutInfo.jsx","components/Password.js","views/profile/EditAccountInfo.jsx","components/answer/HighSchoolAnswer.jsx","components/NumericDecimal.js","components/answer/DecimalAnswer.jsx","views/field-groups/EditHighschool.jsx","utils/dtos/AnswerDto.js","utils/dtos/AnswerUpdateResult.js","utils/dtos/RequirementSet.js","utils/helper/SectionHelper.js","components/progress/SectionStateIcon.jsx","views/profile/index.jsx","views/registration/index.jsx","components/TribalApplicationPdf.js","components/CompleteSubmission.js","views/placeholder/index.jsx","components/Utility/Overlay.jsx","images/login-student.jpg","views/login/index.jsx","views/additional-scholarship-info/EditCitizenShip.jsx","views/additional-scholarship-info/EditFamilyInfo.jsx","components/Card.js","components/answer/question/RepeatableQuestion.jsx","components/DataDriven/DegreeDropdown.jsx","components/answer/CollegeHistoryAnswer.jsx","components/CollegePicker-modified.js","views/additional-scholarship-info/EditCollegeHistory.jsx","components/DataDriven/MajorsDropdown.jsx","components/answer/DegreeAnswer.jsx","components/answer/question/DegreesQuestion.jsx","views/additional-scholarship-info/EditCollegePlan.jsx","components/DataDriven/CodeDropdown.jsx","components/answer/ActivityAnswer.jsx","components/ActivityPicker/Editor.js","views/additional-scholarship-info/EditActivities.jsx","components/PDF/TranscriptCoverPagePdf.jsx","components/answer/TranscriptAnswer.jsx","components/answer/question/TranscriptQuestion.jsx","docs/HSTranscriptRequestForm.pdf","views/additional-scholarship-info/EditTranscript.jsx","components/ActivityPicker/ReadOnlyDesktop.js","components/ActivityPicker/ReadOnly.js","components/progress/ProgressBar.jsx","views/additional-scholarship-info/EditPersonalStatements.jsx","views/additional-scholarship-info/EditWorkingStudentData.jsx","components/answer/IntegerAnswer.jsx","views/additional-scholarship-info/EditHighschoolInfo.jsx","components/DataDriven/StatePicker.jsx","components/answer/CollegeChoiceAnswer.jsx","components/answer/question/ClassStanding.jsx","views/field-groups/EditCollegeOfChoice.jsx","components/Utility/ApplicationSubmitButton.jsx","views/additional-scholarship-info/TranscriptInstructions.jsx","views/additional-scholarship-info/TranscriptSummary.jsx","views/additional-scholarship-info/index.jsx","components/application/AppHeader.jsx","components/progress/ProgressBarLabel.jsx","utils/dtos/AnswerOption.js","components/DataDriven/HighschoolTypeDropdown.jsx","views/oregon-promise/CohortTable.jsx","views/oregon-promise/GpaVerificationDocument.jsx","components/TranscriptInstructions.jsx","views/oregon-promise/index.jsx","views/field-groups/CitizenshipStatus.jsx","views/chafee/index.jsx","components/DataDriven/TribeDropdown.jsx","views/otsg/index.jsx","components/answer/question/CreditsPerTerm.jsx","views/otsp/EditCollegeChoice.jsx","components/application/ProgressHeader.jsx","views/otsp/EditAboutMe.jsx","views/otsp/EditWorkingStudent.jsx","components/answer/question/BooleanGroupQuestion.jsx","views/otsp/EditLicensePlans.jsx","views/otsp/index.jsx","utils/dtos/Award.js","views/child-care-grant/EditSpringTranscripts.jsx","components/answer/section/CollegeHistorySection.jsx","views/child-care-grant/ChildCareProviderSection.jsx","components/answer/ChildAnswer.jsx","views/child-care-grant/ChildrenSection.jsx","views/child-care-grant/index.jsx","views/national-guard/index.jsx","components/ScholarshipUploader/index.jsx","components/answer/MembershipAnswer.jsx","components/application/ScholarshipProgressHeader.jsx","views/scholarship/index.jsx","views/early-learning/index.jsx","views/renew/RenewEditCollegePlan.jsx","views/renew/index.jsx","views/decline/DeclineAward.jsx","views/decline/index.jsx","views/thankyou/index.jsx","components/SapSnackbar.js","views/offer/index.jsx","index.js","utils/API.js","utils/index.js","utils/dtos/ProgramSeason.js","store/snack/actions.js","components/BasicButton.js","components/Button.jsx","store/form/state.js","store/form/actions.js","store/snack/state.js","store/reducers.js","store/auth/reducers.js","store/form/reducers.js","store/snack/reducers.js","store/index.js","utils/dtos/ProgramInfo.js","components/Utility/ProgramCodes.jsx","store/form/serializer.js","utils/dtos/ApplicationInfo.js","auth.js","components/Utility/Spinner.jsx","components/AppStatusButtons.jsx","components/Utility/SpinnerSection.jsx","store/auth/state.js","store/auth/actions.js"],"names":["FIELDS","FIRST_NAME","LAST_NAME","MIDDLE_INITIALS","BIRTHDATE","HOME_PHONE","RESIDENCE_ADDRESS","PERMANENT_ADDRESS","ALTERNATE_PHONE","GENDER__MALE","GENDER__FEMALE","GENDER__TRANSMAN","GENDER__TRANSWOMAN","GENDER__NON_BINARY","GENDER__OTHER","GENDER__NA","GED_SCORE","GED_IN_PROGRESS_FLAG","ASPIRE__MEMBER","ASPIRE__ADVISOR","ASPIRE__SITE","CORRECTIONAL_FACILITY_HS","CORRECTIONAL_FACILITY_CC","CORRECTIONAL_FACILITY_RELEASE_DATE","CORRECTIONAL_FACILITY_TYPE","CORRECTIONAL_FACILITY_NAME","CORRECTIONAL_FACILITY_VERIFICATION_ALLOW","FIFTH_YEAR_SENIOR","HIGHSCHOOL_GPA","ACT","SAT","HIGHSCHOOL_GRAD_DATE","ETHNICITY__AM_INDIAN","ETHNICITY__ASIAN","ETHNICITY__BLACK","ETHNICITY__HAWAIIAN_PI","ETHNICITY__WHITE","ETHNICITY__NA","ETHNICITY__OTHER","FAFSA_FILING_DATE","SSN","TEST_APPLICATION","OREGON_RESIDENT","WORKING__CURRENT","WORKING__NEXT_YEAR","FOSTER_CARE","EARLY_LEARNING_MAJOR","COLLEGE_DUAL_ENROLLED","OSAC_REFERRAL","PUBLICITY_RELEASE","PRIVACY_AGREEMENT","MAILING_ADDRESS","CERTIFY_IDENTITY","CITIZENSHIP_STATUS","HISPANIC","COLLEGE_STANDING","COLLEGE_CHOICE","PRIMARY_CONTACT","PRIMARY_PHONE_CELL_FLAG","ALTERNATE_PHONE_CELL_FLAG","COLLEGE_HISTORY_COMPLETE","MARITAL_STATUS","PARENTS_MARITAL_STATUS","ED_LEVEL_FATHER","ED_LEVEL_MOTHER","FIRST_GEN_IMMIGRANT","IsReceivingERDCSubsidy","ERDCSubsidyExpirationDate","CHILD_CARE_PROVIDER__NAME","CHILD_CARE_PROVIDER__ADDRESS","CHILD_CARE_PROVIDER__STATE","CHILD_CARE_PROVIDER__CITY","CHILD_CARE_PROVIDER__ZIP","CHILD_CARE_PROVIDER__PHONE","CHILD_CARE_PROVIDER__START_DATE","CHILD_CARE_PROVIDER__NEW","CHILD_CARE_PROVIDER__LISTED","CHILD_CARE_PROVIDER__REGISTERED","CHILD_CARE_PROVIDER__PARENT","CHILD_CARE_PROVIDER2__NAME","CHILD_CARE_PROVIDER2__ADDRESS","CHILD_CARE_PROVIDER2__STATE","CHILD_CARE_PROVIDER2__CITY","CHILD_CARE_PROVIDER2__ZIP","CHILD_CARE_PROVIDER2__PHONE","CHILD_CARE_PROVIDER2__START_DATE","CHILD_CARE_PROVIDER2__NEW","CHILD_CARE_PROVIDER2__LISTED","CHILD_CARE_PROVIDER2__REGISTERED","CHILD_CARE_PROVIDER2__PARENT","NATIONAL_GUARD__UNIT","NATIONAL_GUARD__CREDITS_PRESUMMER","NATIONAL_GUARD__CREDITS_FALL","NATIONAL_GUARD__CREDITS_WINTER","NATIONAL_GUARD__CREDITS_SPRING","NATIONAL_GUARD__CREDITS_POSTSUMMER","OTSG__ATTENDING_FALL_TERM","OTSG__ATTENDING_WINTER_TERM","OTSG__ATTENDING_SPRING_TERM","OTSG__ENROLLED_TRIBE","UNDERGRAD_GPA","GRADUATE_GPA","FINISHED_COMM_COLLEGE","FINISHED_BACHELORS_DEGREE","PRONOUNS__FEMALE","PRONOUNS__MALE","PRONOUNS__NEUTRAL","PRONOUNS__OTHER","CAREER_GOAL","OTHER_NAMES","AGE_CHILD","HIGHSCHOOL_TYPE","HIGHSCHOOL","CURRENT_COLLEGE","PAST_COLLEGE","DEGREES","CHAFEE__PRESUMMER_1","CHAFEE__FALL_1","CHAFEE__WINTER_1","CHAFEE__SPRING_1","CHAFEE__POSTSUMMER_1","CHAFEE__PRESUMMER_2","CHAFEE__FALL_2","CHAFEE__WINTER_2","CHAFEE__SPRING_2","CHAFEE__POSTSUMMER_2","CHAFEE__FOSTER_CARE","CHAFEE__FOSTER_DHS","CHAFEE__FOSTER_OTHER_STATE","CHAFEE__FOSTER_TRIBAL","CHAFEE__ADOPTED","CHAFEE__TRIBE","CHAFEE__OTHER_STATE_ID","CHAFEE__FOSTER_QUALIFIED","CHAFEE__ADOPTION_FINALIZED","COMM_COLLEGE_START_TERM","CHILDREN","NATIONAL_GUARD__BRANCH","PROOF_GPA__UPLOAD","PROOF_GPA__MAIL","PROOF_GPA__REGISTRAR","ACTIVITY_WORK","ACTIVITY_SCHOOL","ACTIVITY_VOLUNTEER","HAS_NO_SCHOOL_ACTIVITIES","HAS_NO_VOLUNTEER_ACTIVITIES","HAS_NO_WORK_ACTIVITIES","ACTIVITIES_COMPLETE","FALL_HS_TRANSCRIPTS_DIGITAL","FALL_HS_TRANSCRIPTS_MAIL","FALL_HS_TRANSCRIPTS_REGISTRAR","FALL_COLLEGE_TRANSCRIPTS_DIGITAL","FALL_COLLEGE_TRANSCRIPTS_MAIL","FALL_COLLEGE_TRANSCRIPTS_PRIOR_DIGITAL","FALL_COLLEGE_TRANSCRIPTS_PRIOR_MAIL","FALL_COLLEGE_TRANSCRIPTS_RECENT_DIGITAL","FALL_COLLEGE_TRANSCRIPTS_RECENT_MAIL","FALL_COLLEGE_TRANSCRIPTS_DURING_HS_DIGITAL","FALL_COLLEGE_TRANSCRIPTS_DURING_HS_MAIL","ESSAY_1","ESSAY_2","ESSAY_3","ESSAY_4","SPRING_COLLEGE_TRANSCRIPTS_DIGITAL","SPRING_COLLEGE_TRANSCRIPTS_MAIL","SPRING_HS_TRANSCRIPTS_DIGITAL","SPRING_HS_TRANSCRIPTS_MAIL","CHILD_CARE_EXPENSES_MAIL","CHILD_CARE_EXPENSES_DIGITAL","FUND_UPLOAD_MAIL","FUND_UPLOAD_DIGITAL","IS_NATIONAL_GUARD_MEMBER","IS_TEACHER_CANDIDATE_MEMBER","HAS_DEPENDENT_CHILDREN","TEACHER_WORKING","TEACHER_WORKING20HOURS","TEACHER_WORKINGKTHRU12","TEACHER_ROLE","TEACHER_DISTRICT","UNLISTED_TEACHER_DISTRICT","TEACHER_FLUENCY","TEACHER_LISENCE_BEGIN","TEACHER_LICENSE_COMPLETE","TEACHER_LICENSE_TYPE","TEACHER_LICENSE_ENDORSEMENTS","TEACHER_SCHOLARS_REFERRAL","TRANSCRIPT_QUESTIONS","SPRING_COLLEGE","name","description","mailField","uploadField","term","level","SPRING_HS","FALL_COLLEGE","FALL_COLLEGE_RECENT","FALL_COLLEGE_PRIOR","FALL_COLLEGE_DURING_HS","FALL_HS","registrarField","PROOF_OF_GPA","CHILDCARE_EXPENSES","REPEATABLE_FIELDS","ID","AnswerTypeAddressProps","ADDRESS","COUNTY","STATE","CITY","ZIP","UNLISTED_STATE_NAME","UNLISTED_CITY_NAME","UNLISTED_COLLEGECODE","AnswerTypeCollegeProps","SCHOOL_CODE","START_TERM","START_YEAR","END_TERM","END_YEAR","CREDITS","DEGREE","CODE","UNLISTED_CODE","UNLISTED_NAME","TYPE","AnswerTypeContactProps","RELATION","RELATION_UNLISTED","INCLUDE_EMAILS","EMAIL","PHONE","SEND_TEXTS","LOCATION_NAME","AnswerTypeMemberProps","FULL_NAME","QUALIFIED_BY_MEMBER","AnswerTypeNameProps","MIDDLE_NAME","AnswerTypeHighschoolProps","START","END","AnswerTypeActivityProps","TITLE","START_DATE","END_DATE","FREQUENCY","ACCOMPLISHMENTS","HOURS_PER_UNIT","TOTAL_HOURS","AnswerTypeDegreeProps","PRIMARY_MAJOR","SECONDARY_MAJOR","EXPECTED_GRADUATION_DATE","AnswerTypeChildProps","AMOUNT","CITIZENSHIP","GENDER","CHILD_CARE_NEEDED","EXTRA_CARE_NEEDED","MIDDLE_INITIAL","_FILE","AnswerTypeTranscriptProps","IS_SELECTED","IS_FILE_AVAILABLE","DELIVERY_TYPE","SCHOOL_ANSWER_ID","REVIEW_STATUS_DESCRIPTION","IS_CERTIFIED","AnswerTypeDocumentProps","TranscriptDeliveryTypes","UPLOAD","MAIL","REGISTRAR","ActivityTypeCodes","WORK","SCHOOL","VOLUNTEER","DocumentDeliveryTypes","TextFieldType","AnswerType","DateFieldType","BooleanFieldType","IsNullable","DecimalFieldType","IntegerFieldType","CollegeFieldType","Props","ContactFieldType","NameFieldType","AddressFieldType","ActivityFieldType","DegreeFieldType","HighSchoolFieldType","ChildFieldType","TranscriptFieldType","MembershipFieldType","DocumentFieldType","QuestionKeyMapping","QuestionKey","Title","IsSelectable","Question","FieldDescriptor","fieldKey","data","this","_fieldKey","_data","Name","getField","getQuestionInfo","questionKey","toLowerCase","Object","values","find","q","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","LogoutWarning","dateTime","Date","toString","parsedTime","useMemo","parse","useState","now","time","setTime","expiredTime","setExpiredTime","expirationAlertTime","setExpirationAlertTime","open","setOpen","isAlerted","setIsAlerted","isLoggedIn","useSelector","state","auth","handleClose","useEffect","interval","setInterval","clearInterval","expiration","getTokenExpiration","alertTime","setMinutes","getMinutes","logout","Dialog","onClose","aria-labelledby","aria-describedby","fullWidth","maxWidth","DialogTitle","id","DialogContent","DialogContentText","DialogActions","Button","onClick","color","Header","isProfileComplete","handleLogout","e","preventDefault","navigation","document","getElementById","body","getElementsByTagName","className","href","target","src","aria-haspopup","aria-expanded","tabIndex","classList","toggle","Footer","alt","getFullYear","Modal","title","timer","setTimeout","clearTimeout","ActivityListener","onInactivity","window","location","isModalOpen","setState","createTimer","activityHandler","_debounce","maxWait","leading","trailing","addEventListener","removeEventListener","PortalView","children","useHistory","setShowHeightOffsetDOM","form","React","props","handleScroll","y","scrollY","fromBottom","scrollHeight","footer","length","footerHeight","offsetHeight","Fragment","FieldRow","spacing","xs","FieldSection","subtitle","isRequired","isSoftRequired","style","dangerouslySetInnerHTML","__html","useStyles","makeStyles","theme","root","marginTop","paddingTop","md","repeatableFieldName","parentName","index","properties","join","RepeatableField","initialCount","count","setCount","deletedIndices","setDeletedIndices","Array","map","_","i","availableIndices","setAvailableIndices","previouslyDeletedIndices","setPreviouslyDeletedIndices","formState","existingFieldLength","_get","newIndex","Math","min","filter","actions","addDeletedRepeatableFieldId","FieldValueAdapter","isValueObject","withAutoPopulate","useFormContext","mode","setValue","getValues","reduxFieldValue","isTruthy","value","isFalsy","rootName","getRepeatableFieldRootName","deletedIdArray","repeatableFieldIndex","getRepeatableFieldIndex","includes","getRepeatableFieldId","reactHookFormValue","console","debug","displayKeys","getQueryStrings","debugMessage","FormSerializer","getQuestionKey","checkName","Error","label","inputLabel","checkRules","rules","defaultRules","required","message","assign","InputDecorator","Component","options","useController","newRules","defaultValue","render","onChange","onBlur","ref","flexGrow","background","borderRadius","height","fontSize","helperText","minDate","disableFuture","disabled","classes","errors","useTheme","error","get","dateAdapter","AdapterDateFns","InputLabel","whiteSpace","DatePicker","views","moment","maxDate","undefined","date","format","renderInput","params","TextField","onKeyPress","key","margin","variant","placeholder","inputProps","HelperTextComponent","aria-label","MigrationView","dispatch","useDispatch","methods","useForm","handleSubmit","loading","setLoading","onSubmit","a","apiClient","verifyAccount","result","IsAccountVerified","setMigration","Migration","complete","severity","request","status","failed","Failed","withDivider","FieldSlot","type","ProtectedRoute","authState","migration","initial","getAccount","scrollTop","scrollTo","to","Scholarships","details","history","display","flexDirection","alignItems","justifyContent","matched","docsRequired","membershipRequired","Tooltip","Source","isComplete","Description","Code","push","pathname","from","isScholarship","NOTIFICATION_VARIANT","NotificationAlert","notification","Icon","sx","AttentionLevel","border","padding","gridTemplateColumns","width","fontWeight","paddingRight","Message","Grants","notifications","year","item","ProgramApplicationInfo","applicationData","programData","_program","ProgramInfo","_application","ApplicationInfo","code","reviewMessage","reviewStatus","isAwarded","ParentProgramCode","getSeason","isStarted","isSubmitted","season","startEvent","isPassed","isDeadlinePassed","eventCode","getDate","combineProgramStatus","findRecentScholarshipYear","programList","p","flatMap","ActiveSeasons","Year","sort","reverse","Dashboard","isLoading","setStatus","onreadystatechange","profileComplete","setProfileComplete","getProfileStatus","fetchBasicFields","programsData","setProgramsData","applicationsData","setApplicationsData","scholarshipDigests","setScholarshipDigests","awardedScholarships","setAwardedScholarships","setNotifications","isScholarshipsLoading","isSchRenewalsLoading","appDigests","ProgramCode","listGrants","isGrant","scholarshipRecentYear","activePriorAwardedYears","listScholarships","listSchRenewals","showSchRenewalsSectionFlag","schDigest","programCode","scholarshipReviewAsNotification","startsWith","Location","getNotificationFromReviewStatus","isGrantStatusLoading","scholarships","isActive","featuredApplications","programCodes","Set","programRequests","x","getProgram","Promise","all","programs","scholarshipApps","legacyEnrichedData","enrichProgramsWithDocInfo","scholarshipsWithDocs","allNotifications","firstName","fields","goToProfile","getCardNotifications","n","ActiveScholarshipButton","appLink","isSeasonOpen","displayDate","Spinner","paddingLeft","AwardSummary","program","awards","application","app","awardNotes","Notes","AwardRow","college","setCollege","cleanStatuses","Statuses","StatusDescription","isRejectReason","some","CodeType","showItem","isRenewal","SummaryStatus","getCollege","CollegeId","Term","parseFloat","AuthorizedAmount","toFixed","DisbursedAmount","ShortName","colspan","b","Order","isAwardOffer","marginBottom","Alert","Category","Awards","anchor","useLocation","hash","allAwardsData","setAllAwardsData","allApplicationData","setAllApplicationData","awardedPrograms","AwardSummaryStatus","ReviewStatus","pendingPrograms","AwardAccordian","defaultExpanded","expanded","setExpanded","setProgram","getProgramAwards","buttonDetails","combineWithLocalAwards","Accordion","square","AccordionSummary","expandIcon","aria-controls","backgroundColor","AccordionDetails","alignText","appLookups","ApplicationYear","distinctApps","uniqWith","isEqual","recentApps","controlValues","recentAppYear","max","c","appRequests","getApplication","apps","PrintIcons","tooltip","print","viewBox","d","fill","FetchingPromises","Map","fetchValue","url","has","promise","resolve","reject","delete","set","getOption","question","option","getHS","highschool","getCode","codeType","codeInfo","getCity","cityId","city","StateAbbreviation","getCounty","countyId","county","CountyName","getMajor","majorId","major","getDegree","degreeId","degrees","parseInt","Id","getRelation","relationshipTypes","DegreePlans","DegreeId","CIPMajorId","CIPMajorId2","GraduationDate","string","old","ConvertCode","address","parents","contact","provider","isHS","isCollege","isEdLevel","isAddress","isContact","isProvider","describeCode","parent1","parent2","street","zip","FirstName","LastName","RelationshipTypeId","HomePhone","WorkPhone","Email","Address","CityId","Zip","phone","start","isNew","listed","registered","parent","AwardAnnouncement","onAccept","collegeName","setCollegeName","fieldKeys","collegeId","awardState","programAwardResults","valign","CountyId","getAddress","semesterYearDescriptor","totalAmountAwarded","toLocaleString","ScholarshipsDisplay","onSelect","listRequirements","openDialog","setOpenDialog","handleAccept","acceptAward","acceptApplicationAward","reload","source","programStatusResult","renewalMessage","isRenewScholarshipApp","boxShadow","displayRenewalMessages","statusState","IsSubmitted","IsStarted","Deadline","Desciption","columnCount","position","input","marginLeft","flex","iconButton","SearchBar","Paper","component","IconButton","InputBase","ul","listStyle","button","fontFamily","boxSizing","UsePagination","hideNextButton","hidePrevButton","repairedItems","usePagination","page","items","selected","isSCHTab","align","Tabs","withStyles","borderBottom","indicator","MuiTabs","Tab","marginRight","disableRipple","TabPanel","other","role","hidden","Box","Typography","a11yProps","pageText","SearchScope","isMembershipVerified","enrichFunction","_state","_setState","_year","_isMembershipVerified","_enrichWithApplication","event","phrase","newState","isNaN","doSearch","results","ceil","totalCount","phrases","parentProgram","currentPage","resultApps","PageOfPrograms","resultAppsWithDocs","TotalCount","SimpleTabs","startedScholarshipGetter","recommendationGetter","currentTabIndex","setCurrentTabIndex","startedScholarships","setStartedScholarships","upcomingScholarships","renewals","renewalTabOffset","recommendedTabIndex","memberTagIndex","catalogTabIndex","appsWithDocs","recommendations","setRecommendations","handleChange","newValue","loadStatus","recommendedApps","combineWithLocalApp","IsRecommended","recommendedAppsWithDocs","memberSearch","catalogSearch","number","nextTabIndex","flexWrap","paddingBottom","updatePhrase","totalPages","updatePage","CODES","OREGON_PROMISE","CHILD_CARE","CHAFEE","NATIONAL_GUARD","OTSG","Applications","NumericFormat","mask","customInput","control","pattern","listItems","Select","MenuItem","FormHelperText","addValidationToRules","additionalRules","rulesCopy","addrules","substring","LargeTextEditor","characterLimit","rows","overLimit","setOverLimit","onInput","trim","multiline","replace","onKeyUp","maxLength","Feedback","SenderName","PhoneNumber","ApplicationNumber","FeedbackType","Subject","Body","post","Dropdown","wordLimit","log","Glossary","formControl","minWidth","formControlLabel","MaxWidthDialog","buttonLabel","ReadOnly","ReadOnlyField","AppSnapshotPromise","stateObject","getNames","SchoolCode","getSchoolCode","CustomCheckbox","checked","Checkbox","booleanValue","setBooleanValue","val","inputRef","AppSnapshotGuard","textTransform","letterSpacing","AppSnapshotChafee","heading","fontStyle","lineHeight","opacity","section","CollegeDisplay","dates","end","degree","credits","getCollegeName","field","UnlistedName","colleges","listColleges","setListColleges","_listColleges","dto","endDate","StopTerm","StopYear","DegreeEarned","StartTerm","StartYear","CreditsEarned","slice","AppSnapshotChild","fieldKey1","fieldKey2","provider1","provider2","AnswerSet","answer","toUpperCase","deliveryType","DeliveryType","Status","questionKeys","Type","Stage","RequirementType","requirementType","stage","LengthUnit","MaximumLength","category","Categories","DisplayProperties","Value","ResponseAnswerDisplay","SelectedOption","Response","ReadOnlyCheckbox","updatedVal","setUpdatedVal","BooleanDisplay","ContactDisplay","Address2","SchoolDisplay","schoolName","setSchoolName","getHighSchool","highSchool","DegreeDisplay","degreeName","setDegreeName","DateDisplay","dateValue","toLocaleDateString","ActivityDisplay","AnswerDisplay","Scholarship","questionData","setQuestionData","questions","answerSet","answers","getTitleForQuestion","SpinnerSection","hasCategory","isFluff","getAll","MobileHistoryRow","appNumber","AppSnapshotScholarship","listApplications","applications","j","getHistory","obj","AppId","History","setApplications","listApps","groupedApps","reduce","v","temp","AppHistoryMobile","MuiAccordion","MessageList","listMessages","panel","isExpanded","sent","substr","Messages","messages","setMessages","FilteringOptions","MOST_RECENT","HIDDEN","sortOptions","entries","searchQuery","filteringOption","filteringParams","tips","tipsTrigger","hideIntro","setHideIntro","communications","comm","Sender","TimeSent","focusable","aria-hidden","data-testid","register","unregister","resolvedValue","FormSection","isEditable","onEditClick","onSaveClick","onCancelClick","displayOnLoad","editButtonText","isFetchingData","AnswerLock","IsLocked","IsValid","ErrorOutline","lockReason","LockReason","CertifyAnswer","isDisabled","FieldKey","MonthYearPicker","stop","step","trigger","setError","clearErrors","defaultDate","defaultMonth","getMonth","defaultYear","currentYear","yearOptions","monthOptions","months","month","setMonth","setYear","monthYear","setMonthYear","isValidMonth","isValidYear","Picker","FormControl","shrink","DateResolution","DateAnswer","resolution","fullLabel","IsLoading","TextVariant","TextAnswer","EditBasicInfo","onCancel","watch","watchLastName","watchBirthday","submitForm","onError","alertUser","validateConfirm","compareValue","genderError","setGenderError","returnValue","confirmBirthdate","setConfirmBirthdate","getAnswerByField","validate","indices","handleAddIndex","handleDeleteIndex","firstNameFieldName","middleNameFieldName","lastNameFieldName","Delete","validateDate","f","gv","standardVariant","includeUnlisted","resolvedValueDict","err","Autocomplete","getOptionLabel","getOptionSelected","blurOnSelect","zipRules","addressRules","AddressPicker","only","statesOriginal","setStatesOriginal","states","Number","stateCode","StateCode","counties","setCounties","cities","setCities","noCounties","compositeFieldname","streetAddress","getValue","unshift","chosenState","Abbreviation","EditContactInfo","reduxFormState","email","setEmail","differentMailingAddress","zipCode","ZipPlus4","ChangeEmailLink","changeEmail","userEmail","getUserEmail","relationshipItems","setRelationshipItems","relationshipOtherId","setRelationshipOtherId","r","IsObsolete","otherId","IsOther","watchAlternatePhone","watchPrimaryPhone","phoneError","poBoxRules","getReduxField","setDifferentMailingAddress","toggleMailingAddress","relationshipTypeWatch","AddressInput","FormLabel","RadioGroup","FormControlLabel","labelStyle","Radio","DropdownAnswer","setItems","getOptionsAsListItems","isSearchable","defaultListItems","BooleanRadioGroup","fieldNameValue","stringy","BooleanAnswer","isDisbled","RadioGroupAnswer","EditAboutInfo","fafsaYear","exclude","racialFields","racialError","setRacialError","watchPreferNotToAnswer","rf","watchAmericanIndian","watchAsian","watchBlack","watchHawiian","watchWhite","editSSN","setEditSSN","watchNoSsn","watchSsnLater","watchOregonResident","watchSSN","isSsnProvided","fafsaAnswer","split","fafsaStatus","setFafsaStatus","watchFafsa","minHeight","validateFafsaChoice","AlertTitle","autoComplete","EditAccountInfo","ChangePassLink","changePassword","Password","column","row","isCityDisplayed","isUnlistedCityDisplayed","highSchoolOrder","h1","h2","compareState1","State","compareState2","levenshteinDistance","s","t","arr","stripContentWords","hsName","skipWords","possibleHighSchoolSort","unlistedDistance","HighSchoolAnswer","hstype","schoolCodeFieldName","unlistedSchoolNameFieldName","isInitialSchoolUnlisted","isUnlistedHs","setUnlistedHs","listedSchool","setListedSchool","unlistedName","setUnlitedName","highschools","setHighschools","selectableTypes","schoolResults","loadHighSchools","hs","locationDescriptor","City","describeHighSchool","possibleListedHighSchools","Controller","isUnlisted","currentSchoolCode","h","schoolCode","school","schoolSelection","handlePossibleSchoolClick","Link","NumericalDecimal","numberPattern","precision","scale","wholePart","maxNumber","allowNegative","decimalRules","RegExp","DecimalAnswer","NumericDecimal","EditHighschool","hideCorrectional","NO_GPA_FLAG","FIELD_NoLetterGrades","watchGpa","watchNoLetterGrades","UnlistedHS","saveAnswers","isDeadlineImpacted","isOptionsImpacted","completion","isIncorrect","watchHighSchoolType","gedSectionRequired","watchCorrectionalFacilityType","customFacName","watchGedScoreFlag","gedScoreRequired","correctionalFacilityHsAnswer","watchCorrectionalHs","watchCorrectionalComColl","watchAspireMember","highSchoolCompletion","seniorYear","truthy","toBooleanString","readOnlyInput","isInconsistent","container","AnswerDto","_isDeleted","ReviewStatusDescription","ReviewInstructions","LockingPrograms","PlaceholderId","fieldData","self","findValue","response","keys","findResponse","isArray","findFieldEntry","fieldId","StateId","UnlistedStateName","UnlistedCityName","myDegree","myCollege","UnlistedCode","AnswerUpdateResult","_hasImpact","entry","impact","flattenedResults","Impacts","RequirementSet","QuestionRequirement","IsComplete","every","InCompleteReason","isSkipped","getSection","isDisqualifying","isDuplicated","SectionFormHelper","_sections","_isTrackingOnly","_programCode","SectionHelper","allKeys","concat","_fieldKeys","totalScore","completeScore","isTrackingOnly","fetchAnswers","answerData","updateCompletion","_updateState","subsetFilter","Index","parentGroup","_parentGroup","_ref","_title","_isCompletionVerbose","onView","onSave","onEdit","localAnswers","getAllAnswersByField","getAnswerById","exclusions","_doAnswerSave","isLegacyAnswerAggregator","rawResults","_putAnswers","successMessage","isAwardImpacted","purgeDeletedRepeatableFieldIds","completionReport","currentProgramCode","isCompletionVerbose","createOfType","getDataForAnswer","getAddEndpoint","matchingFields","getFieldKeys","fieldItem","remergedData","nextAnswerState","updatingAnswers","answerUpdateTasks","isLocked","addEndpoint","updateFromField","isDeleted","locatorDto","updateDto","put","untrackedFields","createAnswer","resultClumps","isCompletionLoading","size","DisablableLink","text","Profile","element","querySelector","scrollIntoView","behavior","sectionGroup","basicInfoState","basicInfo","create","useRef","contactInfoState","contactInfo","aboutInfoState","aboutInfo","highSchoolState","accountInfoState","accountInfo","jumpState","setJumpState","applicationRef","sections","recommendedSection","current","fetchState","scholarshipProgramData","setScholarshipProgramData","scholarshipApplicationData","setScholarshipApplicationData","scholarshipApp","recentYear","recentSeason","PrintIcon","save","view","SectionStateIcon","edit","Registration","setSaving","activeYear","setActiveYear","exclusionArray","watchNoSSN","watchSSNLater","getLatestActiveYear","TribalApplicationPdf","tribeName","setTribeName","appId","setAppId","updating","setUpdating","yearRetrieved","forEach","Font","family","fonts","styles","StyleSheet","header","sectionHeading","paragraph","thinParagraph","paragraphCenter","textAlign","bold","underlined","textDecoration","boxed","centerHeading","box","footNote","footNoteRight","emptySpace","MyDocument","fileName","blob","submissionTime","hour","minute","hour12","CompleteSubmission","applicationHelper","pdfData","applicationYear","programTitle","scholarshipsSuccessMessage","setScholarshipsSuccessMessage","Placeholder","Overlay","visible","documentElement","overflow","StudentPortalLanding","isLoginInProgress","setIsLoginInProgress","handleLogin","login","username","getUsername","account","isUserRegistered","round","random","alert","lastName","birthdate","ImgLoginStudent","EditCitizenShip","completionData","setCompletionData","getCompletionReport","EditFamilyInfo","Card","RepeatableQuestion","answerFilter","originalAnswers","addedAnswers","setAddedAnswers","deletedAnswers","setDeletedAnswers","answerTemplate","newId","minm","floor","generateRandomId","DegreeVariant","valueVariant","sortedDegrees","sortBy","SortOrder","degreeItems","CollegeHistoryAnswer","isPrior","idFieldName","currentSchoolCodeFieldName","currentCollegeNameOtherFieldName","currentStartTermFieldName","currentStartYearFieldName","currentStopTermFieldName","currentStopYearFieldName","currentDegreeFieldName","currentCreditsFieldName","collegeCode","isUnlistedCollegeSelected","termOptions","setColleges","DegreeDropdown","CollegePicker","collegePickerCallback","watchCurrent","watchPast","isCurrentCollege","collegeHistorySections","partition","handleAdd","handleDelete","CardContent","CardActions","bottom","EditCollegeHistoryInfo","commCollegeYear","bachelorYear","watchFinishedCc","watchFinishedBd","watchUndergradGpa","watchGraduateGpa","collegeCompletion","submitAnswers","completionResult","currentCollege","setCurrentCollege","pastCollege","setPastCollege","noCollegeHistory","setNoCollegeHistory","hideNoCollegeHistory","setHideNoCollegeHistory","handleToggle","noHistoryAnswer","past","majors","DegreeAnswer","degreeFieldName","primaryMajorFieldName","secondaryMajorFieldName","graduationDateFieldName","disable","MajorsDropdown","DegreesQuestion","EditCollegePlan","codes","ActivityAnswer","ActivityTypeCode","activityIdFieldName","activityTypeFieldName","titleFieldName","startDateFieldName","endDateFieldName","freqFieldName","weeklyHrsFieldName","totalHrsFieldName","responsibilitiesFieldName","StopDate","StartDate","CodeDropdown","FrequencyCode","HoursPerUnit","TotalHours","Accomplishments","ActivityEntryForm","defaultValues","EditActivities","schoolTotal","workTotal","volunteerTotal","legacySaveAnswers","setSchoolTotal","setVolunteerTotal","setWorkTotal","exceedsMaximumActivities","watchActivitySchool","watchActivityVolunteer","watchActivityWork","activityInstructions","setActivityInstructions","activityBlurb","setActivityBlurb","getTextCode","overallInstructions","activities","work","volunteer","mappedActivityList","fieldName","activityType","total","noActivities","activity","withGrid","TranscriptCoverPagePdf","fieldValues","transcriptsMail","otherHighschool","setHighschool","highschoolResult","alignContent","headerParagraph","dateTimeParagraph","appStamp","appStampId","charAt","ScanCode","memo","TranscriptAnswer","schoolAnswers","isReviewed","formLink","titleHeader","verifyOptionLabel","allowedFileExtensions","allowedMimes","ext","getMimeInstance","getType","isHighSchool","uploadError","setUploadError","hiddenFileInput","uploadAnswer","TypeLabel","mailAnswer","registrarAnswer","registrarOptionLabel","initiallySelectedAnswer","IsSelected","answerOptions","deliveryFieldName","getFieldName","property","idUploadFieldName","digitalDeliveryMethod","isDigitalDeliveryMethodSelected","isDigitalDeliveryMethodCertified","fileFieldName","idMailFieldName","mailDeliveryMethod","isMailDeliveryMethodSelected","isMailDeliveryMethodCertified","idRegistrarFieldName","registrarDeliveryMethod","isRegistrarDeliveryMethodSelected","isRegistrarDeliveryMethodCertified","Qualifier","fileInfo","setFileInfo","IsFileAvailable","getFileFromQuestionKey","file","File","handleDownload","filename","navigator","msSaveOrOpenBlob","msSaveBlob","elem","createElement","URL","createObjectURL","download","appendChild","click","removeChild","triggerUpload","selectedDeliveryType","setSelectedDeliveryType","selectedAnswer","reviewFeedbackStyle","files","fileUploaded","sizeInMb","mime","fontsize","left","TranscriptQuestion","transcriptField","qualifiedGroups","groupBy","SchoolAnswerId","answerGroup","EditTranscripts","displayInstructions","transcriptRequirements","schStatus","trascriptEndDate","getRequirementDescription","requirements","isOptional","isEitherOr","getHighSchoolTypeName","getTranscriptTitle","collegeTranscripts","fileAvailableColleges","available","transcripts","ts","collegeTranscript","hsDigitalSelected","hsMailSelected","hsRegistrarSelected","orderedTranscriptQuestions","HSTranscriptRequestForm","ReadOnlyActivityPicker","listActivities","frequency","weeklyHr","totalHr","responsibilities","setListActivities","_activities","ReadOnlyDesktop","ProgressBar","progress","EditPersonalStatements","EditWorkingStudentData","watchWorkingCurrent","watchWorkingNextYear","IntegerAnswer","EditHighSchoolInfo","embedded","excludedFields","hsType","setHsType","setGedSectionRequired","setGedScoreRequired","STATE_RETURN_TYPE","returnType","shouldExclude","_states","CollegeChoiceAnswer","unlistedCollegeCodeFieldName","noCollegeCodeFlag","yearDescriptor","defaultNoCollegeCodeFlag","StatePicker","ClassStanding","placholder","EditCollegeOfChoice","hideDualEnrolled","ApplicationSubmitButton","disableSubmit","TranscriptInstructions","transcriptInstructionTypes","isAnswerLoading","getAllAnswers","types","requirement","gradDateResponse","isAfter","getInstructionType","getAllInstructionTypes","transcriptInstructions","setTranscriptInstructions","instructions","JSON","stringify","instruction","SchoolRow","TranscriptSummary","examples","getSampleAnswerPerSchool","PROGRAM_CODE","AdditionalScholarshipInfo","useParams","blurbs","parentSection","citizenSection","workingSection","highschoolSection","collegeChoiceSection","degreeSection","collegeHistorySection","stageOne","stageThree","stageFour","stageFive","setSchStatus","setProgramData","currentSeason","schDeadlines","SchSubmitDate","PriorityEndDate","TrascriptEndDate","AppealEndDate","scholarshipAppData","setScholarshipAppData","displayBoolean","scholarshipInstructions","setScholarshipInstructions","programResult","fetchTranscriptCompletionDetails","parentCode","schStatusResult","startApplication","transcriptCompletionData","setTranscriptCompletionData","hsTranscriptRequirement","collegeHistoryCompletion","getRecommendations","recommendedPrograms","transcriptCompletion","familyInfo","citizenShipStatus","collegeHistoryInfo","workingStudentStatus","highSchoolStatus","collegePlanInfo","personalStatements","showField","setShowField","isStageTwoComplete","percentComplete","toggleSection","showFieldState","charLimit","handleCancel","currentColleges","pastColleges","isGed","setIsGed","hstInfo","setHstInfo","highSchoolTranscripts","fileAvailableSchools","hst","highschoolTranscript","highschoolType","isUnlistedCollegeChoice","setUnlistedCollegeChoice","isUnlistedCollege","showConfirmation","setShowConfirmation","actualSubmit","actualSubmission","submitApplication","updatedAppStatus","execSubmission","citizenshipItems","setCitizenshipItems","route","noCollegeHistoryAnswer","csItem","getCitizenshipCode","EditHighschoolInfo","readOnlyHs","verticalAlign","collegeOfChoice","EditCollegeHistory","sch","EditTranscript","isLoaded","AppHeader","programInfo","ProgressBarLabel","sectionRef","cursor","AnswerOption","Enabled","note","HIGHSCHOOL_CODE_TYPES","getNote","GpaVerificationDocument","getResponse","formatDate","formatString","formatPhone","match","mainHeader","sectionHeader","listItem","GpaVerificationFormLink","setAnswerData","setHighSchool","schoolInfo","useGetTranscriptInstructions","programLinks","instuctions","ORP","TRD","GED","HMSCH","CC","transcriptType","getTranscriptInstructions","OregonPromise","cohortSection","gpaSection","grantDetails","setGrantDetails","minimumGpa","getConfiguration","cohortOptionsData","setCohortOptions","cohortOptions","setApplicationData","appResult","optionResult","setDisableLetterGrades","setNoLetterGrades","watchSemester","selectedDeadline","setSelectedDeadline","deadline","disableLetterGrades","noLetterGrades","cohortWatch","cohortAnswer","setSubmitLoading","highSchoolType","HIGHSCHOOl_GPA","gpaWarning","setGpaWarning","GPA","submitRef","hsGpaAnswer","pecentComplete","completionState","goBack","defaultRoute","CitizenshipStatus","Chafee","allChafeeSection","nextSeasonData","setNextSeason","dhsContactInfo","setDhsContactInfo","grantInfo","ProgramSeason","nextResult","dhsResult","preSummerTerm2","getDeadlineDisplay","fallTerm2","winterTerm2","springTerm2","profile","foster","terms","setProgress","progressPercent","saveLoading","setSaveLoading","submitLoading","submitError","watchFosterOtherState","watchFosterTribal","watchFosterDHS","watchFosterCare","watchFosterQualified","watchFosterAdopted","watchFosterAdoptionFinalized","watchCitizenship","isEligible","setIsEligible","showCitizenshipError","setShowCitizenshipError","citizenshipAnswer","3","tribes","tribe","allAppSection","IsAvailable","watchCollege","watchFallTerm","watchWinterTerm","watchSpringTerm","watchTribe","submitDisabled","completeSectionCount","tribeRef","collegeRef","termsRef","TribeDropdown","CreditsPerTerm","includeSummer","termType","isQuarterCollege","TermAttendance","offset","_term","_name","_offset","_isActive","getEvent","subtract","creditHours","listTerms","fieldTermName","isNotAttendingFieldName","isNotAttending","isChecked","EditCollegeChoice","TermType","ProgressHeader","EditAboutMe","EditWorkingStudent","teacherWorking","teacherWorkingK12","teacherDistrict","QualifiedBooleanAnswer","qualifierFieldName","responseFieldName","BooleanGroupQuestion","allAnswers","lockExample","EditLicensePlans","licenseType","OTSP","collegePlansSection","licensingSection","aboutMeSection","Award","sumBy","awardStatus","award","StatusCode","EditSpringTranscripts","transcript","fetchTranscriptRequirements","isAttendingCollege","setIsAttendingCollege","clgWithInTenYears","setClgWithInTenYears","clgOverTenYears","setClgOverTenYears","overTenYears","gradDate","startDate","diff","CollegeHistorySection","ChildCareProviderSection","formsState","provider1ListedWatch","toBoolean","provider1RegisteredWatch","provider1ParentWatch","provider2ListedWatch","provider2RegisteredWatch","provider2ParentWatch","isProviderValid","providerListed","providerRegistered","providerParent","providerValid","secondProviderValid","show2ndProvider","setShow2ndProvider","watchERDC","isERDCRecipient","ChildAnswer","middleInitialFieldName","birthdayFieldName","genderFieldName","citizenshipFieldName","childCareFieldName","disabilityFieldName","amountRequestedFieldName","ChildrenSection","isAddDisabled","ChildCare","awardData","setAwardData","isDocumentRequested","hasStatus","collegeHistory","collegeChoice","collegePlans","providers","postAcceptanceSections","getApplicationAwardStatus","handleCollegeChange","omitField","integers","NationalGuard","OngstaTerm","watchCollegeChoice","watchCollegeStanding","watchBranch","serviceHistory","enrollment","isTermAnswered","submit","units","setUnits","resultUnits","prop","serviceRef","enrollmentRef","pointerEvents","ScholarshipUploader","maxFileSizeInMb","setFile","fileId","verifyFile","MembershipAnswer","isMemberFormDisabled","relationshipPrompt","getDisplayProperty","namePrompt","statePrompt","cityPrompt","locationPrompt","ScholarshipProgressHeader","completedSections","numberOfAnswers","numberOfCompletedSections","itemizeSections","seasonNotes","notes","appInfo","requiredAnswers","setRequiredAnswers","setCompletedSections","requiredQuestions","completedAnswers","getCompletedAnswers","filteredAnswers","getAnswers","filteredCompletedAnswers","processRequired","isQualifiedByMember","setIsQualifiedByMember","memberQuestion","getMembershipQuestion","IsQualifiedByMembership","programOverview","membershipQuestion","isQualifiedByMembership","qualifyByMemberField","fieldComponent","isRenewalStage","isApplicationStage","isLastItem","maxCharacters","striptags","getDocument","isRemovable","removeApplication","EarlyLearning","RenewEditCollegePlan","Renew","setIsLoading","programApplicationData","setProgramApplicationData","programApplicationInfo","scholarshipQuestions","programApplication","gpaError","setGpaError","DeclineAward","isCertified","setCertified","reason","declineApplicationAward","Decline","handleDeclineAward","DeclineRenewal","declineableRenewalStatuses","ThankTheDonor","notificationLink","awardsData","setAwardsData","isMessageSent","setMessageSent","authorizedAmount","SapSnackbar","snack","close","Snackbar","anchorOrigin","vertical","horizontal","autoHideDuration","action","Offer","donorData","setDonorData","isOcf","DonorCode","awardContactEmail","primaryEmail","getDonor","donor","handleAcceptAward","setSelectedAction","handleCertifyAcceptance","selectedAction","handleDeferAward","AwardContactLink","awardContactLink","AcceptScholarship","ThankYouContact","Address1","analyticsKey","process","ScrollToTop","unlisten","listen","ReactGA","initialize","gaOptions","siteSpeedSampleRate","send","hitType","search","withRouter","ReactDOM","StrictMode","store","path","host","preffix","endpoint","method","isBlob","searchParams","APIClient","Methods","GET","headers","Authorization","getIdToken","responseType","ithValue","append","POST","PUT","DELETE","axios","Reason","getCurrentYear","getApplicationStatus","opts","attachFileToQuestionKey","formData","FormData","getOptions","selectItem","checkForComplete","scope","getGedCountyList","checkForAppliedScholarships","started","getScholarships","filteringOptions","tab","actualPrograms","filteredPrograms","actualProgram","scholarship","activeSeasons","maxBy","resolvedYear","activeSeason","schProgram","isMatched","Calendar","DeadlineT","IsMembershipVerified","dateReceived","appReceived","appSubmitted","tentativeApproval","awardAmount","clientFactory","IsTabletOrMobile","useMediaQuery","query","parentFieldKey","fieldResidue","urlSearchParams","URLSearchParams","fromEntries","initialReduxFormState","getState","STATUS","ELIGIBLE","IN_PROGRESS","SUBMITTED","isPrivateScholarship","INELIGIBLE","errorMessage","combinedPrograms","stubApp","fullStubApp","addOnQuestions","info","docAwareProgramList","enrichProgramStatus","codeProp","actualCode","programStatusResultArray","catch","programAwardResult","enrichProgramAwardStatus","compareCode","calendarEvent","calendarEventCode","ProgramEvent","evnt","configurationCode","tmp","Configurations","programEvent","getDeadline","compareTerm","payload","BasicButton","TextButton","SolidButton","OutlinedButton","WhiteButton","ButtonVariants","SOLID","OUTLINE","TEXT","WHITE","OSACButton","initialFormState","deletedRepeatableFieldIds","dict","repeatableFieldKey","FormActionTypes","UPDATE_FIELD","SET_FIELD_LOADING_STATE","BULK_UPDATE_FIELDS","ADD_DELETED_REPEATABLE_FIELD_ID","PURGE_DELETED_REPEATABLE_FIELD_IDS","setFieldLoadingState","updateField","deleteRepeatableFields","deletedDict","promises","buildBaseAnswer","reduxFields","parseBulkAnswers","PresentActivity","pc","ifFileExistsAttachToQuestionKey","reactHookFormValueDict","updateBasicFields","fieldValueDict","projection","serializeBasicFieldForUpdate","updatedRepetableFieldIds","_answers_","repetableField","hasId","reduxFieldValues","AttendedStop","args","bulkUpdateFields","initialSnackState","combineReducers","initialUserState","AuthActionTypes","LOGIN","localStorage","setItem","idToken","LOGOUT","removeItem","SET_MIGRATION","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","createStore","rootReducer","applyMiddleware","thunkMiddleware","bindActionCreators","unbindedActions","PrimaryEmailContact","mostRecentSeason","seasons","SCHOLARSHIPS","FAFSA","ELP","projectCompositeFieldValues","newObj","fieldDict","answerBody","answerType","qk","getQuestionKeyLowerCase","getFieldKey","getAnswerType","compositePropKey","propValue","propKey","questionBody","IsScholarshipDocument","additionalQuestionProps","isDropdownDto","baseAnswer","warn","B2C_REGISTRATION_LOGIN_FLOW_NAME","REACT_APP_B2C_REGISTRATION_LOGIN_FLOW_NAME","B2C_TENANT","REACT_APP_B2C_TENANT","B2C_CLIENT_ID","REACT_APP_B2C_CLIENT_ID","B2C_CHANGE_EMAIL_FLOW_NAME","REACT_APP_B2C_CHANGE_EMAIL_FLOW_NAME","B2C_PASSWORD_CHANGE_FLOW_NAME","REACT_APP_B2C_PASSWORD_CHANGE_FLOW_NAME","policies","names","signUpSignIn","authorities","authority","authorityDomain","baseMsalConfig","clientId","knownAuthorities","cache","cacheLocation","storeAuthStateInCookie","system","loggerOptions","loggerCallback","containsPii","msal","Info","Verbose","Warning","msalConfig","postLogoutRedirectUri","origin","msalConfigChangeEmail","redirectUri","msalConfigChangePassword","loginRequest","scopes","msalInstance","msalInstanceChangeEmail","msalInstanceChangePassword","handleRedirectPromise","tokenResponse","loginRedirect","res","credentials","credentialType","secret","decodeToken","decodedToken","payloads","Buffer","logoutRedirect","isAuthenticated","oid","emails","exp","READY","AWARDED","QUALIFIED","QUALIFIED_PREF","APP_SOURCE","LinkButton","StatusButtons","toggleExpand","getPath","AppButton","link","AwardNotificationButton","AwardAcceptButton","RenewButton","DeclineButton","handleRemoveAward","handleStartApplication","ReviewDescriptionDisplay","studentFacingStatuses","reviewDisplay","reviewInstructions","getItem"],"mappings":"gvCACaA,EAAS,CAClBC,WAAY,aACZC,UAAW,YACXC,gBAAiB,kBACjBC,UAAW,YACXC,WAAY,aACZC,kBAAmB,oBACnBC,kBAAmB,oBACnBC,gBAAiB,kBACjBC,aAAc,eACdC,eAAgB,iBAChBC,iBAAkB,mBAClBC,mBAAoB,qBACpBC,mBAAoB,qBACpBC,cAAe,gBACfC,WAAY,aACZC,UAAW,YACXC,qBAAsB,uBACtBC,eAAgB,iBAChBC,gBAAiB,kBACjBC,aAAc,eACdC,yBAA0B,2BAC1BC,yBAA0B,2BAC1BC,mCAAoC,qCACpCC,2BAA4B,6BAC5BC,2BAA4B,6BAC5BC,yCAA0C,2CAC1CC,kBAAmB,oBACnBC,eAAgB,iBAChBC,IAAK,MACLC,IAAK,MACLC,qBAAsB,uBACtBC,qBAAsB,mBACtBC,iBAAkB,gBAClBC,iBAAkB,gBAClBC,uBAAwB,qBACxBC,iBAAkB,gBAClBC,cAAe,aACfC,iBAAkB,cAClBC,kBAAmB,oBACnBC,IAAK,MACLC,iBAAkB,mBAClBC,gBAAiB,kBACjBC,iBAAkB,mBAClBC,mBAAoB,qBACpBC,YAAa,cACbC,qBAAsB,uBACtBC,sBAAuB,wBACvBC,cAAe,gBACfC,kBAAmB,oBACnBC,kBAAmB,oBACnBC,gBAAiB,kBACjBC,iBAAkB,mBAClBC,mBAAoB,qBACpBC,SAAU,WACVC,iBAAkB,mBAClBC,eAAgB,iBAChBC,gBAAiB,kBACjBC,wBAAyB,0BACzBC,0BAA2B,4BAC3BC,yBAA0B,2BAC1BC,eAAgB,iBAChBC,uBAAwB,yBACxBC,gBAAiB,kBACjBC,gBAAiB,kBACjBC,oBAAqB,sBACrBC,uBAAwB,yBACxBC,0BAA2B,4BAC3BC,0BAA2B,4BAC3BC,6BAA8B,+BAC9BC,2BAA4B,6BAC5BC,0BAA2B,4BAC3BC,yBAA0B,2BAC1BC,2BAA4B,6BAC5BC,gCAAiC,kCACjCC,yBAA0B,2BAC1BC,4BAA6B,8BAC7BC,gCAAiC,kCACjCC,4BAA6B,8BAG7BC,2BAA4B,6BAC5BC,8BAA+B,gCAC/BC,4BAA6B,8BAC7BC,2BAA4B,6BAC5BC,0BAA2B,4BAC3BC,4BAA6B,8BAC7BC,iCAAkC,mCAClCC,0BAA2B,4BAC3BC,6BAA8B,+BAC9BC,iCAAkC,mCAClCC,6BAA8B,+BAE9BC,qBAAsB,uBACtBC,kCAAmC,oCACnCC,6BAA8B,+BAC9BC,+BAAgC,iCAChCC,+BAAgC,iCAChCC,mCAAoC,qCAGpCC,0BAA2B,4BAC3BC,4BAA6B,8BAC7BC,4BAA6B,8BAC7BC,qBAAsB,uBAEtBC,cAAe,gBACfC,aAAc,eACdC,sBAAuB,wBACvBC,0BAA2B,4BAC3BC,iBAAkB,mBAClBC,eAAgB,iBAChBC,kBAAmB,oBACnBC,gBAAiB,kBACjBC,YAAa,cACbC,YAAa,cACbC,UAAW,YACXC,gBAAiB,kBACjBC,WAAY,aAEZC,gBAAiB,kBACjBC,aAAc,eACdC,QAAS,UAETC,oBAAqB,sBACrBC,eAAgB,iBAChBC,iBAAkB,mBAClBC,iBAAkB,mBAClBC,qBAAsB,uBACtBC,oBAAqB,sBACrBC,eAAgB,iBAChBC,iBAAkB,mBAClBC,iBAAkB,mBAClBC,qBAAsB,uBACtBC,oBAAqB,sBACrBC,mBAAoB,qBACpBC,2BAA4B,6BAC5BC,sBAAuB,wBACvBC,gBAAiB,kBACjBC,cAAe,gBACfC,uBAAwB,yBACxBC,yBAA0B,2BAC1BC,2BAA4B,6BAE5BC,wBAAyB,0BACzBC,SAAU,WACVC,uBAAwB,yBACxBC,kBAAmB,oBACnBC,gBAAiB,kBACjBC,qBAAsB,uBAEtBC,cAAe,gBACfC,gBAAiB,kBACjBC,mBAAoB,qBACpBC,yBAA0B,2BAC1BC,4BAA6B,8BAC7BC,uBAAwB,yBACxBC,oBAAqB,sBACrBC,4BAA6B,8BAC7BC,yBAA0B,2BAC1BC,8BAA+B,gCAE/BC,iCAAkC,mCAClCC,8BAA+B,gCAE/BC,uCAAwC,yCACxCC,oCAAqC,sCAErCC,wCAAyC,0CACzCC,qCAAsC,uCAEtCC,2CAA4C,6CAC5CC,wCAAyC,0CAEzCC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,mCAAoC,qCACpCC,gCAAiC,kCACjCC,8BAA+B,gCAC/BC,2BAA4B,6BAC5BC,yBAA0B,2BAC1BC,4BAA6B,8BAC7BC,iBAAkB,mBAClBC,oBAAqB,sBAErBC,yBAA0B,2BAC1BC,4BAA6B,8BAC7BC,uBAAwB,yBAExBC,gBAAiB,iBACjBC,uBAAwB,wBACxBC,uBAAwB,wBACxBC,aAAc,eACdC,iBAAkB,mBAClBC,0BAA2B,2BAC3BC,gBAAiB,iBACjBC,sBAAuB,sBACvBC,yBAA0B,gCAC1BC,qBAAsB,qBACtBC,6BAA8B,6BAC9BC,0BAA2B,8BAMlBC,EAAuB,CAEhCC,eAAgB,CACZC,KAAO,2BACPC,YAAa,sBACbC,UAAY9L,EAAOoK,gCACnB2B,YAAc/L,EAAOmK,mCACrB6B,KAAO,SACPC,MAAO,WAEXC,UAAW,CACPN,KAAO,6BACPC,YAAa,0BACbC,UAAY9L,EAAOsK,2BACnByB,YAAc/L,EAAOqK,8BACrB2B,KAAO,SACPC,MAAO,cAGXE,aAAc,CACVP,KAAO,yBACPE,UAAY9L,EAAOwJ,8BACnBuC,YAAc/L,EAAOuJ,iCACrB0C,MAAO,WAGXG,oBAAoB,CAChBR,KAAM,+BACNC,YAAa,6BACbC,UAAY9L,EAAO4J,qCACnBmC,YAAc/L,EAAO2J,wCACrBsC,MAAO,WAGXI,mBAAmB,CACfT,KAAM,8BACNC,YAAa,4BACbC,UAAY9L,EAAO0J,oCACnBqC,YAAc/L,EAAOyJ,uCACrBwC,MAAO,WAGXK,uBAAwB,CACpBV,KAAM,yCACNC,YAAa,8CACbC,UAAY9L,EAAO8J,wCACnBiC,YAAc/L,EAAO6J,2CACrBoC,MAAO,WAEXM,QAAS,CACLX,KAAM,2BACNC,YAAa,yBACbC,UAAY9L,EAAOqJ,yBACnB0C,YAAc/L,EAAOoJ,4BACrBoD,eAAiBxM,EAAOsJ,8BACxB2C,MAAO,cAEXQ,aAAc,CACVb,KAAM,aACNC,YAAa,eACbC,UAAY9L,EAAO2I,gBACnBoD,YAAc/L,EAAO0I,kBACrB8D,eAAiBxM,EAAO4I,qBACxBqD,MAAO,cAEXS,mBAAoB,CAChBd,KAAM,0BACNC,YAAa,+BACbC,UAAY9L,EAAOuK,yBACnBwB,YAAc/L,EAAOwK,4BACrByB,MAAO,aAMFU,EAAoB,CAC7B3M,EAAO8G,UACP9G,EAAO6G,YACP7G,EAAO8I,gBACP9I,EAAO+I,mBACP/I,EAAO6I,cACP7I,EAAOkH,aACPlH,EAAOiH,gBACPjH,EAAOmH,QACPnH,EAAOwI,SACPxI,EAAOwL,8BAIEoB,EAAK,KAELC,EAAyB,CAClCD,KACAE,QAAS,UACTC,OAAQ,WACRC,MAAO,UACPC,KAAM,SACNC,IAAK,MACLC,oBAAqB,oBACrBC,mBAAoB,oBAGXC,EAAuB,SAEvBC,EAAyB,CAClCV,KACAW,YAAa,aACbC,WAAY,YACZC,WAAY,YACZC,SAAU,WACVC,SAAU,WACVC,QAAS,gBACTC,OAAQ,eACRC,KAAM,aACNC,cAAe,eACfC,cAAe,eACfb,oBAAqB,oBACrBC,mBAAoB,mBACpBN,QAAS,UACTC,OAAQ,WACRC,MAAO,UACPC,KAAM,SACNC,IAAK,MACLe,KAAM,QAGGC,EAAyB,CAClCtB,KACA1M,UAAW,WACXD,WAAY,YACZkO,SAAU,qBACVC,kBAAmB,uBACnBC,eAAgB,kBAChBC,MAAO,QACPrB,KAAM,SACNF,OAAQ,WACRC,MAAO,UACPG,oBAAqB,oBACrBC,mBAAoB,mBACpBF,IAAK,MACLJ,QAAS,UACTyB,MAAO,YACPC,WAAY,kBACZC,cAAe,gBAGNC,EAAwB,CACjC9B,KACA+B,UAAW,WACXR,SAAU,mBACVC,kBAAmB,uBACnBC,eAAgB,kBAChBC,MAAO,QACPnB,oBAAqB,oBACrBC,mBAAoB,mBACpBmB,MAAO,YACPE,cAAe,eACfG,oBAAqB,2BAGZC,EAAsB,CAC/BjC,KACA3M,WAAY,YACZC,UAAW,WACX4O,YAAa,cAGJC,EAA4B,CACrCnC,KACAW,YAAa,aACbyB,MAAO,gBACPC,IAAK,eACLrB,QAAS,gBACTC,OAAQ,eACRE,cAAe,eACfC,cAAe,eACfb,oBAAqB,oBACrBC,mBAAoB,mBACpBN,QAAS,UACTC,OAAQ,WACRC,MAAO,UACPC,KAAM,SACNC,IAAK,MACLe,KAAM,QAGGiB,EAA0B,CACnCtC,KACAuC,MAAO,QACPC,WAAY,YACZC,SAAU,WACVC,UAAW,gBACXrB,KAAM,mBACNsB,gBAAiB,kBACjBC,eAAgB,eAChBC,YAAa,cAGJC,EAAwB,CACjC9C,KACA+C,cAAe,aACfC,gBAAiB,cACjBC,yBAA0B,iBAC1BhC,OAAQ,YAGCiC,EAAuB,CAChClD,KACAmD,OAAQ,qBACR3P,UAAW,YACX4P,YAAa,kBACb/P,WAAY,YACZgQ,OAAQ,aACRC,kBAAmB,oBACnBC,kBAAmB,oBACnBjQ,UAAW,WACXkQ,eAAgB,gBAChBC,MAAO,SAGEC,EAA4B,CACrC1D,KACA2D,YAAa,aACbC,kBAAmB,kBACnBC,cAAe,eACflD,YAAa,aACbmD,iBAAkB,iBAClBC,0BAA2B,0BAC3BC,aAAc,cACdP,MAAO,SAGEQ,EAA0B,CACnCjE,KACA2D,YAAa,aACbK,aAAc,cACdJ,kBAAmB,kBACnBC,cAAe,eACfE,0BAA2B,0BAC3BN,MAAO,SAGES,EAA0B,CACnCC,OAAQ,SACRC,KAAM,OACNC,UAAW,aAGFC,EAAoB,CAC7BC,KAAM,MACNC,OAAQ,MACRC,UAAW,OASFC,EAAwB,CACjCP,OAAQ,SACRC,KAAM,QAIGO,EAAgB,CACzBC,WAAY,QAGHC,EAAgB,CACzBD,WAAY,QAGHE,EAAmB,CAC5BF,WAAY,UACZG,YAAY,GAGHC,EAAmB,CAC5BJ,WAAY,WAGHK,EAAmB,CAC5BL,WAAY,WAIHM,EAAmB,CAC5BN,WAAY,UACZO,MAAOzE,GAGE0E,EAAmB,CAC5BR,WAAY,UACZO,MAAO7D,GAGE+D,EAAgB,CACzBT,WAAY,OACZO,MAAOlD,GAGEqD,EAAmB,CAC5BV,WAAY,UACZO,MAAOlF,GAGEsF,EAAoB,CAC7BX,WAAY,WACZO,MAAO7C,GAGEkD,EAAkB,CAC3BZ,WAAY,SACZO,MAAOrC,GAGE2C,EAAsB,CAC/Bb,WAAY,aACZO,MAAOhD,GAGEuD,EAAiB,CAC1Bd,WAAY,YACZO,MAAOjC,GAGEyC,EAAsB,CAC/Bf,WAAY,aACZO,MAAOzB,GAGEkC,EAAsB,CAC/BhB,WAAY,aACZO,MAAOrD,GAGE+D,EAAoB,CAC7BjB,WAAY,WACZO,MAAOlB,GAME6B,GAAkB,mBAC1B1S,EAAOC,WADmB,2BAEpBsR,GAFoB,IAGvBoB,YAAa,4BACbC,MAAO,gBAJgB,cAM1B5S,EAAOE,UANmB,2BAOpBqR,GAPoB,IAQvBoB,YAAa,2BACbC,MAAO,eATgB,cAW1B5S,EAAOG,gBAXmB,2BAYpBoR,GAZoB,IAavBoB,YAAa,gCACbC,MAAO,oBAdgB,cAgB1B5S,EAAOI,UAhBmB,2BAiBpBqR,GAjBoB,IAkBvBkB,YAAa,4BACbC,MAAO,eAnBgB,cAqB1B5S,EAAOK,WArBmB,2BAsBpBkR,GAtBoB,IAuBvBoB,YAAa,YACbC,MAAO,gBAxBgB,cA0B1B5S,EAAO0D,wBA1BmB,2BA2BpBgO,GA3BoB,IA4BvBiB,YAAa,0BA5BU,cA8B1B3S,EAAO2D,0BA9BmB,2BA+BpB+N,GA/BoB,IAgCvBiB,YAAa,4BAhCU,cAkC1B3S,EAAOQ,gBAlCmB,2BAmCpB+Q,GAnCoB,IAoCvBoB,YAAa,iBACbC,MAAO,WArCgB,cAuC1B5S,EAAOM,kBAvCmB,2BAwCpB4R,GAxCoB,IAyCvBS,YAAa,mBACbC,MAAO,uBA1CgB,cA4C1B5S,EAAOO,kBA5CmB,2BA6CpB2R,GA7CoB,IA8CvBS,YAAa,mBACbC,MAAO,uBA/CgB,cAiD1B5S,EAAOS,aAjDmB,2BAkDpBiR,GAlDoB,IAmDvBiB,YAAa,aACbC,MAAO,UApDgB,cAsD1B5S,EAAOU,eAtDmB,2BAuDpBgR,GAvDoB,IAwDvBiB,YAAa,eACbC,MAAO,YAzDgB,cA2D1B5S,EAAOW,iBA3DmB,2BA4DpB+Q,GA5DoB,IA6DvBiB,YAAa,iBACbC,MAAO,eA9DgB,cAgE1B5S,EAAOY,mBAhEmB,2BAiEpB8Q,GAjEoB,IAkEvBiB,YAAa,mBACbC,MAAO,iBAnEgB,cAqE1B5S,EAAOa,mBArEmB,2BAsEpB6Q,GAtEoB,IAuEvBiB,YAAa,kBACbC,MAAO,eAxEgB,cA0E1B5S,EAAOc,cA1EmB,2BA2EpB4Q,GA3EoB,IA4EvBiB,YAAa,iBA5EU,cA8E1B3S,EAAOe,WA9EmB,2BA+EpB2Q,GA/EoB,IAgFvBiB,YAAa,cAhFU,cAkF1B3S,EAAOkB,eAlFmB,2BAmFpBwQ,GAnFoB,IAoFvBiB,YAAa,sBApFU,cAsF1B3S,EAAOmB,gBAtFmB,2BAuFpBoQ,GAvFoB,IAwFvBoB,YAAa,uBAxFU,cA0F1B3S,EAAOoB,aA1FmB,2BA2FpBmQ,GA3FoB,IA4FvBoB,YAAa,oBA5FU,cA8F1B3S,EAAOqB,yBA9FmB,2BA+FpBkQ,GA/FoB,IAgGvBoB,YAAa,uCAhGU,cAkG1B3S,EAAOwB,2BAlGmB,2BAmGpBqQ,GAnGoB,IAoGvBc,YAAa,2BACbE,cAAc,KArGS,cAuG1B7S,EAAOsB,yBAvGmB,2BAwGpBiQ,GAxGoB,IAyGvBoB,YAAa,oCAzGU,cA2G1B3S,EAAOuB,mCA3GmB,2BA4GpBkQ,GA5GoB,IA6GvBkB,YAAa,qCA7GU,cA+G1B3S,EAAOyB,2BA/GmB,2BAgHpB8P,GAhHoB,IAiHvBoB,YAAa,mCAjHU,cAmH1B3S,EAAO0B,yCAnHmB,2BAoHpB6P,GApHoB,IAqHvBoB,YAAa,2CArHU,cAuH1B3S,EAAO2B,kBAvHmB,2BAwHpB4P,GAxHoB,IAyHvBoB,YAAa,0BACbC,MAAO,qBA1HgB,cA4H1B5S,EAAO4B,eA5HmB,2BA6HpBgQ,GA7HoB,IA8HvBe,YAAa,QACbC,MAAO,8CA/HgB,cAiI1B5S,EAAO6B,IAjImB,2BAkIpB0P,GAlIoB,IAmIvBoB,YAAa,MACbC,MAAO,eApIgB,cAsI1B5S,EAAO8B,IAtImB,2BAuIpB+P,GAvIoB,IAwIvBc,YAAa,WACbC,MAAO,eAzIgB,cA2I1B5S,EAAO+B,qBA3ImB,2BA4IpB0P,GA5IoB,IA6IvBkB,YAAa,aACbC,MAAO,iCA9IgB,cAiJ1B5S,EAAOgG,0BAjJmB,2BAkJpB0L,GAlJoB,IAmJvBiB,YAAa,uBAnJU,cAqJ1B3S,EAAOiG,4BArJmB,2BAsJpByL,GAtJoB,IAuJvBiB,YAAa,yBAvJU,cAyJ1B3S,EAAOkG,4BAzJmB,2BA0JpBwL,GA1JoB,IA2JvBiB,YAAa,yBA3JU,cA6J1B3S,EAAOmG,qBA7JmB,2BA8JpBoL,GA9JoB,IA+JvBoB,YAAa,mBA/JU,cAiK1B3S,EAAOgC,qBAjKmB,2BAkKpB0P,GAlKoB,IAmKvBiB,YAAa,sBAnKU,cAqK1B3S,EAAOiC,iBArKmB,2BAsKpByP,GAtKoB,IAuKvBiB,YAAa,mBAvKU,cAyK1B3S,EAAOkC,iBAzKmB,2BA0KpBwP,GA1KoB,IA2KvBiB,YAAa,mBA3KU,cA6K1B3S,EAAOmC,uBA7KmB,2BA8KpBuP,GA9KoB,IA+KvBiB,YAAa,wBA/KU,cAiL1B3S,EAAOoC,iBAjLmB,2BAkLpBsP,GAlLoB,IAmLvBiB,YAAa,mBAnLU,cAqL1B3S,EAAOqC,cArLmB,2BAsLpBqP,GAtLoB,IAuLvBiB,YAAa,gBAvLU,cAyL1B3S,EAAOuC,kBAzLmB,2BA0LpBkP,GA1LoB,IA2LvBkB,YAAa,oBA3LU,cA6L1B3S,EAAOwC,IA7LmB,2BA8LpB+O,GA9LoB,IA+LvBoB,YAAa,yBA/LU,cAiM1B3S,EAAOyC,iBAjMmB,2BAkMpBiP,GAlMoB,IAmMvBiB,YAAa,cACbhB,YAAY,EACZiB,MAAO,oBArMgB,cAwM1B5S,EAAO0C,gBAxMmB,2BAyMpBgP,GAzMoB,IA0MvBiB,YAAa,mBA1MU,cA4M1B3S,EAAO2C,iBA5MmB,2BA6MpB+O,GA7MoB,IA8MvBiB,YAAa,qBACbC,MAAO,6CA/MgB,cAkN1B5S,EAAO4C,mBAlNmB,2BAmNpB8O,GAnNoB,IAoNvBiB,YAAa,qBACbC,MAAO,0CArNgB,cAuN1B5S,EAAO6C,YAvNmB,2BAwNpB6O,GAxNoB,IAyNvBiB,YAAa,qBAzNU,cA2N1B3S,EAAO8C,qBA3NmB,2BA4NpB4O,GA5NoB,IA6NvBiB,YAAa,2BA7NU,cA+N1B3S,EAAO+C,sBA/NmB,2BAgOpB2O,GAhOoB,IAiOvBiB,YAAa,kCAjOU,cAmO1B3S,EAAOgD,cAnOmB,2BAoOpBuO,GApOoB,IAqOvBoB,YAAa,qBArOU,cAuO1B3S,EAAOiD,kBAvOmB,2BAwOpByO,GAxOoB,IAyOvBiB,YAAa,0BAzOU,cA2O1B3S,EAAOkD,kBA3OmB,2BA4OpBwO,GA5OoB,IA6OvBiB,YAAa,uBA7OU,cA+O1B3S,EAAOmD,gBA/OmB,2BAgPpB+O,GAhPoB,IAiPvBS,YAAa,iBACbC,MAAO,qBAlPgB,cAoP1B5S,EAAOoD,iBApPmB,2BAqPpBsO,GArPoB,IAsPvBiB,YAAa,yBAtPU,cAwP1B3S,EAAOqD,mBAxPmB,2BAyPpBkO,GAzPoB,IA0PvBoB,YAAa,cACbC,MAAO,cACPC,cAAc,KA5PS,cA8P1B7S,EAAOsD,SA9PmB,2BA+PpBiO,GA/PoB,IAgQvBoB,YAAa,iBACbE,cAAc,KAjQS,cAmQ1B7S,EAAOuD,iBAnQmB,2BAoQpBgO,GApQoB,IAqQvBoB,YAAa,cACbE,cAAc,KAtQS,cAwQ1B7S,EAAOwD,eAxQmB,2BAyQpBsO,GAzQoB,IA0QvBa,YAAa,gBACbC,MAAO,UACPC,cAAc,KA5QS,cA8Q1B7S,EAAOyD,gBA9QmB,2BA+QpBuO,GA/QoB,IAgRvBW,YAAa,4BACbC,MAAO,uBAjRgB,cAoR1B5S,EAAO4D,yBApRmB,2BAqRpB8N,GArRoB,IAsRvBiB,YAAa,8BAtRU,cAwR1B3S,EAAO6D,eAxRmB,2BAyRpB0N,GAzRoB,IA0RvBoB,YAAa,YACbC,MAAO,yBACPC,cAAc,KA5RS,cA8R1B7S,EAAO8D,uBA9RmB,2BA+RpByN,GA/RoB,IAgSvBoB,YAAa,YACbC,MAAO,0BACPC,cAAc,KAlSS,cAoS1B7S,EAAO+D,gBApSmB,2BAqSpBwN,GArSoB,IAsSvBoB,YAAa,oBACbC,MAAO,2BACPC,cAAc,KAxSS,cA2S1B7S,EAAOgE,gBA3SmB,2BA4SpBuN,GA5SoB,IA6SvBoB,YAAa,oBACbC,MAAO,2BACPC,cAAc,KA/SS,cAiT1B7S,EAAOiE,oBAjTmB,2BAkTpByN,GAlToB,IAmTvBiB,YAAa,oBACbC,MAAO,gCApTgB,cAsT1B5S,EAAOmE,0BAtTmB,2BAuTpBsN,GAvToB,IAwTvBkB,YAAa,4BACbC,MAAO,kCAzTgB,cA2T1B5S,EAAOiE,oBA3TmB,2BA4TpByN,GA5ToB,IA6TvBiB,YAAa,oBACbC,MAAO,gCA9TgB,cAgU1B5S,EAAOoE,0BAhUmB,2BAiUpBmN,GAjUoB,IAkUvBoB,YAAa,gCAlUU,cAoU1B3S,EAAOqE,6BApUmB,2BAqUpBkN,GArUoB,IAsUvBoB,YAAa,mCAtUU,cAwU1B3S,EAAOsE,2BAxUmB,2BAyUpBiN,GAzUoB,IA0UvBoB,YAAa,kCA1UU,cA4U1B3S,EAAOuE,0BA5UmB,2BA6UpBgN,GA7UoB,IA8UvBoB,YAAa,iCA9UU,cAgV1B3S,EAAOwE,yBAhVmB,2BAiVpB+M,GAjVoB,IAkVvBoB,YAAa,gCAlVU,cAoV1B3S,EAAOyE,2BApVmB,2BAqVpB8M,GArVoB,IAsVvBoB,YAAa,kCAtVU,cAwV1B3S,EAAO0E,gCAxVmB,2BAyVpB+M,GAzVoB,IA0VvBkB,YAAa,0CA1VU,cA4V1B3S,EAAO2E,yBA5VmB,2BA6VpB+M,GA7VoB,IA8VvBiB,YAAa,4CA9VU,cAgW1B3S,EAAO4E,4BAhWmB,2BAiWpB8M,GAjWoB,IAkWvBiB,YAAa,yCAlWU,cAoW1B3S,EAAO6E,gCApWmB,2BAqWpB6M,GArWoB,IAsWvBiB,YAAa,+CAtWU,cAwW1B3S,EAAO8E,4BAxWmB,2BAyWpB4M,GAzWoB,IA0WvBiB,YAAa,+CA1WU,cA4W1B3S,EAAO+E,2BA5WmB,2BA6WpBwM,GA7WoB,IA8WvBoB,YAAa,iCA9WU,cAgX1B3S,EAAOgF,8BAhXmB,2BAiXpBuM,GAjXoB,IAkXvBoB,YAAa,oCAlXU,cAoX1B3S,EAAOiF,4BApXmB,2BAqXpBsM,GArXoB,IAsXvBoB,YAAa,kCAtXU,cAwX1B3S,EAAOkF,2BAxXmB,2BAyXpBqM,GAzXoB,IA0XvBoB,YAAa,iCA1XU,cA4X1B3S,EAAOmF,0BA5XmB,2BA6XpBoM,GA7XoB,IA8XvBoB,YAAa,gCA9XU,cAgY1B3S,EAAOoF,4BAhYmB,2BAiYpBmM,GAjYoB,IAkYvBoB,YAAa,kCAlYU,cAoY1B3S,EAAOqF,iCApYmB,2BAqYpBkM,GArYoB,IAsYvBoB,YAAa,0CAtYU,cAwY1B3S,EAAOsF,0BAxYmB,2BAyYpBoM,GAzYoB,IA0YvBiB,YAAa,4CA1YU,cA4Y1B3S,EAAOuF,6BA5YmB,2BA6YpBmM,GA7YoB,IA8YvBiB,YAAa,yCA9YU,cAgZ1B3S,EAAOwF,iCAhZmB,2BAiZpBkM,GAjZoB,IAkZvBiB,YAAa,+CAlZU,cAoZ1B3S,EAAOyF,6BApZmB,2BAqZpBiM,GArZoB,IAsZvBiB,YAAa,+CAtZU,cAwZ1B3S,EAAO0F,qBAxZmB,2BAyZpB6L,GAzZoB,IA0ZvBoB,YAAa,eACbE,cAAc,KA3ZS,cA6Z1B7S,EAAO2F,kCA7ZmB,2BA8ZpBkM,GA9ZoB,IA+ZvBc,YAAa,iCA/ZU,cAia1B3S,EAAO4F,6BAjamB,2BAkapBiM,GAlaoB,IAmavBc,YAAa,4BAnaU,cAqa1B3S,EAAO6F,+BAramB,2BAsapBgM,GAtaoB,IAuavBc,YAAa,8BAvaU,cAya1B3S,EAAO8F,+BAzamB,2BA0apB+L,GA1aoB,IA2avBc,YAAa,8BA3aU,cA6a1B3S,EAAO+F,mCA7amB,2BA8apB8L,GA9aoB,IA+avBc,YAAa,kCA/aU,cAib1B3S,EAAOoG,cAjbmB,2BAkbpBwL,GAlboB,IAmbvBe,YAAa,aACbC,MAAO,uBApbgB,cAsb1B5S,EAAOqG,aAtbmB,2BAubpBuL,GAvboB,IAwbvBe,YAAa,cACbC,MAAO,kBAzbgB,cA2b1B5S,EAAOsG,sBA3bmB,2BA4bpBoL,GA5boB,IA6bvBiB,YAAa,sBACbC,MAAO,gCA9bgB,cAgc1B5S,EAAOuG,0BAhcmB,2BAicpBmL,GAjcoB,IAkcvBiB,YAAa,uBACbC,MAAO,4BAncgB,cAqc1B5S,EAAOwG,iBArcmB,2BAscpBkL,GAtcoB,IAucvBiB,YAAa,mBACbC,MAAO,aAxcgB,cA0c1B5S,EAAOyG,eA1cmB,2BA2cpBiL,GA3coB,IA4cvBiB,YAAa,oBACbC,MAAO,YA7cgB,cA+c1B5S,EAAO0G,kBA/cmB,2BAgdpBgL,GAhdoB,IAidvBiB,YAAa,kBACbC,MAAO,eAldgB,cAod1B5S,EAAO2G,gBApdmB,2BAqdpB4K,GArdoB,IAsdvBoB,YAAa,gBACbC,MAAO,oBAvdgB,cAyd1B5S,EAAO4G,YAzdmB,2BA0dpB2K,GA1doB,IA2dvBoB,YAAa,cACbC,MAAO,qCA5dgB,cA+d1B5S,EAAO6G,YA/dmB,2BAgepBoL,GAheoB,IAievBU,YAAa,6BACbC,MAAO,yCAlegB,cAoe1B5S,EAAO8G,UApemB,2BAqepByK,GAreoB,IAsevBoB,YAAa,cAteU,cAwe1B3S,EAAO+G,gBAxemB,2BAyepB8K,GAzeoB,IA0evBc,YAAa,gBA1eU,cA4e1B3S,EAAOgH,WA5emB,2BA6epBqL,GA7eoB,IA8evBM,YAAa,aACbC,MAAO,cACPC,cAAc,KAhfS,cAkf1B7S,EAAO8I,gBAlfmB,2BAmfpBqJ,GAnfoB,IAofvBQ,YAAa,aACbC,MAAO,gBArfgB,cAuf1B5S,EAAO+I,mBAvfmB,2BAwfpBoJ,GAxfoB,IAyfvBQ,YAAa,aACbC,MAAO,gBA1fgB,cA4f1B5S,EAAO6I,cA5fmB,2BA6fpBsJ,GA7foB,IA8fvBQ,YAAa,aACbC,MAAO,gBA/fgB,cAigB1B5S,EAAOkJ,uBAjgBmB,2BAkgBpBwI,GAlgBoB,IAmgBvBiB,YAAa,yBAngBU,cAqgB1B3S,EAAOgJ,yBArgBmB,2BAsgBpB0I,GAtgBoB,IAugBvBiB,YAAa,2BAvgBU,cAygB1B3S,EAAOiJ,4BAzgBmB,2BA0gBpByI,GA1gBoB,IA2gBvBiB,YAAa,8BA3gBU,cA6gB1B3S,EAAOmJ,oBA7gBmB,2BA8gBpBuI,GA9gBoB,IA+gBvBiB,YAAa,yBA/gBU,cAihB1B3S,EAAOkH,aAjhBmB,2BAkhBpB4K,GAlhBoB,IAmhBvBa,YAAa,mBACbC,MAAO,qBAphBgB,cAshB1B5S,EAAOiH,gBAthBmB,2BAuhBpB6K,GAvhBoB,IAwhBvBa,YAAa,mBACbC,MAAO,qBAzhBgB,cA2hB1B5S,EAAOmH,QA3hBmB,2BA4hBpBiL,GA5hBoB,IA6hBvBO,YAAa,UACbC,MAAO,aA9hBgB,cAgiB1B5S,EAAOoH,oBAhiBmB,2BAiiBpBsK,GAjiBoB,IAkiBvBiB,YAAa,mCAliBU,cAoiB1B3S,EAAOqH,eApiBmB,2BAqiBpBqK,GAriBoB,IAsiBvBiB,YAAa,iCAtiBU,cAwiB1B3S,EAAOsH,iBAxiBmB,2BAyiBpBoK,GAziBoB,IA0iBvBiB,YAAa,mCA1iBU,cA4iB1B3S,EAAOuH,iBA5iBmB,2BA6iBpBmK,GA7iBoB,IA8iBvBiB,YAAa,mCA9iBU,cAgjB1B3S,EAAOwH,qBAhjBmB,2BAijBpBkK,GAjjBoB,IAkjBvBiB,YAAa,mCAljBU,cAojB1B3S,EAAOyH,oBApjBmB,2BAqjBpBiK,GArjBoB,IAsjBvBiB,YAAa,+BAtjBU,cAwjB1B3S,EAAO0H,eAxjBmB,2BAyjBpBgK,GAzjBoB,IA0jBvBiB,YAAa,6BA1jBU,cA4jB1B3S,EAAO2H,iBA5jBmB,2BA6jBpB+J,GA7jBoB,IA8jBvBiB,YAAa,+BA9jBU,cAgkB1B3S,EAAO4H,iBAhkBmB,2BAikBpB8J,GAjkBoB,IAkkBvBiB,YAAa,+BAlkBU,cAokB1B3S,EAAO6H,qBApkBmB,2BAqkBpB6J,GArkBoB,IAskBvBiB,YAAa,+BAtkBU,cAwkB1B3S,EAAO+G,gBAxkBmB,2BAykBpBwK,GAzkBoB,IA0kBvBoB,YAAa,aACbE,cAAc,KA3kBS,cA6kB1B7S,EAAO8H,oBA7kBmB,2BA8kBpB4J,GA9kBoB,IA+kBvBiB,YAAa,8BA/kBU,cAilB1B3S,EAAO+H,mBAjlBmB,2BAklBpB2J,GAllBoB,IAmlBvBiB,YAAa,2BAnlBU,cAqlB1B3S,EAAOgI,2BArlBmB,2BAslBpB0J,GAtlBoB,IAulBvBiB,YAAa,kCAvlBU,cAylB1B3S,EAAOiI,sBAzlBmB,2BA0lBpByJ,GA1lBoB,IA2lBvBiB,YAAa,8BA3lBU,cA6lB1B3S,EAAOkI,gBA7lBmB,2BA8lBpBwJ,GA9lBoB,IA+lBvBiB,YAAa,8BA/lBU,cAimB1B3S,EAAOmI,cAjmBmB,2BAkmBpBoJ,GAlmBoB,IAmmBvBoB,YAAa,uBAnmBU,cAqmB1B3S,EAAOoI,uBArmBmB,2BAsmBpByJ,GAtmBoB,IAumBvBc,YAAa,gCAvmBU,cAymB1B3S,EAAOqI,yBAzmBmB,2BA0mBpBqJ,GA1mBoB,IA2mBvBiB,YAAa,6CA3mBU,cA6mB1B3S,EAAOsI,2BA7mBmB,2BA8mBpBiJ,GA9mBoB,IA+mBvBoB,YAAa,2CA/mBU,cAinB1B3S,EAAOuI,wBAjnBmB,2BAknBpBgJ,GAlnBoB,IAmnBvBoB,YAAa,6BACbE,cAAc,KApnBS,cAsnB1B7S,EAAOwI,SAtnBmB,2BAunBpB8J,GAvnBoB,IAwnBvBK,YAAa,2BAxnBU,cA0nB1B3S,EAAOyI,uBA1nBmB,2BA2nBpB8I,GA3nBoB,IA4nBvBoB,YAAa,sBACbE,cAAc,KA7nBS,cA+nB1B7S,EAAO0I,kBA/nBmB,2BAgoBpB6J,GAhoBoB,IAioBvBI,YAAa,gBAjoBU,cAmoB1B3S,EAAO2I,gBAnoBmB,2BAooBpB4J,GApoBoB,IAqoBvBI,YAAa,gBAroBU,cAuoB1B3S,EAAO4I,qBAvoBmB,2BAwoBpB2J,GAxoBoB,IAyoBvBI,YAAa,gBAzoBU,cA2oB1B3S,EAAOoJ,4BA3oBmB,2BA4oBpBmJ,GA5oBoB,IA6oBvBI,YAAa,8BA7oBU,cA+oB1B3S,EAAOqJ,yBA/oBmB,2BAgpBpBkJ,GAhpBoB,IAipBvBI,YAAa,8BAjpBU,cAmpB1B3S,EAAOsJ,8BAnpBmB,2BAopBpBiJ,GAppBoB,IAqpBvBI,YAAa,8BArpBU,cAupB1B3S,EAAOuJ,iCAvpBmB,2BAwpBpBgJ,GAxpBoB,IAypBvBI,YAAa,4BAzpBU,cA2pB1B3S,EAAOwJ,8BA3pBmB,2BA4pBpB+I,GA5pBoB,IA6pBvBI,YAAa,4BA7pBU,cA+pB1B3S,EAAO6J,2CA/pBmB,2BAgqBpB0I,GAhqBoB,IAiqBvBI,YAAajH,EAAqBY,uBAAuBV,QAjqBlC,cAmqB1B5L,EAAO8J,wCAnqBmB,2BAoqBpByI,GApqBoB,IAqqBvBI,YAAajH,EAAqBY,uBAAuBV,QArqBlC,cAuqB1B5L,EAAOyJ,uCAvqBmB,2BAwqBpB8I,GAxqBoB,IAyqBvBI,YAAajH,EAAqBW,mBAAmBT,QAzqB9B,cA2qB1B5L,EAAO0J,oCA3qBmB,2BA4qBpB6I,GA5qBoB,IA6qBvBI,YAAajH,EAAqBW,mBAAmBT,QA7qB9B,cA+qB1B5L,EAAO2J,wCA/qBmB,2BAgrBpB4I,GAhrBoB,IAirBvBI,YAAajH,EAAqBU,oBAAoBR,QAjrB/B,cAmrB1B5L,EAAO4J,qCAnrBmB,2BAorBpB2I,GAprBoB,IAqrBvBI,YAAajH,EAAqBU,oBAAoBR,QArrB/B,cAurB1B5L,EAAOiB,qBAvrBmB,2BAwrBpByQ,GAxrBoB,IAyrBvBiB,YAAa,uBAzrBU,cA2rB1B3S,EAAOgB,UA3rBmB,2BA4rBpBuQ,GA5rBoB,IA6rBvBoB,YAAa,WACbC,MAAO,SA9rBgB,cAgsB1B5S,EAAO+J,QAhsBmB,2BAisBpBwH,GAjsBoB,IAksBvBoB,YAAa,aACbC,MAAO,2BAnsBgB,cAqsB1B5S,EAAOgK,QArsBmB,2BAssBpBuH,GAtsBoB,IAusBvBoB,YAAa,aACbC,MAAO,2BAxsBgB,cA0sB1B5S,EAAOiK,QA1sBmB,2BA2sBpBsH,GA3sBoB,IA4sBvBoB,YAAa,aACbC,MAAO,2BA7sBgB,cA+sB1B5S,EAAOkK,QA/sBmB,2BAgtBpBqH,GAhtBoB,IAitBvBoB,YAAa,aACbC,MAAO,wBACPE,SAAU,mVAntBa,cAqtB1B9S,EAAOmK,mCArtBmB,2BAstBpBoI,GAttBoB,IAutBvBI,YAAa,8BAvtBU,cAytB1B3S,EAAOoK,gCAztBmB,2BA0tBpBmI,GA1tBoB,IA2tBvBI,YAAa,8BA3tBU,cA6tB1B3S,EAAOqK,8BA7tBmB,2BA8tBpBkI,GA9tBoB,IA+tBvBI,YAAa,gCA/tBU,cAiuB1B3S,EAAOsK,2BAjuBmB,2BAkuBpBiI,GAluBoB,IAmuBvBI,YAAa,gCAnuBU,cAquB1B3S,EAAOwK,4BAruBmB,2BAsuBpBiI,GAtuBoB,IAuuBvBE,YAAa,6BAvuBU,cAyuB1B3S,EAAOuK,yBAzuBmB,2BA0uBpBkI,GA1uBoB,IA2uBvBE,YAAa,6BA3uBU,cA6uB1B3S,EAAOsC,iBA7uBmB,2BA8uBpBiP,GA9uBoB,IA+uBvBoB,YAAa,iBA/uBU,cAivB1B3S,EAAO6K,uBAjvBmB,2BAkvBpB6G,GAlvBoB,IAmvBvBiB,YAAa,0BAnvBU,cAqvB1B3S,EAAO2K,yBArvBmB,2BAsvBpB+G,GAtvBoB,IAuvBvBiB,YAAa,2BAvvBU,cAyvB1B3S,EAAO4K,4BAzvBmB,2BA0vBpB8G,GA1vBoB,IA2vBvBiB,YAAa,8BA3vBU,cA6vB1B3S,EAAO8K,gBA7vBmB,2BA8vBpB4G,GA9vBoB,IA+vBvBiB,YAAa,oBA/vBU,cAiwB1B3S,EAAO+K,uBAjwBmB,2BAkwBpB2G,GAlwBoB,IAmwBvBiB,YAAa,2BAnwBU,cAqwB1B3S,EAAOgL,uBArwBmB,2BAswBpB0G,GAtwBoB,IAuwBvBiB,YAAa,2BAvwBU,cAywB1B3S,EAAOiL,aAzwBmB,2BA0wBpBsG,GA1wBoB,IA2wBvBoB,YAAa,kBA3wBU,cA6wB1B3S,EAAOkL,iBA7wBmB,2BA8wBpBqG,GA9wBoB,IA+wBvBoB,YAAa,sBA/wBU,cAixB1B3S,EAAOmL,0BAjxBmB,2BAkxBpBoG,GAlxBoB,IAmxBvBoB,YAAa,8BAnxBU,cAqxB1B3S,EAAOoL,gBArxBmB,2BAsxBpBmG,GAtxBoB,IAuxBvBoB,YAAa,oBAvxBU,cAyxB1B3S,EAAOqL,sBAzxBmB,2BA0xBpBoG,GA1xBoB,IA2xBvBkB,YAAc,yBA3xBS,cA6xB1B3S,EAAOsL,yBA7xBmB,2BA8xBpBmG,GA9xBoB,IA+xBvBkB,YAAa,mCA/xBU,cAiyB1B3S,EAAOuL,qBAjyBmB,2BAkyBpBgG,GAlyBoB,IAmyBvBoB,YAAc,wBAnyBS,cAqyB1B3S,EAAOwL,6BAryBmB,2BAsyBpBkG,GAtyBoB,IAuyBvBiB,YAAa,gCAvyBU,cAyyB1B3S,EAAOyL,0BAzyBmB,2BA0yBpB8F,GA1yBoB,IA2yBvBoB,YAAa,gCA3yBU,GA+yBzBI,E,WAEF,WAAYC,EAAUC,GAAM,oBACxBC,KAAKC,UAAYH,EACjBE,KAAKE,MAAQH,E,0CAGjB,WACI,OAAOC,KAAKF,W,uBAGhB,WACI,OAAOE,KAAKE,MAAMT,c,oBAGtB,WAAe,IAAD,IACV,2BAAOO,KAAKE,MAAMN,gBAAlB,QAA8BI,KAAKE,MAAMR,aAAzC,QAAkDM,KAAKE,MAAMC,S,KAS9D,SAASC,EAASN,GACrB,IAAMC,EAAOP,EAAmBM,GAChC,OAAIC,EAGG,IAAIF,EAAgBC,EAAUC,GAF1B,KASR,IAAMM,EAAkB,SAACC,GAC5B,OAAKA,GAGLA,EAAcA,EAAYC,cACdC,OAAOC,OAAOjB,GAAoBkB,MAAK,SAAAC,GAAC,OAAIA,EAAElB,YAAYc,gBAAkBD,MAH7E,O,+ECt3CAM,EAZS,SAAAC,GAClBA,GAAeA,aAAuBC,UACxC,+BAAqBC,MAAK,YAAkD,IAA/CC,EAA8C,EAA9CA,OAAQC,EAAsC,EAAtCA,OAAQC,EAA8B,EAA9BA,OAAQC,EAAsB,EAAtBA,OAAQC,EAAc,EAAdA,QAC3DJ,EAAOH,GACPI,EAAOJ,GACPK,EAAOL,GACPM,EAAON,GACPO,EAAQP,O,kHCGDQ,EAAgB,SAAC,GAA0C,IAAD,IAAvCC,gBAAuC,OAA5B,IAAIC,MAAOC,WAAiB,EAE7DC,EAAaC,mBAAQ,kBAAMH,KAAKI,MAAML,KAAW,CAACA,IAFW,EAG3CM,mBAASL,KAAKM,OAH6B,mBAG5DC,EAH4D,KAGtDC,EAHsD,OAI7BH,mBAAS,MAJoB,mBAI5DI,EAJ4D,KAI/CC,EAJ+C,OAKbL,mBAAS,MALI,mBAK5DM,EAL4D,KAKvCC,EALuC,OAM3CP,oBAAS,GANkC,mBAM5DQ,EAN4D,KAMtDC,EANsD,OAOjCT,oBAAS,GAPwB,mBAO5DU,EAP4D,KAOjDC,EAPiD,KAQ7DC,EAAaC,aAAY,SAACC,GAAD,OAAUA,EAAMC,KAAKH,cAmCpD,SAASI,IACLP,GAAQ,GAGZ,OArCAQ,qBAAU,WACN,IAAMC,EAAWC,aACb,kBAAMhB,EAAQR,KAAKM,SACnB,KAGJ,OAAO,kBAAMmB,cAAcF,MAC5B,CAACrB,IAEJoB,qBAAU,WACN,GAAGL,EAAW,CACV,IAAMS,EAAaN,IAAKO,qBACxBjB,EAAe,IAAIV,KAAK0B,IAExB,IAAIE,EAAY,IAAI5B,KAAK0B,GAEhB,OAATE,QAAS,IAATA,KAAWC,YAAoB,OAATD,QAAS,IAATA,OAAA,EAAAA,EAAWE,cAAe,GAChDlB,EAAuBgB,MAE5B,CAACX,IAEJK,qBAAU,WACHL,IAAeF,GAAaJ,GAAuBJ,EAAOI,IACzDG,GAAQ,GACRE,GAAa,IAGdC,GAAcR,GAAeF,EAAOE,GACnCW,IAAKW,WAGV,CAACxB,IAOA,eAACyB,EAAA,EAAD,CACInB,KAAMA,EACNoB,QAASZ,EACTa,kBAAgB,cAChBC,mBAAiB,oBACjBC,WAAW,EACXC,SAAU,KANd,UAQK,cAACC,EAAA,EAAD,CAAaC,GAAG,cAAhB,6CAGD,cAACC,EAAA,EAAD,UACI,cAACC,EAAA,EAAD,CAAmBF,GAAG,2BAAtB,uDAIJ,cAACG,EAAA,EAAD,UACI,cAACC,EAAA,EAAD,CAAQC,QAASvB,EAAawB,MAAM,UAApC,2B,+DCqCDC,MA5Gf,YAA6C,EAA5BC,kBAA6B,IACpC9B,EAAeC,aAAY,SAACC,GAAD,OAAWA,EAAMC,QAA5CH,WAEF+B,EAAe,SAACC,GACpBA,EAAEC,iBACF9B,IAAKW,UAIDoB,EAAaC,SAASC,eAAe,cACrCC,EAAOF,SAASG,qBAAqB,QAAQ,GAOnD,OACE,qBAAKC,UAAU,sCAAsCjB,GAAG,gBAAxD,SACE,qBAAKiB,UAAU,UAAf,SACA,sBAAKA,UAAU,wBAAf,UACE,qBAAKA,UAAU,uBAAf,SACE,mBAAGA,UAAU,QAAQC,KAAK,IAA1B,SAA8B,sBAAMD,UAAU,UAAhB,oCAGhC,sBAAKA,UAAU,yBAAf,UACE,mBAAGC,KAAK,kCAAkCD,UAAU,+BAApD,sBACA,mBAAGE,OAAO,SAASD,KAAK,4IAA4ID,UAAU,+BAA9K,sBACA,mBAAGC,KAAK,qCAAqCD,UAAU,2BAAvD,kBAEIvC,GACE,oBAAGwC,KAAK,UAAUD,UAAU,6BAA6BZ,QAASI,EAAlE,UACE,gDADF,IAC8B,qBAAKW,IAAI,sBAM/C,qBAAKH,UAAU,4BAAf,SACE,sBAAKA,UAAU,iCAAiCjB,GAAG,aAAnD,UACItB,GACF,yBAAQ2C,gBAAc,OAAOC,gBAAc,QAAQL,UAAU,qBAAqBjB,GAAG,qBAAqBuB,SAAU,EAAGlB,QA7B/G,WAChBO,EAAWY,UAAUC,OAAO,YAC5BV,EAAKS,UAAUC,OAAO,cA2Bd,UACE,yBACA,yBACA,yBACA,sBAAMR,UAAU,UAAhB,kCAIF,sBAAKA,UAAU,qBAAf,UACE,qBAAKA,UAAU,WAAf,SACE,mBAAGA,UAAU,iCAAiCrM,KAAK,YAAYsM,KAAK,aAApE,SACE,sBAAMD,UAAU,kBAAhB,2BAGJ,qBAAKA,UAAU,WAAf,SACE,mBAAGA,UAAU,iCAAiCC,KAAK,WAAnD,SACE,sBAAMD,UAAU,kBAAhB,yBAGJ,qBAAKA,UAAU,WAAf,SACE,mBAAGA,UAAU,iCAAiCC,KAAK,UAAnD,SACE,sBAAMD,UAAU,kBAAhB,wBAGJ,qBAAKA,UAAU,WAAf,SACE,mBAAGA,UAAU,iCAAiCC,KAAK,WAAnD,SACE,sBAAMD,UAAU,kBAAhB,yBAGJ,qBAAKA,UAAU,WAAf,SACE,mBAAGA,UAAU,iCAAiCC,KAAK,YAAnD,SACE,sBAAMD,UAAU,kBAAhB,0BAGJ,qBAAKA,UAAU,iCAAf,SACE,mBAAGC,KAAK,YAAYD,UAAU,iCAA9B,SACE,sBAAMA,UAAU,kBAAhB,0BAGJ,qBAAKA,UAAU,iCAAf,SACE,mBAAGC,KAAK,YAAYD,UAAU,iCAA9B,SACE,sBAAMA,UAAU,kBAAhB,0BAGJ,qBAAKA,UAAU,iCAAf,SACE,mBAAGC,KAAK,QAAQD,UAAU,iCAA1B,SACE,sBAAMA,UAAU,kBAAhB,sBAGJ,qBAAKA,UAAU,iCAAf,SAEIvC,GACE,oBAAGwC,KAAK,UAAUD,UAAU,uDAAuDZ,QAASI,EAA5F,UACE,sBAAMQ,UAAU,kBAAhB,0BADF,IAC0D,qBAAKG,IAAI,qCCpCxEM,MA1Df,WACE,OACI,qBAAKT,UAAU,gBAAf,SACE,sBAAKA,UAAU,wBAAf,UACE,sBAAKA,UAAU,uBAAf,UACE,qBACEU,IAAI,2CACJP,ICXC,muVDaH,oBAAGH,UAAU,uBAAb,mBAAuC,IAAIxD,MAAOmE,cAAlD,kDAGF,sBAAKX,UAAU,mCAAf,UACE,oBAAIA,UAAU,sBAAd,yBACA,qBAAIA,UAAU,qBAAd,UACE,oBAAIA,UAAU,KAAd,SACE,mBAAGC,KAAK,SAASD,UAAU,OAA3B,qBAEF,oBAAIA,UAAU,KAAd,SACE,mBAAGC,KAAK,WAAWD,UAAU,OAA7B,uBAEF,oBAAIA,UAAU,KAAd,SACE,mBAAGC,KAAK,WAAWD,UAAU,OAA7B,qCAEF,oBAAIA,UAAU,KAAd,SACE,mBAAGC,KAAK,cAAcD,UAAU,OAAhC,gCAKN,sBAAKA,UAAU,gCAAf,UACE,oBAAIA,UAAU,sBAAd,qBACA,4CAEE,uBAFF,sBAIE,uBAJF,2BAQA,sBAAKA,UAAU,8BAAf,UACE,mBAAGA,UAAU,uCAAuCC,KAAK,YAAzD,SACE,sBAAMD,UAAU,UAAhB,wBAEF,mBAAGA,UAAU,wCAAwCC,KAAK,aAA1D,SACE,sBAAMD,UAAU,UAAhB,yBAEF,mBAAGA,UAAU,sCAAsCC,KAAK,WAAxD,SACE,sBAAMD,UAAU,UAAhB,mC,kBEzCD,SAASY,EAAT,GAA+E,IAAD,IAA7DvD,YAA6D,aAA/CwD,aAA+C,MAAvC,GAAuC,MAAnCf,YAAmC,MAA5B,GAA4B,MAAxBjC,mBAAwB,MAAV,aAAU,EAczF,OARAC,qBAAU,WACN,IAAIgD,EAIJ,OAHGzD,IACCyD,EAPwBC,YAAW,WACvCnD,IAAKW,WACP,MAOS,kBAAMuC,GAASE,aAAaF,MACrC,CAACzD,IAGC,eAACmB,EAAA,EAAD,CACInB,KAAMA,EACNoB,QAASZ,EACTa,kBAAgB,cAChBC,mBAAiB,oBACjBC,WAAW,EACXC,SAAU,KANd,UASQgC,GAAS,cAAC/B,EAAA,EAAD,CAAaC,GAAG,cAAhB,SAA+B8B,IAE5C,cAAC7B,EAAA,EAAD,UACI,cAACC,EAAA,EAAD,CAAmBF,GAAG,2BAAtB,SACKe,MAGT,cAACZ,EAAA,EAAD,UACI,cAACC,EAAA,EAAD,CAAQC,QAASvB,EAAawB,MAAM,UAApC,iCCwCD4B,MA5Ef,YAEE,EADEC,aAGaC,OAAOC,SAASnB,KAF9B,IAAD,EAI4BpD,mBAAS,CAC/BwE,aAAa,EACbP,MAAO,OANb,mBAISnD,EAJT,KAIgB2D,EAJhB,KAmEA,OA9CExD,qBAAU,WAON,IAAIgD,EAEDA,GAAO7C,cAAc6C,GAExB,IAAMS,EAAc,kBAAMvD,aAAY,WAE9BL,EAAM0D,aACNC,EAAS,2BACF3D,GADC,IAEJ0D,aAAa,OAGvB,OAEIG,EAAkBC,KAAU,WAC3BX,GACC7C,cAAc6C,GAElBA,EAAQS,MACV,IAAI,CACFG,QAAS,IACTC,SAAS,EACTC,UAAU,IASd,OANAhC,SAASiC,iBAAiB,YAAaL,GACvC5B,SAASiC,iBAAiB,SAASL,GACnC5B,SAASiC,iBAAiB,QAAQL,GAElCV,EAAQS,IAED,WACH3B,SAASkC,oBAAoB,YAAaN,GAC1C5B,SAASkC,oBAAoB,SAASN,GACtC5B,SAASkC,oBAAoB,QAAQN,MAG3C,IAGA,mCACE,cAACZ,EAAD,CAAOvD,KAAMM,EAAM0D,YAAaxD,YA1DhB,WAChByD,EAAS,2BACF3D,GADC,IAEJ0D,aAAa,MAuDyCR,MAAM,qDAAqDf,KAAK,+ECdnHiC,MAvDf,YAAiC,IAAZC,EAAW,EAAXA,SAAW,GAEdC,uBAEsCpF,oBAAS,IAJjC,mBAIFqF,GAJE,cAKZxE,aAAY,SAACC,GAAD,OAAWA,EAAMwE,QACGC,IAAMvF,UAAS,IANnC,mBAMvB0C,EANuB,KAuC9B,OAvC8B,KAOP7B,aAAY,SAACC,GAAD,OAAWA,EAAMC,QAA5CH,WAGKuE,EAASK,MAAM1O,KAE5BmK,qBAAU,WAER,IAAMwE,EAAeb,KAAU,WAC7B,IAAMc,EAAIpB,OAAOqB,QAEXC,EAAc7C,SAASE,KAAK4C,aAAeH,EAE3CI,EAAS/C,SAASG,qBAAqB,UAC7C,GAAG4C,EAAOC,OAAO,CACf,IAAMC,EAAeF,EAAO,GAAGG,aAG7BZ,EADCK,EAAI,IAAOE,EAAwB,EAAbI,EAAiB,IAAM,MAOlD,IAAI,CACJjB,UAAU,EACVD,SAAS,IAGX,OADAR,OAAOU,iBAAiB,SAAUS,GAC3B,kBAAMnB,OAAOW,oBAAoB,SAAUQ,MAElD,IAGA,cAAC,IAAMS,SAAP,UACE,sBAAK/C,UAAU,iCAAf,UACE,cAAC,EAAD,CAAQT,kBAAmBA,IAC3B,cAAC,EAAD,IACA,qBAAKS,UAAU,kBAAf,SACE,qBAAKA,UAAU,qBAAf,SACGgC,MAGL,cAAC,EAAD,U,QChDOgB,EARE,SAAC,GAA+C,EAA7CC,QAA6C,EAAhCC,GAAiC,IAAxBlB,EAAuB,EAAvBA,SAAaK,EAAU,2CAC/D,OACE,6CAAKrC,UAAU,mBAAsBqC,GAArC,aACGL,MCsBQmB,EAzBM,SAAC,GAAuE,IAArEtC,EAAoE,EAApEA,MAAOuC,EAA6D,EAA7DA,SAAUpB,EAAmD,EAAnDA,SAAUqB,EAAyC,EAAzCA,WAAYC,EAA6B,EAA7BA,eAA6B,6EAC1F,OACE,sBAAKtD,UAAU,uBAAf,YAEMa,GACA,qBAAIb,UAAU,sBAAd,UAAqCa,EACnCwC,GAAc,sBAAME,MAAO,CAAClE,MAAO,OAArB,gBACdiE,IAAmBD,EAAY,sBAAME,MAAO,CAAClE,MAAO,OAArB,gBAAyC,UAK1E+D,GACA,mBAAGI,wBAAyB,CAACC,OAAQL,KAGvCpB,GACA,qBAAKhC,UAAU,gCAAf,SACGgC,Q,UChBL0B,EAAYC,aAAW,SAACC,GAAD,MAAY,CACrCC,KAAM,SAAAxB,GAAK,MAAK,CACdyB,UAAWzB,EAAM0B,WAAaH,EAAMX,QAAQ,KAAO,QAa1CE,EATM,SAAC,GAA0D,EAAxDa,GAAwD,EAAhDd,GAAiD,IAAxClB,EAAuC,EAAvCA,SAA6BK,GAAU,EAA7BrC,UAA6B,mDAC5D0D,IAChB,OACE,6CAAK1D,UAAU,oBAAuBqC,GAAtC,aACGL,M,uGCTIiC,GAAsB,SAACC,GAA4C,IAAC,IAAjCC,EAAgC,uDAAxB,KAAwB,mBAAfC,EAAe,iCAAfA,EAAe,kBAC9E,MAAM,GAAN,OAAUF,EAAV,YAAwBC,EAAxB,YAAiCC,EAAWxB,OAAS,IAAM,IAA3D,OAAgEwB,EAAWC,KAAK,OAiEnEC,GA9DS,SAAC,GAA0C,IAAxC3Q,EAAuC,EAAvCA,KAAuC,IAAjC4Q,oBAAiC,MAAlB,EAAkB,EAAfvC,EAAe,EAAfA,SAAe,EAEtCnF,mBAAS0H,GAF6B,mBAEzDC,EAFyD,KAElDC,EAFkD,OAGpB5H,mBAAS,IAHW,mBAGzD6H,EAHyD,KAGzCC,EAHyC,OAIhB9H,mBAAS,YAAI,IAAI+H,MAAMJ,IAAQK,KAAI,SAACC,EAAGC,GAAJ,OAAUA,MAJ7B,mBAIzDC,EAJyD,KAIvCC,EAJuC,OAOApI,mBAAS,IAPT,mBAOzDqI,EAPyD,KAO/BC,EAP+B,KAU1DC,EAAY1H,aAAY,SAAAC,GAAK,OAAIA,EAAMwE,QACvCkD,EAAsBC,IAAKF,EAAD,iBAAsBzR,EAAtB,WAAqC,GAGrEmK,qBAAU,WACJuH,EAAsB,IACxBJ,EAAoB,YAAI,IAAIL,MAAMS,IAAsBR,KAAI,SAACC,EAAGC,GAAJ,OAAUA,MACtEN,EAASY,MAEV,CAACA,IAwCJ,OAAOrD,EAASgD,GAtCE,WAChB,IAAIO,EAEAb,EAAe9B,QAEjB2C,EAAWC,KAAKC,IAAL,MAAAD,KAAI,YAAQd,IACvBC,EAAkBD,EAAegB,QAAO,SAAAX,GAAC,OAAIA,IAAMQ,OAInDd,GADAc,EAAWf,GACS,GAEtBS,EAAoB,GAAD,mBACdD,GADc,CAEjBO,QAIiB,SAACpB,GAAD,OAAW,WAC9B,IAAMpF,EAAKuG,IAAKF,EAAD,iBAAsBzR,EAAtB,aAA+BwQ,EAA/B,SAA6C,IAChD,IAARpF,GACF4G,IAAQC,4BAA4B,CAClCjS,OACAoL,OAIJ4F,EAAkB,GAAD,mBACZD,GADY,CAEfP,KAEFc,EAAoBD,EAAiBU,QAAO,SAAAX,GAAC,OAAIA,IAAMZ,MACvDgB,EAA4B,2BACvBD,GADsB,kBAExBf,EAAQ,QAI8Ce,ICS9CW,OAnEf,YAAsF,IAAD,EAAxDlS,EAAwD,EAAxDA,KAAwD,IAAlDmS,qBAAkD,aAA3BC,wBAA2B,WAIlBC,YAAe,CAAEC,KAAM,WAA9EC,EAJyE,EAIzEA,SAAUC,EAJ+D,EAI/DA,UAEZf,GAN2E,EAIpDA,UAEX1H,aAAY,SAACC,GAAD,OAAWA,EAAMwE,SACzCiE,EAAkBd,IAAKF,EAAD,iBAAsBzR,EAAtB,WAEtB0S,EAAW,SAACC,GAAD,MAA4B,kBAAVA,GAAsBA,GACnDC,EAAU,SAACD,GAAD,OAAYD,EAASC,IASrCxI,qBAAU,WAGN,IAAM0I,EAAWC,YAA2B9S,GACtC+S,EAAiBpB,IAAKF,EAAD,oCAAwCoB,GAAW,IAC9E,GAAGE,EAAe9D,OAAO,CACrB,IAAM+D,EAAuBC,YAAwBjT,GAErD,GAAGA,IAASsQ,GAAoBuC,EAASG,EAAqBhS,KAE1D,GADkC+R,EAAeG,SAhBhC,SAACL,EAAUrC,GACpC,OAAOgC,EAAUlC,GAAoBuC,EAASrC,EAAMxP,MAecmS,CAAqBN,EAASG,IAC3D,OAKjC,GAAIZ,EAAJ,CAGA,IAAMgB,EAAqBZ,EAAUxS,GACjC4S,EAAQQ,IAAuBV,EAASD,GACrCN,GACCkB,QAAQC,MAAM,uBAAwBtT,EAAM,CACxC2S,MAAOF,IAEXF,EAASvS,EAAM,CACX2S,MAAOF,MAGXY,QAAQC,MAAM,gBAAiBtT,EAAM,CACjC2S,MAAOF,IAEXF,EAASvS,EAAMyS,IAGfG,EAAQH,GACZY,QAAQC,MAAR,wDAAwDtT,EAAxD,YAGAqT,QAAQC,MAAR,oEAAoEtT,EAApE,eAGT,CAACyS,IAEJ,IAAMc,EAAW,UAAGC,qBAAH,aAAG,EAAmBD,YACnCE,EAA+B,UAAhBF,EAA0BvT,EAAwB,aAAhBuT,EAA6BG,IAAeC,eAAe3T,GAAQ,GACxH,OAAOyT,EAAe,qCAAQA,EAAR,KAAwBhB,KAA0B,MCvE/DmB,GAAY,SAAC5T,EAAM0O,GAC5B,IAAK1O,EACD,MAAM,IAAI6T,MAAJ,gDAAmDnF,EAAMoF,OAASpF,EAAMqF,cAGzEC,GAAa,SAACC,EAAOvE,GAC9B,IAAIwE,EAAe,CAAEC,SAAU,CAAExB,MAAOjD,IAAc,EAAO0E,QAAS,mBAEtE,MADoC,kBAAVH,GAAsBA,EACpBnM,OAAOuM,OAAOH,EAAcD,GAASC,GAUtD,SAASI,GAAeC,EAAWN,GAAsB,IAAfO,EAAc,uDAAJ,GAK/D,OAAO,YAAiE,IAAD,IAApDC,qBAAoD,SAA9BrC,EAA8B,EAA9BA,iBAAqB1D,EAAS,oDACnE+F,GAAiBb,GAAUlF,EAAM1O,KAAM0O,GACvC,IAAMgG,EAAWV,GAAWtF,EAAMuF,OAASA,EAAOvF,EAAMgB,YAGlDyC,EAAgBqC,EAAQrC,cAC9B,OACIsC,EACI,qCACI,cAAC,IAAD,CACIzU,KAAM0O,EAAM1O,KACZ2U,aAAcjG,EAAMiG,cAAgB,KACpCV,MAAOS,EACPE,OAAQ,gBAAGC,EAAH,EAAGA,SAAUC,EAAb,EAAaA,OAAQnC,EAArB,EAAqBA,MAAOoC,EAA5B,EAA4BA,IAA5B,OACJ,cAACR,EAAD,aAAWM,SAAUA,EAAUC,OAAQA,EAAQnC,MAAOA,EAAOoC,IAAKA,GAASrG,OAGnF,cAAC,GAAD,CAAmB1O,KAAM0O,EAAM1O,KAAMmS,cAAeA,EAAeC,iBAAkBA,OAGzF,cAACmC,EAAD,aAAWN,MAAOS,GAAchG,K,qDCG1CqB,GAAYC,aAAW,SAACC,GAAD,MAAY,CACvCC,KAAM,CACJ8E,SAAU,EACV7E,UAAW,EACX8E,WAAY,QACZC,aAAc,MACd,YAAa,CACXA,aAAc,OAEhB,UAAW,CACTC,OAAQ,OACRC,SAAU,eA6DDd,WAxDf,YAA4H,IAAjGtU,EAAgG,EAAhGA,KAAM8T,EAA0F,EAA1FA,MAA0F,IAAnFuB,kBAAmF,MAAtE,KAAsE,EAAhEzF,EAAgE,EAAhEA,MAAOF,EAAyD,EAAzDA,WAAY4F,EAA6C,EAA7CA,QAASC,EAAoC,EAApCA,cAAeC,EAAqB,EAArBA,SAAa9G,EAAQ,uGACnH+G,EAAU1F,KAGR2F,GAFMC,eACEtD,YAAe,CAAEC,KAAM,WAC/BoD,QACFE,EAAQC,eAAIH,EAAQ1V,GAL+F,EAM/FyO,WAAe,IAAI5F,MAN4E,mBAUzH,OAVyH,UAOtG,KAAf6F,EAAMiE,QAAajE,EAAMiE,MAAQ,MAInC,sBAAKmC,OAAQpG,EAAMoG,OAAQzI,UAAU,qBAAqBuD,MAAO,CAAEO,UAAW,UAA9E,UACE,eAAC,IAAD,CAAsB2F,YAAaC,IAAnC,UACE,eAACC,GAAA,EAAD,WACE,sBAAMpG,MAAO,CAACqG,WAAY,UAA1B,SAAsCnC,IAEpCpE,GACE,sBAAME,MAAO,CAAClE,MAAM,OAApB,uBAIN,cAACwK,EAAA,EAAD,CACEV,SAAUA,EACVW,MAAO,CAAC,OAAO,QAAQ,OACvBxD,MAAOyD,KAAO1H,EAAMiE,OACpB2C,QAASA,EACTe,SAA2B,IAAlBd,EAA0B,IAAI1M,UAAUyN,EACjDzB,SAAU,SAAC0B,GAAS7H,EAAMmG,SAASuB,KAAOG,GAAMC,OAAO,gBACvDC,YAAa,SAACC,GAAD,OACX,cAACC,EAAA,EAAD,yBACEC,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5CyJ,SAAUA,GACNkB,GAHN,IAIEzL,WAAW,EACX6L,OAAO,SACPzB,WAAYA,EACZ0B,QAAQ,WACRC,YAAalD,EACblE,MAAOA,EACPvD,UAAWoJ,EAAQvF,KACnB0F,QAASA,YAMV,OAALA,QAAK,IAALA,OAAA,EAAAA,EAAOxB,UACL,qBAAKxE,MAAO,CAAElE,MAAO,MAAO0J,SAAU,YAAtC,gBACKQ,QADL,IACKA,OADL,EACKA,EAAOxB,gB,SC9DPE,WA5CR,YAAiL,EAAhKR,MAAiK,IAA1JC,EAAyJ,EAAzJA,WAAYkD,EAA6I,EAA7IA,WAAYhX,EAAiI,EAAjIA,YAAiI,KAApHgU,MAAoH,EAA7GvE,mBAA6G,aAAzFC,sBAAyF,SAAjE3P,EAAiE,EAAjEA,KAAoBkX,GAA6C,EAA3DvC,aAA2D,EAA7CuC,qBAAqBF,EAAwB,EAAxBA,YAAetI,EAAS,iKAE9KgH,EAAWrD,YAAe,CAAEC,KAAM,WAAlCoD,OACFE,EAAQjE,IAAK+D,EAAO1V,GAE1B,OACE,sBAAKqM,UAAU,gBAAf,UACE,eAAC2J,GAAA,EAAD,WACGjC,EAECrE,GAAgB,sBAAMrD,UAAU,WAAhB,gBAEhBsD,IAAmBD,EACD,sBAAMrD,UAAU,WAAhB,gBACF,QAGpB,cAACsK,EAAA,EAAD,aACEC,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5Cd,WAAW,EACX+L,YAAW,OAAEA,QAAF,IAAEA,IAAejD,EAC5B6B,QAASA,EACTuB,aAAYlX,GAAeD,EAC3BiX,WAAYA,GACRvI,KAGC,OAALkH,QAAK,IAALA,OAAA,EAAAA,EAAOxB,UACL,qBAAKxE,MAAO,CAAElE,MAAO,MAAO0J,SAAU,YAAtC,gBACGQ,QADH,IACGA,OADH,EACGA,EAAOxB,UAKZ8C,GACE,8BACGA,U,SC0FEE,GAxHO,SAAC1I,GACrB,IAAM2I,EAAWC,cACXC,EAAUC,YAAQ,CAAElF,KAAM,WACxBmF,EAAiBF,EAAjBE,aAHuB,EAIDvO,oBAAS,GAJR,mBAIxBwO,EAJwB,KAIfC,EAJe,KAKzBC,EAAQ,uCAAG,WAAOvQ,GAAP,eAAAwQ,EAAA,sEAEbF,GAAW,GAFE,SAGQG,IAAUC,cAAc1Q,GAHhC,QAIoB,KAD3B2Q,EAHO,QAIFC,mBACTZ,EAASa,YAAaC,IAAUC,WAChCf,EACE3N,aAAK,CACH0K,QAAS,wBACTiE,SAAU,cAIsB,OAA7BL,EAAOC,mBACdZ,EACE3N,aAAK,CACH0K,QAAS,yCACTiE,SAAU,aAjBH,gDAwBY,MAArB,KAAEC,QAAQC,OACZlB,EAASa,YAAaC,IAAUK,SAEhCnB,EACE3N,aAAK,CACH0K,QAAS,KAAEA,QACXiE,SAAU,aA9BH,yBAmCbV,GAAW,GAnCE,4EAAH,sDA2CRc,EAAS,WACb,OACE,gCACE,0EACA,oBAAIpM,UAAU,OAAd,SACE,oBAAIA,UAAU,KAAd,qDAMR,OACE,cAAC,EAAD,UACE,qBAAKrM,KAAK,iBAAiBqM,UAAU,GAArC,SACE,sBAAKA,UAAU,SAAf,UACE,oDACCqC,EAAM6J,SAAWJ,IAAUK,QAAU,cAACC,EAAD,IACrC/J,EAAM6J,SAAWJ,IAAUhE,UAC1B,gCACE,qJAIA,cAAC,IAAD,2BAAkBoD,GAAlB,aACE,uBAAMK,SAAUH,EAAaG,GA5B3B,SAAC9L,OA4BH,UACE,cAAC,EAAD,CACE4M,aAAa,EACbxL,MAAM,gCAFR,SAIE,cAAC,EAAD,UACE,cAACyL,EAAD,UACE,cAAC,GAAD,CACE3Y,KAAK,WACLgX,YAAY,WACZjD,WAAW,WACXgD,QAAQ,WACRrH,YAAY,UAMpB,eAAC,EAAD,CAAcxC,MAAM,WAApB,UACE,cAAC,EAAD,UACE,cAACyL,EAAD,UACE,cAAC,GAAD,CACE3Y,KAAK,YACL8T,MAAM,WACNpE,YAAY,QAIlB,cAAC,EAAD,UACE,cAACiJ,EAAD,UACE,cAAC,KAAD,CACEjB,QAASA,EACT5D,MAAM,WACN8E,KAAK,mCC5DhBC,GAjDQ,SAACnK,GAGpB,IAAMoK,EAAY/O,aAAY,SAACC,GAAD,OAAWA,EAAMC,QACzCoN,EAAWC,cAGTxN,EAA0BgP,EAA1BhP,WAAYiP,EAAcD,EAAdC,UAmCpB,OAjCA5O,qBAAU,YAEa,IAAfL,GAAuBiP,IAAcZ,IAAUa,SAAS,uCACxD,4BAAAnB,EAAA,+EAEcC,IAAUmB,aAFxB,OAGQ5B,EAASa,YAAaC,IAAUC,WAHxC,gDAKgBG,EAAW,KAAED,QAAbC,OALhB,KAOeA,EAPf,OAQiB,MARjB,QAWiB,MAXjB,gCASgBlB,EAASa,YAAaC,IAAUK,SAThD,oCAYgBnB,EAASa,YAAaC,IAAUhE,WAZhD,kHADwD,oDAoBxD8E,KAEL,CAACnP,EAAYiP,IAEhB5O,qBAAU,YACkB,IAApBuE,EAAMwK,WAEN1L,OAAO2L,SAAS,EAAE,KAEvB,IAEEJ,IAAcZ,IAAUK,QAAUO,IAAcZ,IAAUhE,WAAarK,EAIpEA,EAAa,cAAC,QAAD,eAAW4E,IAAY,cAAC,WAAD,CAAU0K,GAAI,MAHnD,cAAC,QAAD,CAAOxE,OAAQ,kBAAM,cAAC,GAAD,CAAe2D,OAAQQ,Q,oBC/CxC,SAASM,GAAT,GAA8C,IAAD,EAArBC,EAAqB,EAArBA,QAC/BC,GADoD,2BAC1CjL,wBAWhB,OACE,qBAAKjC,UAAU,2BAAf,SACE,sBAAKA,UAAU,gBAAf,UACA,sBAAKA,UAAU,wBAAwBuD,MAAO,CAAE4J,QAAQ,OAAQC,cAAc,SAAUC,WAAY,SAAUC,eAAgB,UAA9H,UACI,oBAAItN,UAAU,sBAAd,SAAqCiN,EAAQ7R,OAC7C,sBAAK4E,UAAU,gBAAf,UACIiN,EAAQM,SAAYN,EAAQO,cAAiBP,EAAQQ,mBAAmE,KAA/C,sBAAMlK,MAAO,CAAEkH,OAAQ,oBACjGwC,EAAQM,SACP,cAACG,GAAA,EAAD,CAAS7M,MAAM,0BAAf,SACE,qBACE0C,MAAO,CAAEkH,OAAQ,kBACjBtK,IAAI,qBACJO,IAAI,OAITuM,EAAQO,cACP,cAACE,GAAA,EAAD,CAAS7M,MAAM,0CAAf,SACE,qBACE0C,MAAO,CAAEkH,OAAQ,kBACjBtK,IAAI,oBACJO,IAAI,OAITuM,EAAQQ,oBACP,cAACC,GAAA,EAAD,CAAS7M,MAAM,oCAAf,SACE,qBACE0C,MAAO,CAAEkH,OAAQ,kBACjBtK,IAAI,uBACJO,IAAI,UAKZ,gCACsC,WAA5B,OAAPuM,QAAO,IAAPA,GAAA,UAAAA,EAASU,cAAT,eAAiBnS,gBAChB,gCACGyR,EAAQW,YAAcX,EAAQO,aAAc,qBAAKjK,MAAO,CAAElE,MAAO,WAArB,4CAAyE,MAC9F,IAAvB4N,EAAQW,YAAwBX,EAAQO,aAAc,qBAAKjK,MAAO,CAAElE,MAAO,WAArB,yCAAsE,KACrG,OAAvB4N,EAAQW,WAAqB,kEAA4C,QAG9E,qBAAKpK,wBAA0B,CAAEC,OAAQwJ,EAAQY,qBAGrD,mCAAMZ,EAAQa,QACd,cAAC,KAAD,2BAAmBb,GAAnB,IAA4B7N,QAxDd,WAClB8N,EAAQa,KAAK,CACXC,SAAS,gBAAD,OAAkBf,EAAQa,MAClCnQ,MAAO,CACLsQ,KAAMf,EAAQ9L,SAAS4M,aAoD2BE,eAAe,U,iICzD5DC,GACE,SADFA,GAEH,OA6EKC,OAtEf,YAA4D,IAA/BC,EAA8B,EAA9BA,aAAc7D,EAAgB,EAAhBA,IAAKE,EAAW,EAAXA,QAG5C,IAAK2D,EACD,OAAO,KAOX,SAASC,EAAT,GAAqB,IAANC,EAAK,EAALA,GAEX,OAAQF,EAAaG,gBACjB,IAAK,QACD,OAAO,cAAC,KAAD,CAAWD,GAAE,2BAAOA,GAAP,IAAWlP,MAAO,cAE1C,IAAK,UACD,OAAO,cAAC,KAAD,CAAakP,GAAE,2BAAOA,GAAP,IAAWlP,MAAO,cAE5C,IAAK,UACD,OAAO,cAAC,KAAD,CAAakP,GAAE,2BAAOA,GAAP,IAAWlP,MAAO,cAE5C,IAAK,UACD,OAAO,cAAC,KAAD,CAAakP,GAAE,2BAAOA,GAAP,IAAWlP,MAAO,cAE5C,IAAK,QACD,OAAO,cAAC,KAAD,CAAWkP,GAAE,2BAAOA,GAAP,IAAWlP,MAAO,cAE1C,QACI,OAAO,cAAC,KAAD,CAAUkP,GAAE,2BAAOA,GAAP,IAAWlP,MAAO,eAIjD,OAAQqL,GACJ,KAAKyD,GACD,OACI,qBAAgCnO,UAAU,eAAeuD,MAAO,CAACkL,OAAQ,OAAQC,QAAS,QAAS3F,SAAU,WAA7G,SACI,sBAAK/I,UAAU,uBAAuBuD,MAAO,CAACoL,oBAAoB,cAAlE,UACI,8BACI,8BAAK,cAACL,EAAD,CAAMC,GAAI,CAACK,MAAO,gBAE3B,sBAAK5O,UAAU,SAAf,UACKqO,EAAa1T,OAAS,sBAAM6I,wBAAyB,CAAEC,OAAQ4K,EAAa1T,OAAS4I,MAAO,CAACsL,WAAY,OAAQC,aAAc,SAC/HT,EAAaU,SAAW,sBAAMvL,wBAAyB,CAAEC,OAAQ4K,EAAaU,kBAP3F,sBAAyBvE,IAYjC,KAAK2D,GACL,QACI,OACI,qBAAgCnO,UAAU,eAA1C,SACI,sBAAKA,UAAU,uBAAf,UACI,8BACI,8BAAK,cAACsO,EAAD,QAET,sBAAKtO,UAAU,SAAf,UACKqO,EAAa1T,OAAS,oBAAIqF,UAAU,0CAA0CwD,wBAAyB,CAAEC,OAAQ4K,EAAa1T,SAC9H0T,EAAaU,SAAW,qBAAK/O,UAAU,wBAAwBwD,wBAAyB,CAAEC,OAAQ4K,EAAaU,kBAP5H,sBAAyBvE,MC5D1B,SAASwE,GAAT,GAA2C,IAA1B/B,EAAyB,EAAzBA,QAASgC,EAAgB,EAAhBA,cAGjCC,EAAwB,QAAjBjC,EAAQa,KAAiB,GAAKb,EAAQiC,KAAO,KAAQjC,EAAQiC,KAAO,GAAG,IAEpF,OACE,qBAAKlP,UAAU,QAAf,SACE,sBAAKA,UAAU,gBAAf,UACE,sBAAKA,UAAU,wBAAf,UACE,qBAAIA,UAAU,sBAAd,UAAqCkP,EAArC,IAA6CjC,EAAQ7R,QACrD,qBAAKoI,wBAA0B,CAAEC,OAAQwJ,EAAQY,kBAElDoB,GACD,8BACKA,EAAcpK,KAAI,SAACsK,EAAMpK,GAAP,OACf,cAAC,GAAD,CAA2BsJ,aAAcc,EAAMzE,QAASyD,IAAhCpJ,QAKhC,cAAC,KAAD,eAAmBkI,S,sECuHZmC,G,WArIX,WAAYC,EAAiBC,GAAa,qBACtCrU,KAAKsU,SAAW,IAAIC,KAAYF,GAChCrU,KAAKwU,aAAe,IAAIC,KAAgBL,G,uCAO5C,WACI,OAAOpU,KAAKwU,aAAaP,O,uBAM7B,WACI,OAAOjU,KAAKsU,SAASI,O,yBAMzB,WACI,OAAO1U,KAAKwU,aAAaG,gB,wBAM7B,WACI,OAAO3U,KAAKwU,aAAaI,e,qBAO7B,WACI,OAAO5U,KAAKwU,aAAaK,Y,yBAO7B,WAAoB,IAAD,EACf,MAAkD,SAA3C,UAAA7U,KAAKsU,SAASpU,aAAd,eAAqB4U,qB,mBAOhC,WACI,QAAK9U,KAAKsU,SAASpU,QAG6B,MAAzCF,KAAKsU,SAASpU,MAAM4U,mBAA0D,QAA7B9U,KAAKsU,SAASpU,MAAM2S,Q,kBAOhF,WACI,OAAO7S,KAAKsU,SAASS,UAAU/U,KAAKiU,Q,qBAOxC,WACI,OAAOjU,KAAKwU,aAAaQ,Y,uBAO7B,WACI,OAAOhV,KAAKwU,aAAaS,c,wBAO7B,WACI,QAAKjV,KAAKkV,SAGHlV,KAAKmV,WAAWC,WAAapV,KAAKqV,oB,4BAO7C,WACI,OAAOrV,KAAKwU,aAAaa,mB,sBAM7B,WAAiB,IAAD,EACZ,iBAAOrV,KAAKkV,cAAZ,aAAO,EAAaC,a,qBAUxB,SAAQG,EAAWxc,EAAMoW,GACrB,OAAOlP,KAAKkV,OAAOK,QAAQD,EAAWxc,EAAMoW,K,8BAQhD,WACI,OAAOsG,YAAqBxV,KAAKsU,SAASpU,MAAOF,KAAKwU,aAAatU,W,KC3H3E,SAASuV,GAA0BC,GAAc,IAAD,EACZA,EAAYjL,QAAO,SAAAkL,GAAC,MAAe,QAAXA,EAAE9C,QAAgB+C,SAAQ,SAAAD,GAAC,OAAIA,EAAEE,iBAAejM,KAAI,SAAA+L,GAAC,OAAIA,EAAEG,QAAMC,OAAOC,UAChI,OAF4C,oBAyTjCC,OAhTf,WAEI,IAAM9L,EAAY1H,aAAY,SAACC,GAAD,OAAWA,EAAMwE,QAEzCgP,GAAY,EAJD,EAMWtU,oBAAS,GANpB,mBAMFuU,GANE,WAQjBxR,SAASyR,mBAAqB,WAC1BD,GAAU,IATG,MAa6BvU,oBAAS,GAbtC,mBAaVyU,EAbU,KAaOC,EAbP,KAiBjBzT,oBAAS,sBAAC,4BAAA0N,EAAA,sEACeC,IAAU+F,mBADzB,OACAtF,EADA,OAENqF,EAAmBrF,GAFb,2CAGP,IAKHpO,qBAAU,WACN6H,IAAQ8L,iBAAiB,CAAC1pB,IAAOC,eAClC,IA3Bc,MA8BuB6U,mBAAS,IA9BhC,mBA8BV6U,EA9BU,KA8BIC,EA9BJ,OA+B+B9U,mBAAS,IA/BxC,mBA+BV+U,EA/BU,KA+BQC,EA/BR,OAgCmChV,mBAAS,IAhC5C,mBAgCViV,EAhCU,KAgCUC,EAhCV,OAiCqClV,mBAAS,IAjC9C,mBAiCVmV,EAjCU,KAiCWC,EAjCX,OAkCyBpV,mBAAS,IAlClC,mBAkCVoS,EAlCU,KAkCKiD,EAlCL,OAmCSrV,mBAAS,CAC/BsV,uBAAuB,EACvBC,sBAAsB,IArCT,mBAmCVzU,EAnCU,KAmCH2D,EAnCG,KAwCX+Q,EAAaT,EAAiB/M,KAAI,SAAA2G,GAAC,OAAI,IAAI4D,GAAuB5D,EAAGkG,EAAa/V,MAAK,SAAAiV,GAAC,OAAIA,EAAE9C,OAAStC,EAAE8G,mBACzGC,EAAaF,EAAW3M,QAAO,SAAA8F,GAAC,OAAIA,EAAEgH,WACtCC,EAAwB/B,GAA0BgB,GAClDgB,EAA0BhB,EAAahM,QAAO,SAAAkL,GAAC,MAAe,QAAXA,EAAE9C,QAAgB+C,SAAQ,SAAAD,GAAC,OAAIA,EAAEE,iBAAejM,KAAI,SAAA+L,GAAC,OAAIA,EAAEG,QAAMrL,QAAO,SAAAnD,GAAC,OAAIA,GAAKkQ,KAErIE,EAAmBb,EAAmBpM,QAAO,SAAA8F,GAAC,MAAiB,UAAbA,EAAEmC,UACpDiF,EAAkBd,EAAmBpM,QAAO,SAAA8F,GAAC,MAAiB,UAAbA,EAAEmC,UACnDkF,EAA6BD,EAAgBhQ,OAAS,EACtDkQ,EAAYT,EAAW1W,MAAK,SAAA6P,GAAC,MAAsB,QAAlBA,EAAEuH,aAAyBvH,EAAE0D,OAASuD,KA4BvEO,GA1BN,WACI,IAAKF,EACD,OAAO,KACX,IAAKA,EAAUjD,aACX,OAAO,KACX,GAA+B,YAA3BiD,EAAUjD,cAAyD,UAA3BiD,EAAUjD,cAAuD,OAA3BiD,EAAUjD,aACxF,OAAO,KACX,GAA+B,YAA3BiD,EAAUjD,cAAyD,YAA3BiD,EAAUjD,aAClD,OAAO,KAEX,IAAI7b,EAAQ,QAMZ,MAL+B,UAA3B8e,EAAUjD,eACV7b,EAAQ,WACR8e,EAAUjD,aAAaoD,WAAW,UAClCjf,EAAQ,WAEL,CACH2G,MAAO,KACPoU,QAAS+D,EAAUlD,cACnBsD,SAAU,gBACVZ,YAAaQ,EAAUC,YACvBhC,KAAM+B,EAAU5D,KAChBV,eAAgBxa,GAIiBmf,GAQzCrV,oBAAS,sBAAC,4CAAA0N,EAAA,6DACNlK,EAAS,2BAAK3D,GAAN,IAAawU,uBAAuB,EAAMC,sBAAsB,EAAMgB,sBAAsB,EAAMC,aAAc,MADlH,SAI6B5H,IAAUjC,IAAI,sBAAuB,CAAE8J,UAAU,EAAMrN,KAAM,aAJ1F,cAIAsN,EAJA,OAKN1B,EAAoB0B,GAGdC,EARA,YAQmB,IAAIC,IAAIF,EAAqB1O,KAAI,SAAA2G,GAAC,OAAIA,EAAE8G,iBAC3DoB,EAAkBF,EAAa3O,KAAI,SAAA8O,GAAC,OAAIlI,IAAUmI,WAAWD,MAT7D,SAUiBE,QAAQC,IAAIJ,GAV7B,cAUAK,EAVA,OAWNpC,EAAgBoC,GAChBzS,EAAS,2BAAK3D,GAAN,IAAayV,sBAAsB,KAErCf,EAAakB,EAAqB1O,KAAI,SAAA2G,GAAC,OAAI,IAAI4D,GAAuB5D,EAAGuI,EAASpY,MAAK,SAAAiV,GAAC,OAAIA,EAAE9C,OAAStC,EAAE8G,mBAEzGG,EAAwB/B,GAA0BqD,GAClDC,EAAkB3B,EAAW3M,QAAO,SAAA8F,GAAC,OAAIA,EAAE0C,eAAiB1C,EAAE0D,OAASuD,KAAuB5N,KAAI,SAAA2G,GAAC,OAAIA,EAAEyI,sBAjBzG,UAkB6BC,YAA0BF,GAlBvD,QAkBAG,EAlBA,OAmBNpC,EAAsBoC,GAEtB7S,EAAS,2BAAK3D,GAAN,IAAayU,sBAAsB,EAAOD,uBAAuB,EAAOiB,sBAAsB,KAGhGpB,EAAsBK,EAAW3M,QAAO,SAAA8F,GAAC,OAAIA,EAAE0C,eAAiB1C,EAAE0D,OAASuD,IAAyC,IAAhBjH,EAAEsE,aAC5GmC,EAAuBD,GAzBjB,4CA2BP,IAKHlU,oBAAS,sBAAC,4BAAA0N,EAAA,sEACyBC,IAAUjC,IAAI,6BAA8B,IADrE,QACA4K,EADA,QAEWpD,MAAK,SAACxF,GAAD,MAA6B,YAArBA,EAAEgD,eAAgC,GAAK,KACrE0D,EAAiBkC,GAHX,2CAKP,IAEH,IAAMC,GAxHM,SAACtZ,GAAD,uBAAcqK,EAAUkP,OAAOvZ,UAA/B,aAAc,EAA4BuL,MAwHpCkD,CAAIzhB,IAAOC,YAEvBusB,GAAW,uCAAG,sBAAA/I,EAAA,sDAChB5L,SAASwB,SAASnB,KAAO,WADT,2CAAH,qDASjB,SAASuU,GAAqBzB,EAAa7D,GACvC,OAAK6D,GAAgB7D,EAKdD,EAAcvJ,QAAO,SAAA+O,GAAC,MAAmB,kBAAfA,EAAEvB,UAAgCuB,EAAEnC,cAAgBS,GAAe0B,EAAE1D,OAAS7B,KAJpG,GAUf,SAASwF,KAA0B,IAAD,EAC9B,IAAK5B,EACD,OAAO,KAEX,IAAM6B,EAAO,uCAAmC7B,EAAU5D,MAE1D,OAAI4D,EAAU5C,YACH,mBAAGjQ,KAAM0U,EAAS3U,UAAU,SAA5B,kBAEP8S,EAAUxC,iBACH,oBAAG/M,MAAO,CAACkH,OAAQ,OAAnB,qEAAqFqI,EAAU5D,KAAO,EAAtG,eAEP4D,EAAU7C,UACH,mBAAGhQ,KAAM0U,EAAS3U,UAAU,SAA5B,kBAEP8S,EAAU8B,aACH,mBAAG3U,KAAM0U,EAAS3U,UAAU,SAA5B,mBAEJ,oBAAGuD,MAAO,CAACkH,OAAQ,OAAnB,wEAA8EqI,EAAU1C,kBAAxF,aAA8E,EAAsByE,YAApG,eAA6H/B,EAAU5D,KAAvI,eAGX,OACI,cAAC,EAAD,CAAYvb,KAAK,gBAAjB,SACI,sBAAKA,KAAK,gBAAgBqM,UAAU,SAApC,UACI,sBAAKA,UAAU,SAAf,UAEI,qBAAKA,UAAU,aAAf,SACI,qBAAKA,UAAU,UAAf,SACI,sBAAKA,UAAU,qBAAf,UACI,qBAAKA,UAAU,mBAAf,SACI,qBAAKG,IAAI,iBAAiBO,IAAI,qBAElC,sBAAKV,UAAU,6BAAf,UACI,oBAAIA,UAAU,sBAAd,sCACA,qBAAIA,UAAU,sBAAd,oBACYqU,IAAc,0CAAKA,GAAL,SAA0B,kDAQpE,qBAAKrU,UAAU,iCAAf,SACI,sBAAKA,UAAU,iBAAf,UACI,qBAAKA,UAAU,wBAAf,SACI,qBAAIA,UAAU,sBAAd,2BAAmDiP,EAAcrM,OAAS,GAAK,qBAAKW,MAAO,CAAEuF,OAAQ,MAAO8F,MAAO,MAAO/F,aAAc,MAAOD,WAAY,UAAWuE,QAAS,eAAgB1C,OAAQ,sBAE3M,sBAAKzK,UAAU,yBAAf,WACyB,IAApBsR,GACG,qBAAKtR,UAAU,eAAf,SACI,sBAAKA,UAAU,uBAAf,UACI,8BACI,8BAAK,cAAC,KAAD,CAAauO,GAAI,CAAElP,MAAO,iBAEnC,sBAAKW,UAAU,SAAf,UACI,oBAAIA,UAAU,0CAAd,0CACA,sBAAKA,UAAU,+BAAf,UACI,4HACA,cAAC,KAAD,CAAQrM,KAAK,aAAa8T,MAAM,cAAc8E,KAAK,SAASnN,QAASmV,gBAMxFtF,EAAcvJ,QAAO,SAAA+O,GAAC,MAAmB,oBAAfA,EAAEvB,UAAiD,OAAfuB,EAAEvB,YAAmBrO,KAAI,SAACsK,EAAMpK,GAAP,OACpF,cAAC,GAAD,CAA2BsJ,aAAcc,EAAMzE,QAASyD,IAAhCpJ,UAK9BkK,EAAcrM,OAAS,GAAK,mBAAG5C,UAAU,YAAb,2DAKzCsR,GACG,sBAAKtR,UAAU,kCAAf,UACI,sBAAKA,UAAU,wBAAf,UACI,oBAAIA,UAAU,sBAAd,oBACCrC,EAAMyV,sBACH,cAAC0B,GAAA,EAAD,OAGR,sBAAKnhB,KAAK,gBAAgBqM,UAAU,kBAApC,UACKuS,EAAW1N,KAAI,SAACsK,EAAMpK,GAAP,OACZ,cAACiK,GAAD,CAAyC/B,QAASkC,EAAK8E,mBAAoBjU,UAAU,OACjFiP,cAAeuF,GAAqBrF,EAAK4D,YAAa5D,EAAKD,OAD/D,uBAAoCnK,QAGtCwN,EAAW3P,OAAS,GAAK,8DAOnC0O,GAAmBuB,GACnB,sBAAK7S,UAAU,kCAAf,UACI,sBAAKA,UAAU,wBAAf,UACI,oBAAIA,UAAU,sBAAd,kCAGIrC,EAAMyU,sBACN,cAAC0C,GAAA,EAAD,OAGR,sBAAKnhB,KAAK,qBAAqBqM,UAAU,kBAAzC,UACKmR,EACcyB,EAAgB/N,KAAI,SAACsK,EAAMpK,GAAP,OAC/B,cAACiI,GAAD,CAAsCC,QAASkC,EAC3CF,cAAeuF,GAAqBrF,EAAKmD,YAAanD,EAAK4B,OAD/D,qBAAiChM,aAQhDuM,GACG,sBAAKtR,UAAU,kCAAf,UACI,sBAAKA,UAAU,wBAAf,UACI,oBAAIA,UAAU,sBAAd,sCACU,OAAT8S,QAAS,IAATA,OAAA,EAAAA,EAAW5C,cAAe,8BAAK,sBAAK3M,MAAO,CAAElE,MAAO,WAArB,UAAkC,cAAC,KAAD,IAAlC,iBAEhC,cAAC,GAAD,CAAmBgP,aAAc2E,GAAiCtI,QAASyD,KAE1EqG,GAAqB,MAAO/B,GAAuB5N,KAAI,SAACsK,EAAMpK,GAAP,OACpD,cAAC,GAAD,CAA2BsJ,aAAcc,EAAMzE,QAASyD,IAAhCpJ,MAG5B,cAAC2P,GAAD,IAEChC,EAAwB7N,KAAI,SAAAtC,GAAC,aAAwB,OAAnByP,QAAmB,IAAnBA,GAAA,UAAAA,EAAqBtM,QAAO,SAAAkL,GAAC,OAAIA,EAAE1B,OAAS3M,YAA5C,eAAgDK,QAAS,GACxF,sBAAKW,MAAO,CAAEkH,OAAQ,UAAtB,UACI,oBAAGxK,KAAI,uCAAkCsC,GAAKvC,UAAU,SAAxD,UAAmEuC,EAAnE,aACA,uBAAMgB,MAAO,CAAEwR,YAAa,OAA5B,kEAA2FxS,EAA3F,MAAiGA,EAAI,EAArG,oBAMP5E,EAAMwU,uBACH,cAAC2C,GAAA,EAAD,OAGR,sBAAKnhB,KAAK,sBAAsBqM,UAAU,kBAA1C,UACKmR,EACcwB,EAAiB9N,KAAI,SAACsK,EAAMpK,GAAP,OAChC,cAACiI,GAAD,CAA8CC,QAASkC,EAAMF,cAAeuF,GAAqBrF,EAAKmD,YAAanD,EAAK4B,OAAxH,6BAAyChM,QAE3C4N,EAAiB/P,OAAS,GAAK,0E,sFClL9CoS,OAvIf,YAAwD,EAAhCC,QAAiC,IAAxBC,EAAuB,EAAvBA,OAAQC,EAAe,EAAfA,YAE/BC,EAAM,IAAI1F,KAAgByF,GAEhC,GAAc,MAAVD,GAAoC,IAAlBA,EAAOtS,OACzB,OAAO,KAEX,IACMyS,EAAaH,EAAO,GAAGI,MAU7B,SAASC,EAAT,GAAgC,IAAZpG,EAAW,EAAXA,KAAMpK,EAAK,EAALA,EAAK,EAEGlI,mBAAS,MAFZ,mBAEpB2Y,EAFoB,KAEXC,EAFW,KAGrBC,EAAgBvG,EAAKwG,SAASjQ,QAAO,SAAAwG,GAAM,OAAiC,OAA7BA,EAAO0J,mBAA2D,KAA7B1J,EAAO0J,mBAAyD,YAA7B1J,EAAO0J,qBAC9HC,EAAiB1G,EAAKwG,SAASG,MAAK,SAAA5J,GAAM,MAAwB,0BAApBA,EAAO6J,YACvDC,MAA8B,IAAlBZ,EAAIa,WAAyBb,EAAIa,WAAoC,eAAvB9G,EAAK+G,eAQnE,OAPApY,qBAAU,WACN,sBAAC,4BAAA0N,EAAA,sEACyBC,IAAU0K,WAAWhH,EAAKiH,WADnD,OACSZ,EADT,OAEGC,EAAWD,GAFd,0CAAD,KAID,IAGC,eAAC,WAAD,WACKQ,GACG,+BACI,qBAAIzS,MAAO,CAAEqG,WAAY,UAAzB,UAAuCuF,EAAKkH,KAA5C,IAAmDlH,EAAK4B,QACxD,mCAAMuF,WAAWnH,EAAKoH,iBAAmBpH,EAAKoH,iBAAmB,GAAMC,QAAQ,OAC7EpB,EAAItF,WAAasF,EAAIa,YACnB,mCAAMK,WAAWnH,EAAKsH,gBAAkBtH,EAAKsH,gBAAkB,GAAMD,QAAQ,MAG7E,oCACKhB,QADL,IACKA,OADL,EACKA,EAASkB,cARb3R,GAaZ2Q,EAAc9S,OAAS,GACpB,+BACI,uBACA,qBAAI+T,QAA2E,GAAhEvB,EAAItF,WAAasF,EAAIa,UAAY,EAAI,GAApD,UACKJ,GACG,4BAAG,sDAEP,oBAAI7V,UAAU,OAAd,SACK0V,EAAc7Q,KAAI,SAACqH,EAAQyH,GAAT,OACf,oBAAI3T,UAAU,KAAawD,wBAAyB,CAAEC,OAAQyI,EAAO0J,oBAA7CjC,iBAWxD,OA1DA0B,EAAWrE,MAAK,SAACxF,EAAGoL,GAAJ,OAAUpL,EAAEqL,MAAQD,EAAEC,SA4DlC,gCAEI,kCACI,gCACI,+BACI,sCACA,6BACKzB,EAAI0B,eAAiB1B,EAAIa,UAAW,QAAU,eAEjDb,EAAItF,WAAasF,EAAIa,YACnB,2CAEJ,8CAGR,gCACKf,EAAOrQ,KAAI,SAACsK,EAAMpK,GAAP,OAAa,cAACwQ,EAAD,CAAUpG,KAAMA,EAAMpK,EAAGA,aAIxDqQ,EAAI0B,cAAgB1B,EAAItF,YAAkC,QAApBsF,EAAIrC,cAA0BqC,EAAIa,WACtE,oBAAG1S,MAAO,CAAEwT,aAAc,SAA1B,mCAEK,IAAI,mBAAG9W,KAAI,uCAAkCmV,EAAIlG,KAAtC,mBAAP,qBAFT,IAGK,IAAI,mBAAGjP,KAAI,uCAAkCmV,EAAIlG,KAAtC,kBAAP,oBAHT,IAIK,IAJL,MAKK,IAAI,mBAAGjP,KAAK,wBAAR,0BALT,8BASFmV,EAAI0B,cAAgB1B,EAAItF,YAAkC,QAApBsF,EAAIrC,aAAyBqC,EAAIa,WACrE,oBAAG1S,MAAO,CAAEwT,aAAc,SAA1B,mCAEK,IAAI,mBAAG9W,KAAI,iBAAYmV,EAAIrC,YAAhB,YAA+BqC,EAAIlG,MAA1C,qBAFT,IAGK,IAAI,mBAAGjP,KAAI,iBAAYmV,EAAIrC,YAAhB,YAA+BqC,EAAIlG,MAA1C,oBAHT,IAIK,IAJL,MAKK,IAAI,mBAAGjP,KAAK,wBAAR,0BALT,6BAUHoV,EAAWzS,OAAS,GAClB,eAACoU,GAAA,EAAD,CAAOhX,UAAU,SAAS0K,QAAQ,WAAWsB,SAAS,OAAtD,UACK,oBAAIhM,UAAU,sBAAsBuD,MAAO,CAACwT,aAAc,OAA1D,gCACA,oBAAI/W,UAAWqV,EAAWzS,OAAS,EAAI,OAAS,GAAhD,SACKyS,EAAWxQ,KAAI,SAACsK,EAAMpK,GAAP,OACZ,+BACKoK,EAAK8H,UACF,qCACI,iCAAS9H,EAAK8H,WAAkB,0BAIxC,qBAAKjX,UAAU,WAAWwD,wBAAyB,CAAEC,OAAQ0L,EAAKtB,iBAP7D9I,eC4DtBmS,OAlKf,WAEI,IACMC,EADWC,wBACOC,KAHV,EAK4Bxa,mBAAS,IALrC,mBAKPya,EALO,KAKQC,EALR,OAMsC1a,mBAAS,IAN/C,mBAMP2a,EANO,KAMaC,EANb,OAOkB5a,oBAAS,GAP3B,mBAOPsU,EAPO,KAOI7F,EAPJ,KASRoM,EAAkBF,EAAmB9R,QAAO,SAAA0P,GAAG,MAA+B,UAA3BA,EAAIuC,oBAAuD,cAArBvC,EAAIwC,gBAC7FC,EAAkBL,EAAmB9R,QAAO,SAAA0P,GAAG,MAA+B,UAA3BA,EAAIuC,oBAAiD,UAAfvC,EAAIzH,UA4CnG,SAASmK,EAAT,GAA2D,IAAjC3C,EAAgC,EAAhCA,YAAa4C,EAAmB,EAAnBA,gBAE7BhF,EAAcoC,EAAY7C,YAFsB,EAGtBzV,mBAASkb,GAHa,mBAG/CC,EAH+C,KAGrCC,EAHqC,OAIxBpb,mBAAS,MAJe,mBAI/CoY,EAJ+C,KAItCiD,EAJsC,KAetD,GATApa,qBAAU,WACN,sBAAC,4BAAA0N,EAAA,sEAEyBC,IAAUmI,WAAWb,GAF9C,OAESkC,EAFT,OAGGiD,EAAWjD,GAHd,0CAAD,KAMD,IAEY,MAAXA,EACA,OAAO,KAGX,IAAMC,EA5BV,SAA0BnC,GACtB,OAAOuE,EAAc5R,QAAO,SAAA8F,GAAC,OAAIA,EAAE8G,cAAgBS,KA2BpCoF,CAAiBpF,GAC1BqF,EAAgBC,YAAuB5H,YAAqBwE,EAASE,GAAcD,GAEzF,OACI,qBAAKlV,UAAU,QAAf,SACI,sBAAKA,UAAU,gBAAf,UACI,qBAAKA,UAAU,wBAAf,SACI,eAACsY,GAAA,EAAD,CAAWC,QAAM,EAAC/P,SAAU,kBAAMyP,GAAaD,IAAWzU,MAAO,CAAEsF,aAAcmP,EAAW,cAAgB,OAASD,gBAAiBA,EAAtI,UACI,cAACS,GAAA,EAAD,CACIC,WAAYT,EAAW,cAAC,KAAD,CAAYzU,MAAO,CAAElE,MAAO,WAAgB,cAAC,KAAD,CAASkE,MAAO,CAAElE,MAAO,WAC5FqZ,gBAAc,kBACd3Z,GAAG,iBACHwE,MAAO,CAAEoV,gBAAiB,cAAe9P,aAAcmP,EAAW,cAAgB,OAJtF,SAMI,oBAAIhY,UAAU,sBAAd,SAAqCiV,EAAQ7Z,SAEjD,cAACwd,GAAA,EAAD,CAAkBrV,MAAO,CAAEsV,UAAW,QAAtC,SACI,cAAC,GAAD,CAAc5D,QAASA,EAASC,OAAQA,EAA2BC,YAAaA,GAA3BF,EAAQnH,aAIzE,cAAC,KAAD,eAAmBsK,SAQnC,OA1FAta,qBAAU,WACN,sBAAC,sCAAA0N,EAAA,sEACwBC,IAAUjC,IAAI,iBADtC,cACS0L,EADT,OAES4D,EAAa5D,EAAOrQ,KAAI,SAAA2G,GAAM,MAAO,CAACsC,KAAMtC,EAAE8G,YAAavB,KAAMvF,EAAEuN,oBACnEC,EAAeC,oBAASH,EAAYI,YAEpCC,EAAaH,EAAatT,QAAO,SAAA8F,GACnC,IAAI4N,EAAgBJ,EAAatT,QAAO,SAAAkR,GAAC,OAAIA,EAAE9I,OAAStC,EAAEsC,QACtDuL,EAAgB7T,KAAK8T,IAAI9T,KAAK8T,IAAL,MAAA9T,KAAI,YAAQ4T,EAAcvU,KAAI,SAAA0U,GAAC,OAAIA,EAAExI,WAClE,OAA4B,IAAzBqI,EAAcxW,QAGdwW,EAAcxW,OAAS,GAAK4I,EAAEuF,OAASsI,EAF/B7N,EAKJ,QAGLgO,EAAcL,EAAWtU,KAAI,SAAA2G,GAAC,OAAIC,IAAUgO,eAAejO,EAAEsC,KAAMtC,EAAEuF,SAjB9E,SAkBsB8C,QAAQC,IAAI0F,GAlBlC,OAkBSE,EAlBT,OAoBGnC,EAAiBrC,GACjBuC,EAAsBiC,GACtBpO,GAAW,GAtBd,2CAAD,KAyBD,IAiEC,cAAC,EAAD,CAAY3X,KAAK,YAAjB,SACI,sBAAKA,KAAK,YAAYqM,UAAU,mCAAhC,UACI,qBAAKA,UAAU,SAAf,SAEI,qBAAKA,UAAU,aAAf,SACI,qBAAKA,UAAU,UAAf,SACI,sBAAKA,UAAU,qBAAf,UACI,qBAAKA,UAAU,mBAAf,SACI,qBAAKG,IAAI,iBAAiBO,IAAI,qBAElC,qBAAKV,UAAU,6BAAf,SACI,oBAAIA,UAAU,sBAAd,oCAQpB,sBAAKA,UAAU,kCAAf,UACI,sBAAKA,UAAU,wBAAf,UACI,oBAAIA,UAAU,sBAAd,mDACCmR,GACG,cAAC2D,GAAA,EAAD,CAAS9U,UAAU,kBAG3B,sBAAKrM,KAAK,gBAAgBqM,UAAU,kCAApC,WACMmR,GAAwC,IAA3B0G,EAAgBjV,QAC3B,yEAEFuO,GAAa0G,EAAgBhT,KAAI,SAAAoQ,GAAO,OACtC,cAAC6C,EAAD,CAAgB3C,YAAaF,GAAcA,EAAQ3C,sBAM/D,sBAAKtS,UAAU,kCAAf,UACI,sBAAKA,UAAU,wBAAf,UACI,oBAAIA,UAAU,sBAAd,qBACCmR,GACG,cAAC2D,GAAA,EAAD,CAAS9U,UAAU,kBAG3B,sBAAKrM,KAAK,gBAAgBqM,UAAU,kCAApC,WACMmR,GAAwC,IAA3BuG,EAAgB9U,QAC3B,+EAEFuO,GAAauG,EAAgB7S,KAAI,SAAAoQ,GAAO,OACtC,cAAC6C,EAAD,CAAgB3C,YAAaF,EAAmC8C,gBAAiBZ,IAAM,WAASlC,EAAQ3C,cAA7D2C,EAAQ3C,4B,OCtKhEqH,OAPf,YAEE,OAF8D,EAA3CC,QAA2C,EAAxBhmB,YAAwB,yCAG5D,oBAAGqM,KAAK,IAAIb,QAAS,WAAuB,OAAhB+B,OAAO0Y,SAAgB,GAAnD,UAA4D,qBAAKC,QAAQ,YAAYhR,OAAO,KAAK8F,MAAM,KAA3C,SAAgD,sBAAMmL,EAAE,oJAAoJC,KAAK,cAA7Q,IAAqS,sBAAMha,UAAU,UAAhB,uB,8GCGnSia,GAAmB,IAAIC,I,SAEdC,G,iFAAf,WAA0BC,GAA1B,iBAAA5O,EAAA,yDACUhB,EAAM4P,GACRH,GAAiBI,IAAI7P,GAF7B,yCAIeyP,GAAiBzQ,IAAIgB,IAJpC,cAOU8P,EAAU,IAAIzG,QAAJ,uCAAY,WAAO0G,EAASC,GAAhB,eAAAhP,EAAA,+EAECC,IAAUjC,IAAI4Q,GAFf,OAEdzO,EAFc,OAGpB4O,EAAQ5O,GAHY,gDAKpBsO,GAAiBQ,OAAOjQ,GACxBgQ,EAAO,EAAD,IANc,yDAAZ,yDAUhBP,GAAiBS,IAAIlQ,EAAK8P,GAjB9B,kBAkBWA,GAlBX,4C,sBA2BO,IAAMK,GAAS,uCAAG,WAAOC,EAAU1L,EAAM5I,GAAvB,eAAAkF,EAAA,sEACA2O,GAAW,uBAAD,OAAwB7T,EAAxB,+BAAoDsU,EAApD,wBAA4E1L,IADtF,cACf2L,EADe,0BAER,OAANA,QAAM,IAANA,OAAA,EAAAA,EAAQzf,OAAQ,IAFF,2CAAH,0DAKT0f,GAAK,uCAAG,WAAOnL,GAAP,eAAAnE,EAAA,sEACM2O,GAAW,gBAAD,OAAiBxK,IADjC,cACboL,EADa,0BAEF,OAAVA,QAAU,IAAVA,OAAA,EAAAA,EAAY3f,OAAQ,IAFR,2CAAH,sDAML+a,GAAU,uCAAG,WAAOxG,GAAP,eAAAnE,EAAA,sEACF2O,GAAW,YAAD,OAAaxK,IADrB,cAClB6F,EADkB,0BAEV,OAAPA,QAAO,IAAPA,OAAA,EAAAA,EAASpa,OAAQ,IAFA,2CAAH,sDAWV4f,GAAO,uCAAG,WAAOC,EAAUtL,GAAjB,iBAAAnE,EAAA,yDACdmE,GAAiB,KAATA,EADM,yCAER,MAFQ,uBAKAsL,EALA,YAKYtL,GALZ,SAMIwK,GAAW,cAAD,OAAexK,EAAf,qBAAgCsL,IAN9C,cAMbC,EANa,0CAOZA,QAPY,IAOZA,OAPY,EAOZA,EAAUnM,eAPE,QAOS,IAPT,2CAAH,wDAUPoM,GAAO,uCAAG,WAAOC,GAAP,eAAA5P,EAAA,yDAChB4P,EADgB,iEAIFjB,GAAW,SAAD,OAAUiB,IAJlB,cAIfC,EAJe,yBAKdA,EAAI,iBAAMA,QAAN,IAAMA,OAAN,EAAMA,EAAMjgB,KAAZ,oBAAqBigB,QAArB,IAAqBA,OAArB,EAAqBA,EAAMC,kBAA3B,KAAkD,IALxC,2CAAH,sDAQPC,GAAS,uCAAG,WAAOC,GAAP,eAAAhQ,EAAA,yDAClBgQ,EADkB,0EAKArB,GAAW,mBAAoB,CAClD,YAAaqB,IANM,YAKfC,EALe,UAQPA,EAAOC,WARA,0CASZD,EAAOC,YATK,iCAWZ,IAXY,mFAad,IAbc,0DAAH,sDAiBTC,GAAQ,uCAAG,WAAOC,GAAP,eAAApQ,EAAA,sEACF2O,GAAW,UAAD,OAAWyB,IADnB,cAChBC,EADgB,yBAEfA,EAAMlhB,OAFS,2CAAH,sDAKRmhB,GAAS,uCAAG,WAAOC,GAAP,iBAAAvQ,EAAA,sEACD2O,GAAW,mCADV,OACjB6B,EADiB,cAAAxQ,EAAA,KAEPwQ,GAFO,iDAEZjX,EAFY,WAGjBkX,SAASD,EAAQjX,GAAGmX,MAAQD,SAASF,GAHpB,yCAIZC,EAAQjX,GAAG3J,MAJC,uDAOhB,IAPgB,4CAAH,sDAUT+gB,GAAW,uCAAG,WAAOxM,GAAP,iBAAAnE,EAAA,sEACO2O,GAAW,wCADlB,OACnBiC,EADmB,cAAA5Q,EAAA,KAET4Q,GAFS,iDAEdrX,EAFc,WAGnBkX,SAASG,EAAkBrX,GAAGmX,MAAQD,SAAStM,GAH5B,yCAIdyM,EAAkBrX,GAAG8I,aAJP,uDAOlB,IAPkB,4CAAH,sDAUjB,SAASwO,GAAT,GAAmC,IAAZL,EAAW,EAAXA,QAAW,EACXnf,mBAAS,IADE,mBAC9ByJ,EAD8B,KACvBJ,EADuB,KAgBrC,OAdApI,qBAAU,WACN,sBAAC,8BAAA0N,EAAA,0DAAAA,EAAA,iBACczG,GADd,+BAAAyG,EAAA,qEAGYwQ,EAAQjX,GAAGuX,gBAHvB,aAGY,EAAqBhW,OAHjC,gCAG4DwV,GAAS,UAACE,EAAQjX,GAAGuX,gBAAZ,aAAC,EAAqBhW,OAH3F,wBAGyC,WAHzC,eAGoG,KAHpG,2BAG2G,GAH3G,gCAIY0V,EAAQjX,GAAGwX,kBAJvB,aAIY,EAAuBjW,OAJnC,kCAI6DqV,GAAQ,UAACK,EAAQjX,GAAGwX,kBAAZ,aAAC,EAAuBjW,OAJ7F,yBAI2C,UAJ3C,eAIsG,KAJtG,6BAI6G,GAJ7G,gDAKY0V,EAAQjX,GAAGyX,mBALvB,aAKY,EAAwBlW,OALpC,kCAK+EqV,GAAQ,UAACK,EAAQjX,GAAGyX,mBAAZ,aAAC,EAAwBlW,OALhH,2BAK4C,2BAL5C,iBAKyH,KALzH,6BAKgI,GALhI,2CAMY,UAAA0V,EAAQjX,GAAG0X,sBAAX,eAA2BnW,OAAQ,6BAA+ByD,KAAM,UAACiS,EAAQjX,GAAG0X,sBAAZ,aAAC,EAA2BnW,OAAO6D,OAAO,KAAO,GAJ1HuS,EAFX,YAOW3X,EAAIiX,EAAQpZ,OAAS,IAAG8Z,GAAU,QACtCxW,GAAS,SAAAyW,GAAG,4BAAQA,GAAR,CAAaD,OARhC,kDAAAlR,EAAA,KACmBwQ,GADnB,oDACcjX,EADd,6BACcA,GADd,wEAAD,KAWD,CAACiX,IAGA1V,EAAMzB,KAAI,SAACsK,GAAD,OACN,mCAAGA,OAKf,IAmDeyN,GAnDK,SAAC,GAA2K,IAAzK3B,EAAwK,EAAxKA,SAAUtL,EAA8J,EAA9JA,KAAMkN,EAAwJ,EAAxJA,QAASC,EAA+I,EAA/IA,QAASC,EAAsI,EAAtIA,QAASC,EAA6H,EAA7HA,SAA6H,IAAnHC,YAAmH,aAArGC,iBAAqG,aAAlFC,iBAAkF,aAA/DC,iBAA+D,aAA5CC,iBAA4C,aAAzBC,kBAAyB,WAEjKzgB,mBAAS,MAFwJ,mBAEpLyJ,EAFoL,KAE7KJ,EAF6K,cAI5KqX,IAJ4K,2EAI3L,4DAAA/R,EAAA,0DACQyR,EADR,gCAC2BnC,GAAMnL,GADjC,mDAEQuN,EAFR,oBAGYvN,IAASva,IAHrB,yCAImB,2BAJnB,uBAKqB+gB,GAAWxG,GALhC,oDAOQwN,EAPR,qBAQgBL,EAAQU,QARxB,kCAQyCxC,GAAQ,UAAW8B,EAAQU,SARpE,8BAQ+E,gBAR/E,6BAQkG,GARlG,sBASaV,EAAQW,QATrB,kCASsCzC,GAAQ,UAAW8B,EAAQW,SATjE,8BAS4E,gBAT5E,6BAS+F,GAT/F,kEAYQL,EAZR,0BAaiBP,EAAQa,OAASb,EAAQa,OAAS,IAAM,MAAQb,EAAQxB,KAbzE,kCAasFF,GAAQ0B,EAAQxB,MAbtG,iDAa8G,GAb9G,qCAaqHwB,EAAQpB,OAb7H,kCAa4IF,GAAUsB,EAAQpB,QAb9J,mDAawK,GAbxK,wDAa8K,IAb9K,MAaqLoB,EAAQc,IAAMd,EAAQc,IAAM,GAbjN,2CAeQN,EAfR,2BAgBgB,iBAACN,QAAD,IAACA,GAAD,UAACA,EAASa,iBAAV,aAAC,EAAoBtX,aAArB,QAA8B,IAAM,KAApC,iBAA2CyW,QAA3C,IAA2CA,GAA3C,UAA2CA,EAASc,gBAApD,aAA2C,EAAmBvX,aAA9D,QAAuE,IAAM,OAhB7F,OAiBayW,QAjBb,IAiBaA,GAjBb,UAiBaA,EAASe,0BAjBtB,aAiBa,EAA6BxX,OAjB1C,kCAiB+D6V,GAAW,OAACY,QAAD,IAACA,GAAD,UAACA,EAASe,0BAAV,aAAC,EAA6BxX,OAjBxG,2BAiBmD,IAjBnD,kBAiBiH,MAjBjH,8BAiB0H,GAjB1H,oDAkBoB,OAAPyW,QAAO,IAAPA,GAAA,UAAAA,EAASgB,iBAAT,eAAoBzX,QAAS,UAAAyW,EAAQgB,iBAAR,eAAmBzX,OAAQ,YAAe,GAlBpF,yBAmBoB,OAAPyW,QAAO,IAAPA,GAAA,UAAAA,EAASiB,iBAAT,eAAoB1X,QAAS,UAAAyW,EAAQiB,iBAAR,eAAmB1X,OAAQ,YAAe,GAnBpF,yBAoBoB,OAAPyW,QAAO,IAAPA,GAAA,UAAAA,EAASkB,aAAT,eAAgB3X,QAAS,UAAAyW,EAAQkB,aAAR,eAAe3X,OAAQ,KAAQ,GApBrE,yBAqBoB,OAAPyW,QAAO,IAAPA,GAAA,UAAAA,EAASmB,eAAT,eAAkB5X,QAAS,UAAAyW,EAAQmB,eAAR,eAAiB5X,OAAQ,KAAQ,GArBzE,4BAsBmB6U,GAAO,OAAC4B,QAAD,IAACA,GAAD,UAACA,EAASoB,cAAV,aAAC,EAAiB7X,OAtB5C,qDAsBsD,GAtBtD,oDAsBoE,OAAPyW,QAAO,IAAPA,GAAA,UAAAA,EAASqB,WAAT,eAAc9X,OAAd,UAAuByW,EAAQqB,WAA/B,aAAuB,EAAa9X,MAAS,GAtB1G,2CAwBQgX,EAxBR,6BAyBwB,OAARN,QAAQ,IAARA,OAAA,EAAAA,EAAUrpB,OAAe,OAARqpB,QAAQ,IAARA,OAAA,EAAAA,EAAUrpB,MAAO,KAAO,MAChC,OAARqpB,QAAQ,IAARA,OAAA,EAAAA,EAAUqB,QAAgB,OAARrB,QAAQ,IAARA,OAAA,EAAAA,EAAUqB,OAAQ,aAAe,MAC3C,OAARrB,QAAQ,IAARA,OAAA,EAAAA,EAAUU,SAAiB,OAARV,QAAQ,IAARA,OAAA,EAAAA,EAAUU,QAAS,KAAO,MA3B9D,OA4BiBV,QA5BjB,IA4BiBA,OA5BjB,EA4BiBA,EAAU3B,MA5B3B,kCA4BwCF,GAAO,OAAC6B,QAAD,IAACA,OAAD,EAACA,EAAU3B,MA5B1D,kCA4BkE2B,QA5BlE,IA4BkEA,OA5BlE,EA4BkEA,EAAUW,IA5B5E,8BA4BkF,KA5BlF,8BA4ByF,GA5BzF,oDA6ByB,OAARX,QAAQ,IAARA,OAAA,EAAAA,EAAUsB,OAAQ,eAAiBvU,KAAM,OAACiT,QAAD,IAACA,OAAD,EAACA,EAAUsB,OAAOnU,OAAO,KAAO,KAAO,GA7BjG,yBA8ByB,OAAR6S,QAAQ,IAARA,OAAA,EAAAA,EAAUuB,OAAQ,wBAAqB,GA9BxD,yBA+ByB,OAARvB,QAAQ,IAARA,OAAA,EAAAA,EAAUwB,QAAS,2DAAwD,GA/B5F,yBAgCyB,OAARxB,QAAQ,IAARA,OAAA,EAAAA,EAAUyB,YAAa,uGAAoG,GAhC5I,yBAiCyB,OAARzB,QAAQ,IAARA,OAAA,EAAAA,EAAU0B,QAAS,sFAAmF,OAjCvH,0DAmCiB1D,GAAQC,EAAUtL,GAnCnC,wFAJ2L,sBAgD3L,OANA7R,qBAAU,WACN,sBAAC,4BAAA0N,EAAA,sEACuB+R,IADvB,OACSjX,EADT,OAEGJ,EAASI,GAFZ,0CAAD,KAID,CAACqJ,EAAMkN,EAASC,EAASC,EAASC,IAC9B,mCAAG1W,KCvBCqY,OAzJf,YAOG,EANDthB,KAME,IALFoB,EAKC,EALDA,QACAmgB,EAIC,EAJDA,SACA3R,EAGC,EAHDA,QACA5B,EAEC,EAFDA,QAIMjG,GAFL,iEAEiB1H,aAAY,SAACC,GAAD,OAAWA,EAAMwE,SACzCqH,EAAM,SAACzO,GAAD,uBAAcqK,EAAUkP,OAAOvZ,UAA/B,aAAc,EAA4BuL,OAHrD,EAIqCzJ,mBAAS,IAJ9C,mBAIMgiB,EAJN,KAImBC,EAJnB,KAcKC,EAAY,CAChBh3B,IAAOC,WACPD,IAAOE,UACPF,IAAOO,mBAeT,OAZAwV,qBAAU,WACR6H,IAAQ8L,iBAAiBsN,KACxB,IAEHjhB,qBAAU,WAAO,IAAD,IACRkhB,EAAS,OAAG/R,QAAH,IAAGA,GAAH,UAAGA,EAASgS,kBAAZ,iBAAG,EAAqBC,oBAAoB,UAA5C,aAAG,EAA6C9I,UAC3D4I,GACFvT,IAAU0K,WAAW6I,GAAWhjB,MAAK,SAACwZ,GACpCsJ,EAAetJ,EAAQpa,WAG1B,IAED,qCACE,cAAC0D,EAAA,EAAD,CAAaC,GAAG,qBAAhB,gCACCkO,EACC,qCACE,cAACjO,EAAA,EAAD,UACE,eAACC,EAAA,EAAD,CAAmBF,GAAG,2BAAtB,UACE,cAAC,KAAD,CAAOiN,SAAS,SAAS3M,MAAM,UAA/B,SACE,6JAIF,qBAAKW,UAAU,gBAAf,SACE,uBAAOA,UAAU,QAAjB,SACE,kCACE,+BACE,oBAAImf,OAAO,MAAM5b,MAAO,CAAEsL,WAAY,QAAtC,wBAGA,+BACGrF,EAAIzhB,IAAOC,YAAc,IAAMwhB,EAAIzhB,IAAOE,WAC3C,sBAAMsb,MAAO,CAAE4J,QAAS,SAAxB,SACE,cAAC,GAAD,CACEiQ,WAAW,EACXP,QAlDP,SAAC9hB,GAAc,IAAD,QAK/B,MAAO,CAAE2iB,OAJG,OAAGtY,QAAH,IAAGA,GAAH,UAAGA,EAAWkP,OAAOvZ,UAArB,aAAG,EAA6BmjB,QAAQ5X,MAInC+U,KAHP,OAAGjW,QAAH,IAAGA,GAAH,UAAGA,EAAWkP,OAAOvZ,UAArB,aAAG,EAA6BojB,OAAO7X,MAG1BmV,OAFX,OAAGrW,QAAH,IAAGA,GAAH,UAAGA,EAAWkP,OAAOvZ,UAArB,aAAG,EAA6BqkB,SAAS9Y,MAEtBqX,IADtB,OAAGvY,QAAH,IAAGA,GAAH,UAAGA,EAAWkP,OAAOvZ,UAArB,aAAG,EAA6BqjB,IAAI9X,OA8CZ+Y,CAAWt3B,IAAOO,6BAKnC,+BACE,oBAAIib,MAAO,CAAEsL,WAAY,QAAzB,yBACA,6BAAK5B,EAAQpM,WAEf,+BACE,oBAAI0C,MAAO,CAAEsL,WAAY,QAAzB,4BACA,6BAAK5B,EAAQgS,WAAWK,4BAE1B,+BACE,oBAAI/b,MAAO,CAAEsL,WAAY,QAAzB,2BACA,mCAEG5B,EAAQgS,YACPhS,EAAQgS,WAAWM,oBACnBtS,EAAQgS,WAAWM,mBAAmBC,uBAG5C,+BACE,oBAAIjc,MAAO,CAAEsL,WAAY,QAAzB,sCAGA,wCAEF,+BACE,oBAAItL,MAAO,CAAEsL,WAAY,QAAzB,wCAGA,gFAEF,+BACE,oBAAItL,MAAO,CAAEsL,WAAY,QAAzB,6BACA,2GAKF,+BACE,oBAAItL,MAAO,CAAEsL,WAAY,QAAzB,6BACA,6BAAKgQ,cAKb,oBAAI7e,UAAU,sBAAd,oCACA,qBAAIA,UAAU,OAAd,UACE,oBAAIA,UAAU,KAAd,uHACA,qBAAIA,UAAU,KAAd,iHAAuH,mBAAGC,KAAK,mCAAR,6CAEzH,oBAAID,UAAU,sBAAd,wBACA,qBAAIA,UAAU,OAAd,UACE,oBAAIA,UAAU,KAAd,4MACA,qBAAIA,UAAU,KAAd,mEAA0E,IAA1E,IAA+E,mBAAGC,KAAK,mCAAR,uCAAyE,IAAxJ,2EAEF,oBAAID,UAAU,sBAAd,sCACA,qBAAIA,UAAU,OAAd,UACE,oBAAIA,UAAU,KAAd,4MACA,oBAAIA,UAAU,KAAd,+KACA,oBAAIA,UAAU,KAAd,2MAEF,oBAAIA,UAAU,sBAAd,qCACA,qBAAIA,UAAU,OAAd,UACE,oBAAIA,UAAU,KAAd,0KACA,oBAAIA,UAAU,KAAd,qMACA,qBAAIA,UAAU,KAAd,+HAAsI,IAAtI,IAA2I,mBAAGC,KAAK,mCAAR,0CAC3I,oBAAID,UAAU,KAAd,gIAIN,eAACd,EAAA,EAAD,WACE,cAAC,KAAD,CAAQE,QAASX,EAASgJ,MAAM,QAAQiD,QAAQ,YAChD,cAAC,KAAD,CACEW,QAASA,EACTjM,QAASwf,EACTnX,MAAM,SACNiD,QAAQ,gBAKd,O,0DCjJO,SAAS+U,GAAT,GAAkF,IAAD,wBAAnDxS,EAAmD,EAAnDA,QAAmD,IAA1CyS,gBAA0C,MAA/B,aAA+B,MAAvBlb,aAAuB,MAAf,EAAe,mDAC9DpC,IAAMvF,UAAS,IAD+C,mBACvFmb,EADuF,KAC7EC,EAD6E,KAExF0H,EAAmB1S,EAAQ0S,iBAE3B3U,EAAWC,cAJ6E,EAK1D7I,IAAMvF,UAAS,GAL2C,mBAKvF+iB,EALuF,KAK3EC,EAL2E,OAMhEzd,IAAMvF,UAAS,GANiD,mBAMvFwO,EANuF,KAM9EC,EAN8E,KAOxFwU,EAAY,uCAAG,sBAAAtU,EAAA,sDAAcqU,GAAc,GAA5B,2CAAH,qDAEZE,EAAW,uCAAG,sBAAAvU,EAAA,6DAClBF,GAAW,GADO,kBAGVG,IAAUuU,uBAAuB/S,EAAQa,KAAMb,EAAQiC,MAH7C,OAIhB5D,GAAW,GACXuU,GAAc,GACd1e,OAAOC,SAAS6e,SANA,gDAShBjV,EAAS3N,aAAK,CACZ0K,QAAS,KAAMA,QACfiE,SAAU,aAXI,yBAchBV,GAAW,GACXuU,GAAc,GAfE,4EAAH,qDAmBXK,EAAM,OAAGjT,QAAH,IAAGA,GAAH,UAAGA,EAASkT,2BAAZ,aAAG,EAA8BxS,OAGzCyS,EAAiB,GAiEfC,EAAwB,WAAO,IAAD,EAKlC,MAF6D,WAAlC,OAAPpT,QAAO,IAAPA,GAAA,UAAAA,EAASkT,2BAAT,eAA8BxS,SAKpD,OACE,qCACA,cAACnP,EAAA,EAAD,CAAQnB,KAAMuiB,EAAYnhB,QAAS,kBAAMohB,GAAc,IAAQnhB,kBAAgB,qBAAqBC,mBAAiB,2BAArH,SACE,cAAC,GAAD,CAAmBigB,SAAUmB,EAAa9S,QAASA,EAAS5P,KAAMuiB,EAAYvU,QAASA,EAAS5M,QAAS,kBAAMohB,GAAc,QAG/H,sBAAK7f,UAAU,8CAAf,UACE,eAACsY,GAAA,EAAD,CAAWN,SAAUA,EAAUO,QAAM,EAAC/P,SAAU,kBAAMyP,GAAaD,IAAWzU,MAAO,CAAC+c,UAAW,QAAjG,UACE,cAAC9H,GAAA,EAAD,CAAkBE,gBAAc,kBAAiB3Z,GAAG,iBAApD,SACE,sBAAKiB,UAAU,0CAAf,UACE,qBAAIA,UAAU,sBAAd,UACGgY,EAAW,cAAC,KAAD,CAAmBzU,MAAO,CAAClE,MAAO,uBAA0B,cAAC,KAAD,CAAgBkE,MAAO,CAAClE,MAAO,uBACtG4N,EAAQa,MAAQ,qCAAQb,EAAQa,KAAhB,WAChBb,EAAQ7R,QAEX,uBAAM4E,UAAU,QAAhB,UACGiN,EAAQM,SAAW,cAACG,GAAA,EAAD,CAAS7M,MAAM,0BAAf,SAAyC,qBAAK0C,MAAO,CAACkH,OAAQ,oBAAqBtK,IAAI,+BAC1G8M,EAAQO,cAAgB,cAACE,GAAA,EAAD,CAAS7M,MAAM,0CAAf,SAAyD,qBAAK0C,MAAO,CAACkH,OAAQ,oBAAqBtK,IAAI,8BAC/H8M,EAAQQ,oBAAsB,cAACC,GAAA,EAAD,CAAS7M,MAAM,oCAAf,SAAmD,qBAAK0C,MAAO,CAACkH,OAAQ,oBAAqBtK,IAAI,yCAItI,cAACyY,GAAA,EAAD,CAAkB5Y,UAAU,mBAA5B,SACE,sBAAKA,UAAU,SAAf,UACE,sBAAKA,UAAU,OAAf,UACE,8BACE,+BACE,sDACCqgB,KAA2B,qBAAK9c,MAAO,CAAClE,MAAO,WAApB,SAnGb,WAAO,IAAD,EAEnC,cAAO4N,QAAP,IAAOA,GAAP,UAAOA,EAASkT,2BAAhB,aAAO,EAA8BvI,cACnC,IAAK,SACHwI,EAAiB,aACjB,MAEF,IAAK,WACHA,EAAiB,uBACjB,MAEF,IAAK,UACHA,EAAiB,mBACjB,MAEF,IAAK,UACHA,EAAiB,kBACjB,MAEF,IAAK,UACHA,EAAiB,qBACjB,MAEF,IAAK,qBACHA,EAAiB,2BACjB,MAEF,IAAK,WACHA,EAAiB,2BACjB,MAEF,IAAK,MACHA,EAAiB,UACjB,MAEF,IAAK,UACHA,EAAiB,2BACjB,MAEF,IAAK,SACHA,EAAiB,yCACjB,MAEF,IAAK,YACHA,EAAiB,oBACjB,MAEF,IAAK,WACHA,EAAiB,mBACjB,MAEF,QACEA,EAAiB,GAIrB,OAAOA,EA2CoEG,MACzDF,MAAD,UAA4BpT,EAAQuT,mBAApC,aAA4B,EAAqBC,cAClD,qBAAKld,MAAO,CAAClE,MAAO,WAApB,sBAEEghB,MAA4B,UAAApT,EAAQuT,mBAAR,eAAqBE,YAAwB,SAAXR,IAAgD,OAAzBjT,EAAQO,eAAkD,IAAzBP,EAAQO,eAChI,qBAAKjK,MAAO,CAAClE,MAAO,WAApB,oBAEEghB,MAA4B,UAAApT,EAAQuT,mBAAR,eAAqBE,YAAwB,SAAXR,IAA+C,IAAzBjT,EAAQO,cAC9F,qBAAKjK,MAAO,CAAClE,MAAO,WAApB,2BAEEghB,KAAqC,QAAVH,GAC7B,qBAAK3c,MAAO,CAAClE,MAAO,WAApB,oBAEEghB,OAA4B,UAACpT,EAAQuT,mBAAT,aAAC,EAAqBE,cAAa,UAACzT,EAAQuT,mBAAT,aAAC,EAAqBC,cAAkC,YAAlBxT,EAAQf,QAC/G,qBAAK3I,MAAO,CAAClE,MAAO,WAApB,2BAIN,8BACE,+BACE,0CACA,oBAAIkE,MAAO,CAAClE,MAAO,sBAAuBwP,WAAY,QAAtD,SAAgE9E,KAAM,OAACkD,QAAD,IAACA,GAAD,UAACA,EAASuT,mBAAV,aAAC,EAAsBG,UAAUxW,OAAO,+BAG9E,WAA5B,OAAP8C,QAAO,IAAPA,GAAA,UAAAA,EAASU,cAAT,eAAiBnS,gBAClB,8BACE,+BACE,sDACCyR,EAAQW,YAAcX,EAAQO,aAAc,oBAAIjK,MAAO,CAAElE,MAAO,WAApB,uBAAkD,MACvE,IAAvB4N,EAAQW,YAAwBX,EAAQO,aAAc,oBAAIjK,MAAO,CAAElE,MAAO,WAApB,2BAAsD,KACrF,OAAvB4N,EAAQW,WAAqB,+CAAyB,aAO5DX,EAAQ2T,YACT,sBAAK5gB,UAAU,SAAf,UACE,oBAAIA,UAAU,sBAAd,0BACA,4BAAIiN,EAAQY,iBAId,sBAAK7N,UAAU,SAAf,UACE,oBAAIA,UAAU,sBAAd,2BACA,oBAAIA,UAAU,mBAAmBuD,MAAO,CAACsd,YAAa,KAAtD,SACClB,EAAiB9a,KAAI,SAACsK,EAAMpK,GAAP,OACpB,qBAAI/E,UAAU,KAAd,UACE,cAAC,KAAD,CAAW+I,SAAS,SAASxF,MAAO,CAAClE,MAAO,0BAD9C,OAGG8P,EAAK7I,QAHgBvB,aAUzBsb,KAA0E,SAAxC,OAAPpT,QAAO,IAAPA,GAAA,UAAAA,EAASkT,2BAAT,eAA8BvI,iBAAkC,OAAP3K,QAAO,IAAPA,GAAA,UAAAA,EAASgS,kBAAT,eAAqBM,oBAAqB,GACjI,sBAAKvf,UAAU,SAAf,UACE,qBAAIA,UAAU,sBAAd,oCACmBiN,QADnB,IACmBA,GADnB,UACmBA,EAASgS,kBAD5B,aACmB,EAAqBK,uBADxC,OAGA,8CAAUrS,QAAV,IAAUA,GAAV,UAAUA,EAASgS,kBAAnB,aAAU,EAAqBM,iCAMvC,8BACE,cAAC,KAAD,2BAAmBtS,GAAnB,IAA4B2R,SAAUkB,EAAc1gB,QAvMrC,WAAQsgB,EAASzS,IAuM2CiB,eAAe,EAAM1J,MAAOA,a,wDCnNzGd,GAAYC,aAAW,SAACC,GAAD,MAAY,CACvCC,KAAM,CAEJid,SAAU,WACVhd,UAAWF,EAAMX,QAAQ,GACzBkK,QAAS,OACTE,WAAY,SAEZiT,UAAW,OACX7R,OAAQ,mCACR5F,aAAc,MACdC,OAAQ,QAGViY,MAAO,CACLC,WAAYpd,EAAMX,QAAQ,GAC1Bge,KAAM,GAERC,WAAY,CACVxS,QAAS,QAyBEyS,OArBf,YAAqD,EAAhC1Z,MAAiC,IAA1B7T,EAAyB,EAAzBA,YAAgByO,EAAS,uCAC7C+G,EAAU1F,KAEhB,OACE,eAAC0d,GAAA,EAAD,CAAOC,UAAU,OAAOrhB,UAAWoJ,EAAQvF,KAA3C,UACA,cAACyd,GAAA,EAAD,CAA8BthB,UAAWoJ,EAAQ8X,WAAYpW,aAAW,SAAxE,SACE,cAAC,KAAD,MAEF,cAACyW,GAAA,EAAD,aACEhX,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5C6M,KAAM,SACNvM,UAAWoJ,EAAQ2X,MACnBpW,YAAY,YACZC,WAAY,CAAE,aAAchX,GAC5B0S,OAAK,GACDjE,Q,WCzCJqB,GAAYC,YAAW,CAC3B6d,GAAI,CACFC,UAAW,OACX/S,QAAS,EACTvB,QAAS,QAEXuU,OAAQ,CACNC,WAAY,YACZ5Y,SAAU,OACV1J,MAAO,qBACPuJ,WAAY,QACZE,OAAQ,OACR8F,MAAO,OACPH,OAAQ,oBACRmT,UAAW,aACX/Y,aAAc,MACd4B,OAAQ,SAIG,SAASoX,GAAT,GAAiH,IAAxFrd,EAAuF,EAAvFA,MAAuF,IAAhFsd,sBAAgF,aAAzDC,sBAAyD,aAAlCvZ,gBAAkC,MAAvB,aAAuB,EAATnG,EAAS,sEACvH+G,EAAU1F,KAeVse,EAPYC,aAAc,aAC9Bzd,QACAsd,iBACAC,iBACAvZ,SAVuB,SAAC/I,EAAEyiB,GACH,oBAAb1Z,GACRA,EAAS0Z,KASR7f,IALG8f,MAOoBtd,KAAI,SAAAsK,GAC9B,IAAMiT,EAAWjT,EAAK+S,OAAS7f,EAAM6f,KACrC,OAAO,2BAAI/S,GAAX,IAAiBiT,gBAKnB,OACE,8BACE,oBAAIpiB,UAAWoJ,EAAQoY,GAAvB,SACGQ,EAAcnd,KAAI,WAAoCV,GAAW,IAA5C+d,EAA2C,EAA3CA,KAAM3V,EAAqC,EAArCA,KAAM6V,EAA+B,EAA/BA,SAAajT,EAAkB,0CAC3DnN,EAAW,KAwBf,OArBEA,EADW,mBAATuK,GAAsC,iBAATA,EACpB,SACO,SAATA,EAEP,gDAAQA,KAAK,SAASvM,UAAWoJ,EAAQsY,OACvCne,MAAO,CACLsL,WAAYuT,EAAW,YAASnY,EAChC5K,MAAO+iB,GAAY,UACnBxZ,WAAYwZ,GAAY,UACxB3T,OAAQ2T,GAAY,sBACbjT,GANX,aAOG+S,KAKH,gDAAQ3V,KAAK,UAAa4C,GAA1B,aACG5C,KAKA,6BAAiBvK,GAARmC,UCtEX,SAASsb,GAAT,GAA6F,IAAD,MAA9DxS,EAA8D,EAA9DA,QAA4BzI,GAAkC,EAArDkb,SAAqD,EAAlClb,OAAkC,IAA3B6d,gBAA2B,SAEnGnV,GAFmG,yDAEzFjL,wBAUhB,OACE,qBAAKjC,UAAU,8CAAf,SACE,sBAAKA,UAAU,yBAAf,UACE,wBAGA,gCACGiN,EAAQa,MAAQ,qCAAQb,EAAQa,KAAhB,WACjB,sBAAK9N,UAAU,QAAf,UACGiN,EAAQM,SAAW,cAACG,GAAA,EAAD,CAAS7M,MAAM,0BAAf,SAAyC,qBAAKV,IAAI,0BAC5C,IAAzB8M,EAAQO,cAAyB,cAACE,GAAA,EAAD,CAAS7M,MAAM,0CAAf,SAAyD,qBAAKV,IAAI,wBACnG8M,EAAQQ,oBAAsB,cAACC,GAAA,EAAD,CAAS7M,MAAM,oCAAf,SAAmD,qBAAKV,IAAI,iCAG/F,sBAAKH,UAAU,SAAf,UACE,oBAAIA,UAAU,sBAAd,SAAqCiN,EAAQ7R,OAC7C,sBAAK4E,UAAU,wBAAf,UACsC,WAA5B,OAAPiN,QAAO,IAAPA,GAAA,UAAAA,EAASU,cAAT,eAAiBnS,gBAChB,gCACGyR,EAAQW,YAAcX,EAAQO,aAAc,qBAAKjK,MAAO,CAAElE,MAAO,WAArB,4CAAyE,MAC9F,IAAvB4N,EAAQW,YAAwBX,EAAQO,aAAc,qBAAKjK,MAAO,CAAElE,MAAO,WAArB,yCAAsE,KACrG,OAAvB4N,EAAQW,WAAqB,mEAA8C,SAG7E,UAAAX,EAAQuT,mBAAR,eAAqBE,aAArB,UAAkCzT,EAAQuT,mBAA1C,aAAkC,EAAqBC,cACxD,qBAAKld,MAAO,CAAClE,MAAO,WAApB,2BAKN,qBAAKW,UAAU,cAAcsiB,MAAM,SAAnC,SACE,cAAC,KAAD,2BAAmBrV,GAAnB,IAA4B7N,QAxChB,WAClB8N,EAAQa,KAAK,CACXC,SAAS,gBAAD,OAAkBf,EAAQa,MAClCnQ,MAAO,CACLsQ,KAAMf,EAAQ9L,SAAS4M,aAoC6BE,eAAe,EAAM1J,MAAOA,EAAO6d,SAAUA,YC/BzG,IAAME,GAAOC,aAAW,CACtB3e,KAAM,CACJ4e,aAAc,iBACdnC,UAAW,QAEboC,UAAW,CACT/J,gBAAiB,OACjB7P,OAAQ,QAPC0Z,CASVG,MAEGC,GAAMJ,cAAW,SAAC5e,GAAD,MAAY,CACjCC,KAAM,CACJgf,YAAa,SACb9Z,SAAU,UACV,aAAc,CACZ1J,MAAO,WAET,UAAW,CACTA,MAAO,YAGX+iB,SAAU,MAXAI,EAYR,SAACngB,GAAD,OAAW,cAAC,KAAD,aAAQygB,eAAa,GAAKzgB,OAOzC,SAAS0gB,GAAS1gB,GAAQ,IAChBL,EAAqCK,EAArCL,SAAUsE,EAA2BjE,EAA3BiE,MAAOnC,EAAoB9B,EAApB8B,MAAU6e,EADZ,YACsB3gB,EADtB,8BAGvB,OACE,6CACE4gB,KAAK,WACLC,OAAQ5c,IAAUnC,EAClBpF,GAAE,0BAAqBoF,GACvBzF,kBAAA,qBAA+ByF,IAC3B6e,GALN,aAOG1c,IAAUnC,GACT,cAACgf,GAAA,EAAD,CAAKvS,EAAG,EAAR,SACE,cAACwS,GAAA,EAAD,UAAaphB,SAavB,SAASqhB,GAAUlf,GACjB,MAAO,CACLpF,GAAG,cAAD,OAAgBoF,GAClB,gBAAgB,mBAAhB,OAAoCA,IAIxC,IAAMT,GAAYC,aAAW,SAACC,GAAD,MAAY,CACvCC,KAAM,CACJ8E,SAAU,GAEZ2a,SAAU,OAcNC,G,WAEJ,WAAY5lB,EAAOuR,EAAMsU,EAAsBC,GAAiB,qBAC9DxoB,KAAKyoB,OAAS/lB,EAAM,GACpB1C,KAAK0oB,UAAYhmB,EAAM,GACvB1C,KAAK2oB,MAAQ1U,EACbjU,KAAK4oB,sBAAwBL,EAC7BvoB,KAAK6oB,uBAAyBL,E,uCAGhC,WAAY,IAAD,EACT,iBAAOxoB,KAAKyoB,OAAOxB,YAAnB,QAA2B,I,0BAG7B,SAAa6B,GACX9oB,KAAKyoB,OAAOM,OAASD,EAAM7jB,OAAOoG,MAClCrL,KAAKyoB,OAAOxB,KAAO,EACnB,IAAM+B,EAAQ,2BAAQhpB,KAAKyoB,QAAb,IAAqBM,OAAQ/oB,KAAK+oB,OAAQ9B,KAAMjnB,KAAKinB,OACnEjnB,KAAK0oB,UAAUM,GACf,IAAID,EAAS/oB,KAAKyoB,OAAOM,OAErBE,MAAMF,IAAWA,EAAOphB,OAAS,IAKhCshB,MAAMF,IAAWA,EAAOphB,OAAS,GAKtC3H,KAAKkpB,a,wBAGP,SAAWjC,GACTjnB,KAAKyoB,OAAOxB,KAAOA,EACnB,IAAM+B,EAAQ,2BAAQhpB,KAAKyoB,QAAb,IAAqBxB,KAAMjnB,KAAKinB,OAC9CjnB,KAAK0oB,UAAUM,GAEfhpB,KAAKkpB,a,mBAGP,WAAe,IAAD,EACZ,iBAAOlpB,KAAKyoB,OAAOU,eAAnB,QAA8B,K,qBAGhC,WACE,QAAOnpB,KAAKyoB,OAAOU,U,sBAGrB,WACE,OAAO5e,KAAK6e,KAAKppB,KAAKyoB,OAAOY,WA7Df,M,kBAgEhB,WACE,OAAOrpB,KAAKyoB,OAAOM,S,6DAGrB,2CAAAxY,EAAA,sEAEwBC,IAAUjC,IAAI,kBAAmB,CACrD+a,QAAO,UAAEtpB,KAAK+oB,cAAP,QAAiB,GACxBQ,cAAe,MACfhB,qBAAsBvoB,KAAK4oB,sBAC3BY,YAAaxpB,KAAKinB,KAAO,EACzBhT,KAAMjU,KAAK2oB,QAPf,cAEQQ,EAFR,OASQM,EAAaN,EAAQO,eAAe9f,KAAI,SAAA+L,GAAC,OAAI,EAAKkT,uBAAuBlT,MATjF,SAUmCsD,YAA0BwQ,EAAYzpB,KAAK2oB,OAV9E,OAUQgB,EAVR,OAWQX,EAAW,CACf/B,KAAMjnB,KAAKinB,KACX8B,OAAQ/oB,KAAK+oB,OACbI,QAASQ,EACTN,WAAYF,EAAQS,YAEtB5pB,KAAK0oB,UAAUM,GAjBjB,gD,6DA2Ba,SAASa,GAAT,GAKX,IAJFC,EAIC,EAJDA,yBAIC,IAHD5T,iBAGC,SAFDjC,EAEC,EAFDA,KACA8V,EACC,EADDA,qBAGM9X,EAAUjL,uBAFf,GAGeyB,KAC8B7G,mBAAS,IAJtD,mBAIMooB,EAJN,KAIuBC,EAJvB,OAMqDroB,mBAAS,IAN9D,mBAMMsoB,EANN,KAM2BC,EAN3B,KAOKC,EAAuBF,EAAoBzf,QAAO,SAAA8F,GAAC,MAAiB,UAAbA,EAAEmC,UACzD2X,EAAWH,EAAoBzf,QAAO,SAAA8F,GAAC,MAAiB,UAAbA,EAAEmC,UAC7C4X,EAAmBD,EAAS1iB,OAAS,EAAI,EAAI,EAC7C4iB,EAAsB,EAAID,EAC1BE,EAAiB,EAAIF,EACrBG,EAAkB,EAAIH,EAE5BznB,oBAAS,sBAAC,8BAAA0N,EAAA,6DACFkO,EAAOqL,IADL,SAEmB7Q,YAA0BwF,GAF7C,OAEFiM,EAFE,OAGRP,EAAuBO,GAHf,2CAIP,IAlBF,MAwB6C9oB,mBAAS,MAxBtD,mBAwBM+oB,EAxBN,KAwBuBC,EAxBvB,KAyBKC,EAAY,uCAAG,WAAO/B,EAAOgC,GAAd,uBAAAva,EAAA,yDAEnB0Z,EAAmBa,GAEfA,GAAYP,EAJG,iCAK2BR,IAL3B,mBAKVgB,EALU,EAKVA,WAAYJ,EALF,EAKEA,gBACA,OAAdI,EANY,wBAOTC,EAAkBL,EAAgB/gB,KAAI,SAAA+L,GAAC,OAAIsV,YAAoBf,EAAqBvU,EAAG,CAACuV,eAAc,EAAMpV,KAAM7B,OAPzG,UASuBgF,YAA0B+R,EAAiB/W,GATlE,QASTkX,EATS,OAUfP,EAAmBO,GAVJ,gCAaVL,GAAYN,GAAmBY,EAAapW,UAG5C8V,GAAYL,GAAoBY,EAAcrW,WACrDqW,EAAcnC,WAHdkC,EAAalC,WAdI,4CAAH,wDAuBZzE,EAAW,SAAC6G,GAChBrZ,EAAQa,KAAK,CACXC,SAAS,gBAAD,OAAkBuY,GAC1B5oB,MAAO,CACLsQ,KAAMf,EAAQ9L,SAAS4M,aAKzB1N,EAAW,EACf,SAASkmB,IACP,OAAOlmB,IAGT,IAAMgmB,EAAgB,IAAI/C,GAAY1mB,mBAAS,IAAKqS,EAAM,MAAM,SAAC0B,GAAD,OAAOsV,YAAoBf,EAAqBvU,EAAG,CAACuV,eAAe,EAAOpV,KAAM7B,OAC1ImX,EAAe,IAAI9C,GAAY1mB,mBAAS,IAAKqS,GAAM,GAAM,SAAC0B,GAAD,OAAOsV,YAAoBf,EAAqBvU,EAAG,CAACuV,eAAe,EAAOpV,KAAM7B,OAE/I,OAAIiC,EAEA,qBAAKnR,UAAU,cAAf,SACE,cAAC8U,GAAA,EAAD,MAMJ,sBAAK9U,UAAU,mBAAf,UACE,eAAC,GAAD,CAAMsG,MAAO2e,EAAiBzc,SAAUsd,EAAcviB,MAAO,CAAEO,UAAW,SAAU2iB,SAAU,QAA9F,UACE,cAAC,GAAD,aAAKhf,MAAM,4BAA+B4b,GAAU,KACnDiC,EAAS1iB,OAAS,GACjB,cAAC,GAAD,aAAK6E,MAAM,YAAe4b,GAAU,KAEtC,cAAC,GAAD,aAAK5b,MAAM,eAAkB4b,GAAU,KACvC,cAAC,GAAD,aAAK5b,MAAM,yBAA4B4b,GAAU,KACjD,cAAC,GAAD,aAAK5b,MAAM,OAAU4b,GAAU,QAEjC,eAACN,GAAD,CAAUzc,MAAO2e,EAAiB9gB,MAAOqiB,IAAzC,UACE,qBAAK7yB,KAAK,8BAAV,SACG0xB,EAAqBxgB,KAAI,SAACsK,EAAMpK,GAAP,OACxB,qBAAyBxB,MAAO,CAAEmjB,cAAe,QAAjD,SACE,cAACjH,GAAD,CAA6BxS,QAASkC,EAAMuQ,SAAUA,EAAUlb,MAAO2gB,EAAoBviB,QAAjEmC,IAD5B,iBAAoBA,SAOxB,qBAAK/E,UAAU,uBAAf,SACkC,GAA/BqlB,EAAqBziB,QACpB,+EAKL0iB,EAAS1iB,OAAS,GACjB,eAACmgB,GAAD,CAAUzc,MAAO2e,EAAiB9gB,MAAOqiB,IAAzC,UACE,qBAAK7yB,KAAK,8BAAV,SACG2xB,EAASzgB,KAAI,SAACsK,EAAMpK,GAAP,OACZ,qBAA4BxB,MAAO,CAAEmjB,cAAe,QAApD,SACE,cAACjH,GAAD,CAA6BxS,QAASkC,EAAMuQ,SAAUA,GAA5B3a,IAD5B,oBAAuBA,SAO3B,qBAAK/E,UAAU,uBAAf,SACsB,GAAnBslB,EAAS1iB,QACR,uFAKR,eAACmgB,GAAD,CAAUzc,MAAO2e,EAAiB9gB,MAAOqiB,IAAzC,UACE,qBAAK7yB,KAAK,0BAAV,SAEGiyB,GAAmBA,EAAgB/gB,KAAI,SAACsK,EAAMpK,GAAP,OACtC,cAAC,GAAD,CAAyBkI,QAASkC,EAAMkT,UAAU,GAA5Btd,QAG1B,sBAAK/E,UAAU,uBAAf,UACG4lB,GAA6C,GAA1BA,EAAgBhjB,QAClC,4EAEAgjB,GACA,qCACE,sEACA,cAAC9Q,GAAA,EAAD,aAKR,cAACiO,GAAD,CAAUzc,MAAO2e,EAAiB9gB,MAAOqiB,IAAzC,SACE,sBAAK7yB,KAAK,yBAAV,UACE,eAAC,EAAD,CAAUqM,UAAU,uBAAuBuD,MAAO,CAAEwT,aAAc,QAAlE,UACE,qBAAKxT,MAAO,CAAEqL,MAAO,OAArB,SACE,cAAC,EAAD,UACE,cAACtC,EAAD,CAAWtI,GAAI,EAAf,SACE,cAAC,GAAD,CAAWpQ,YAAY,6BAA6B4U,SAAU,SAAC/I,GAAD,OAAO4mB,EAAaM,aAAalnB,IAAI6G,MAAO+f,EAAarC,eAI7H,cAAC,GAAD,CAAYxf,MAAO6hB,EAAaO,WAAYpe,SAAU,SAAC/I,GAAD,OAAO4mB,EAAaQ,WAAWpnB,IAAIyiB,KAAMmE,EAAanE,UAE9G,sBAAKliB,UAAU,uBAAf,UAEGqmB,EAAajC,QAAQvf,KAAI,SAACsK,EAAMpK,GAAP,OACxB,cAAC,GAAD,CAAyBkI,QAASkC,EAAMkT,UAAU,GAA5Btd,MAEvBshB,EAAapW,WAA4C,GAA/BoW,EAAajC,QAAQxhB,QAC9C,iGAEAyjB,EAAapW,WACb,0GAKR,cAAC8S,GAAD,CAAUzc,MAAO2e,EAAiB9gB,MAAOqiB,IAAzC,SACE,eAAC,EAAD,CAAUxmB,UAAU,uBAAuBuD,MAAO,CAAEwT,aAAc,QAAlE,UACE,sBAAKxT,MAAO,CAAEqL,MAAO,OAArB,UACE,cAAC,EAAD,UACE,cAACtC,EAAD,CAAWtI,GAAI,EAAf,SACE,cAAC,GAAD,CAAWpQ,YAAY,+BAA+B4U,SAAU,SAAC/I,GAAD,OAAO6mB,EAAcK,aAAalnB,IAAI6G,MAAOggB,EAActC,aAG/H,cAAC,GAAD,CAAYxf,MAAO8hB,EAAcM,WAAYpe,SAAU,SAAC/I,GAAD,OAAO6mB,EAAcO,WAAWpnB,IAAIyiB,KAAMoE,EAAcpE,UAEjH,sBAAKvuB,KAAK,uBAAV,UAEG2yB,EAAclC,QAAQvf,KAAI,SAACsK,EAAMpK,GAAP,OACzB,cAAC,GAAD,CAAyBkI,QAASkC,EAAMkT,UAAU,GAA5Btd,MAEvBuhB,EAAcrW,WAA6C,GAAhCqW,EAAclC,QAAQxhB,QAChD,iGAEA0jB,EAAcrW,WACd,6G,4BCxVZ6W,KAAMC,eACND,KAAME,WACNF,KAAMG,OACNH,KAAMI,eACNJ,KAAMK,KAskBOC,I,UC9lBT1jB,GAAYC,aAAW,SAACC,GAAD,MAAY,CACvCC,KAAM,CACJid,SAAU,WACVhd,UAAWF,EAAMX,QAAQ,KACzB,YAAa,CACX4F,aAAc,MACdD,WAAY,SAEd,UAAW,CACTE,OAAQ,aAKC,SAASue,GAAT,GAAoH,IAA3F1zB,EAA0F,EAA1FA,KAAMC,EAAoF,EAApFA,YAAa6T,EAAuE,EAAvEA,MAAO0C,EAAgE,EAAhEA,OAAgE,IAAxDmd,YAAwD,MAAjD,IAAiD,EAA5C5f,EAA4C,EAA5CA,WAA4C,IAAhCrE,kBAAgC,SAAThB,EAAS,wFAC1H+G,EAAU1F,KAGV6F,EAFUvD,YAAe,CAAEC,KAAM,WAC/BoD,OACa1V,GAErB,OACE,sBAAKqM,UAAWoJ,EAAQvF,KAAxB,UACE,eAAC8F,GAAA,EAAD,WACGjC,EAECrE,GACE,sBAAME,MAAO,CAAClE,MAAM,OAApB,kBAIN,cAAC,KAAD,aACEkL,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5C+H,MAAOA,EACP8f,YAAajd,IACbf,QAASA,EACTY,OAAQA,EAERmd,KAAMA,EACNxc,aAAYlX,EACZgL,WAAW,GACPyD,KAGC,OAALkH,QAAK,IAALA,OAAA,EAAAA,EAAOxB,UACL,qBAAKxE,MAAO,CAAElE,MAAO,MAAO0J,SAAU,YAAtC,gBACKQ,QADL,IACKA,OADL,EACKA,EAAOxB,aC7BPE,WAZf,YAAmF,IAA9DrU,EAA6D,EAA7DA,YAA6D,IAAhDuW,cAAgD,MAAvC,iBAAuC,EAAT9H,GAAS,EAArBmlB,QAAqB,mDAEhF,OACE,cAACH,GAAD,aACE9c,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5CyK,OAAQA,EACRW,aAAYlX,GACRyO,MAdI,CACZolB,QAAS,CACPnhB,MAAO,0GACPyB,QAAS,0B,iCCGPrE,GAAYC,aAAW,SAACC,GAAD,MAAY,CACvCC,KAAM,CACJid,SAAU,WACVhd,UAAWF,EAAMX,QAAQ,KAEzB,YAAa,CACX4F,aAAc,OAEhB,UAAW,CACTC,OAAQ,aA2CCb,WAtCf,YAAmJ,IAA5HR,EAA2H,EAA3HA,MAAO9T,EAAoH,EAApHA,KAAoH,KAA9GiU,MAA8G,EAAvGvE,mBAAuG,aAAnFC,sBAAmF,SAA3D1P,EAA2D,EAA3DA,YAAa8zB,EAA8C,EAA9CA,UAAW1e,EAAmC,EAAnCA,WAA2B3G,GAAQ,EAAvBqF,WAAuB,2HAE1I9D,EAAQ0F,eACRF,EAAU1F,KAER2F,EADQrD,YAAe,CAAEC,KAAM,WAC/BoD,OACFE,EAAQC,eAAIH,EAAQ1V,GAE1B,OACE,sBAAKqM,UAAWoJ,EAAQvF,KAAMN,MAAO,CAAEO,UAAWF,EAAMX,QAAQ,IAAhE,UACE,eAAC0G,GAAA,EAAD,WACGlC,EAECpE,GACE,sBAAME,MAAO,CAAClE,MAAM,OAApB,mBAIFiE,IAAmBD,EACA,sBAAME,MAAO,CAAClE,MAAM,OAApB,mBACD,QAGtB,cAACsoB,GAAA,EAAD,yBAAQ/oB,WAAW,EAAMkM,aAAYlX,EAAa2P,MAAO,CAAEuF,OAAQ,OAAQD,aAAc,MAAO4B,OAAQ,EAAG7B,WAAY,SAAWW,QAASA,GAAWlH,GAAtJ,aACGqlB,EAAU7iB,KAAI,SAACsK,EAAKpK,GAAN,OAAY,cAAC6iB,GAAA,EAAD,CAAgCthB,MAAO6I,EAAK7I,MAAOmB,MAAO0H,EAAK1H,MAA/D,SAAuE0H,EAAK1H,OAA5E,UAAkB9T,EAAlB,YAA0BoR,EAA1B,YAE7B,cAAC8iB,GAAA,EAAD,CAAgBtkB,MAAO,CAACwR,YAAa,SAArC,SAAgD/L,KAEzC,OAALO,QAAK,IAALA,OAAA,EAAAA,EAAOxB,UACL,qBAAKxE,MAAO,CAAElE,MAAO,MAAO0J,SAAU,YAAtC,gBACGQ,QADH,IACGA,OADH,EACGA,EAAOxB,gBCnDdH,GAAQ,CACZ6f,QAAS,CACPnhB,MAAO,uEACPyB,QAAS,kBAMb,SAAS+f,GAAsBC,GAC7B,IAAIC,EAAS,eAAOpgB,IAIpB,OAHGmgB,GACDtsB,OAAOuM,OAAOggB,EAAWD,GAEpBC,EAGM,uBAAM3lB,EAAN,2BAAkB,cAAC,GAAD,aAAOkI,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAAqBkI,MAAOkgB,GAAoB,OAACzlB,QAAD,IAACA,OAAD,EAACA,EAAO4lB,WAAe5lB,KCL5I4F,WAVf,YAAuD,IAApC0C,EAAmC,EAAnCA,YAAalF,EAAsB,EAAtBA,IAAK6T,EAAiB,EAAjBA,IAAQjX,EAAS,2CAKpD,OAHEA,EAAMiE,QAAc,OAALjE,QAAK,IAALA,OAAA,EAAAA,EAAOiE,MAAM1D,QAAS0W,IACtCjX,EAAMiE,MAAQjE,EAAMiE,MAAM4hB,UAAU,EAAG5O,IAGtC,cAAC,GAAD,aAAO1O,WAAY,CAAC2B,KAAM,SAAU+M,IAAKA,EAAK7T,IAAKA,EAAKkF,YAAaA,IAAkBtI,OCmB5E8lB,OA3Bf,YAA4F,IAAD,IAAhEC,sBAAgE,MAA/C,IAA+C,EAAxCC,EAAwC,EAAxCA,KAAMz0B,EAAkC,EAAlCA,YAAyByO,GAAS,EAArBmlB,QAAqB,oEAC/DplB,IAAMvF,SAAS,GADgD,mBAClFyJ,EADkF,KAC3EJ,EAD2E,OAEvD9D,IAAMvF,UAAS,GAFwC,mBAElFyrB,EAFkF,KAEvEC,EAFuE,KAWzF,OACE,cAAC,GAAD,aACEC,QAViB,SAAAzE,GACnB7d,EAAS6d,EAAM7jB,OAAOoG,MAAMmiB,OAAO7lB,SAUjCkI,aAAYlX,EACZ80B,WAAS,EACTL,KAAMA,GAAQ,GACdrf,WAAU,UAAK1C,EAAM7J,WAAWksB,QAAQ,wBAAyB,KAAvD,uBAA0EP,EAAe3rB,WAAWksB,QAAQ,wBAAyB,KAArI,eACVrgB,aAAa,GACbsgB,QAZgB,WACOL,EAAzBjiB,EAAQ8hB,IAYN7e,MAAO+e,EACP1d,WAAY,CAAEie,UAAWT,IACrB/lB,KC0IKymB,OApJf,WACE,IAAM9d,EAAWC,cACXC,EAAUC,YAAQ,CACtBlF,KAAM,WAHU,EAKYpJ,oBAAS,GALrB,mBAKXwO,EALW,KAKFC,EALE,KAMVF,EAAiBF,EAAjBE,aAGFG,EAAQ,uCAAG,WAAOvQ,GAAP,6BAAAwQ,EAAA,6DAEbyS,EAOEjjB,EAPFijB,MACA8K,EAME/tB,EANF+tB,WACAC,EAKEhuB,EALFguB,YACAC,EAIEjuB,EAJFiuB,kBACAC,EAGEluB,EAHFkuB,aACAC,EAEEnuB,EAFFmuB,QACAL,EACE9tB,EADF8tB,SAGIM,EACJ,iBAAUJ,EAAV,oCACuBC,EADvB,+BAEkBC,EAFlB,0BAGaJ,GAfA,SAkBbxd,GAAW,GAlBE,SAmBPG,IAAU4d,KAAV,iBAAiC,CACrCpL,QACA8K,aACAI,UACAC,SAvBW,OAyBbpe,EACE3N,aAAK,CACH0K,QAAS,8BACTiE,SAAU,aA5BD,gDAkCbhB,EACE3N,aAAK,CACH0K,QAAS,KAAIA,QACbiE,SAAU,aArCD,yBAyCbV,GAAW,GAzCE,4EAAH,sDA+Cd,OACE,cAAC,IAAD,2BAAkBJ,GAAlB,aACE,cAAC,EAAD,UACE,sBAAKvX,KAAK,eAAeqM,UAAU,kBAAnC,UAEE,qBAAKA,UAAU,aAAf,SACE,qBAAKA,UAAU,UAAf,SACE,sBAAKA,UAAU,qBAAf,UACE,qBAAKA,UAAU,mBAAf,SACE,qBAAKG,IAAI,iBAAiBO,IAAI,qBAEhC,sBAAKV,UAAU,6BAAf,UACE,oBAAIA,UAAU,sBAAd,sBACA,qBAAIA,UAAU,OAAd,UACI,oBAAIA,UAAU,KAAd,4IACA,qBAAIA,UAAU,KAAd,8BAAqC,IAArC,IAA0C,2EAA1C,kBAAgH,IAAhH,IAAqH,mBAAGC,KAAK,qDAAR,iBAArH,gDACA,oBAAID,UAAU,KAAd,6FAMZ,qBAAKA,UAAU,eAAf,SACE,sBAAKA,UAAU,mBAAf,UACE,oBAAIA,UAAU,sBAAd,gDACA,eAAC,EAAD,CAAcqM,aAAa,EAA3B,UACE,cAAC,EAAD,UACE,cAACC,EAAD,UACE,cAAC,GAAD,CAAO3Y,KAAK,QAAQ+T,WAAW,QAAQrE,YAAY,QAGvD,eAAC,EAAD,WACE,cAACiJ,EAAD,UACE,cAAC,GAAD,CACE3Y,KAAK,aACL+T,WAAW,+BAGf,cAAC4E,EAAD,UACE,cAAC,GAAD,CACE3Y,KAAK,cACL+T,WAAW,eACXiD,YAAY,sBAIlB,eAAC,EAAD,WACE,cAAC2B,EAAD,UACE,cAAC,GAAD,CACE3Y,KAAK,oBACL+T,WAAW,qBACXiD,YAAY,yBAGhB,cAAC2B,EAAD,UACE,cAACgd,GAAD,CACE31B,KAAK,eACL8T,MAAM,gBACNigB,UAAW,CAAC,CAAEphB,MAAO,UAAWmB,MAAO,mBAI7C,cAAC,EAAD,UACE,cAAC6E,EAAD,UACE,cAAC,GAAD,CACE3Y,KAAK,UACL+T,WAAW,UACXrE,YAAY,QAIlB,cAAC,EAAD,UACE,cAACiJ,EAAD,UACE,cAAC,GAAD,CACE3Y,KAAK,WACL+T,WAAW,uBACXiD,YAAY,wBACZ4e,UAAU,iBAMlB,cAAC,KAAD,CAAS51B,KAAK,SAAS8T,MAAM,SAASrI,QAASgM,EAAaG,GArFxD,SAAC9L,GAAD,OAAOuH,QAAQwiB,IAAI/pB,MAqFyD4L,QAASA,kBC5IxFoe,OAZf,WAGE,OACE,cAAC,EAAD,UACE,qBAAK91B,KAAK,eAAeqM,UAAU,UAAnC,SACE,qBAAKA,UAAU,gBAAf,2B,0CCAF0D,GAAYC,aAAW,SAACC,GAAD,MAAY,CACvCzB,KAAM,CACJgL,QAAS,OACTC,cAAe,SACf3C,OAAQ,OACRmE,MAAO,eAET8a,YAAa,CACX5lB,UAAWF,EAAMX,QAAQ,GACzB0mB,SAAU,KAEZC,iBAAkB,CAChB9lB,UAAWF,EAAMX,QAAQ,QAId,SAAS4mB,GAAT,GAAyD,IAAhChpB,EAA+B,EAA/BA,MAAOipB,EAAwB,EAAxBA,YAAa9nB,EAAW,EAAXA,SAAW,GACrD0B,KACQtB,IAAMvF,UAAS,IAF8B,mBAE9DQ,EAF8D,KAExDC,EAFwD,KAQ/DO,EAAc,WAClBP,GAAQ,IAGV,OACE,eAAC,IAAMyF,SAAP,WACE,cAAC,KAAD,CAAQ0E,MAAOqiB,EAAapf,QAAQ,OAAOtL,QAVvB,WACtB9B,GAAQ,MAUN,eAACkB,EAAA,EAAD,CACEI,WAAS,EACTvB,KAAMA,EACNoB,QAASZ,EACTa,kBAAgB,yBAJlB,UAME,cAACI,EAAA,EAAD,CAAaC,GAAG,yBAAhB,SAAyC,oBAAIiB,UAAU,sBAAd,SAAqCa,MAC9E,cAAC7B,EAAA,EAAD,UACGgD,IAEH,cAAC9C,EAAA,EAAD,UACE,cAAC,KAAD,CAAQuI,MAAM,QAAQrI,QAASvB,EAAa0F,MAAO,CAACmL,QAAS,kB,yBCjCxDqb,OAdf,YAA2D,IAAvCn2B,EAAsC,EAAtCA,YAAaD,EAAyB,EAAzBA,KAAM2S,EAAmB,EAAnBA,MAAUjE,EAAS,8CAGxD,OAFkB3E,aAAY,SAACC,GAAD,OAAWA,EAAMwE,QACnBgP,UAGxB,cAAC,KAAD,IAEE,2CAAGrG,aAAYlX,GAAeD,EAAM4P,MAAO,CAAEqG,WAAY,aAAkBvH,GAA3E,aACGiE,MCEI0jB,GAXO,SAAC,GAAuC,IAArCr2B,EAAoC,EAApCA,KAAM2S,EAA8B,EAA9BA,MAA8B,IAAvB1S,mBAAuB,MAAT,GAAS,EAC3D,OACE,sBAAKoM,UAAU,YAAf,UACE,qBAAKA,UAAU,mBAAf,SAAmCrM,IACnC,qBAAKqM,UAAU,kBAAf,SACE,cAAC,GAAD,CAAUrM,KAAMA,EAAM2S,MAAOA,EAAO1S,YAAaA,UCA1C,SAASq2B,GAAT,GAAwC,IAAT/a,EAAQ,EAARA,KACtC9J,EAAY1H,aAAY,SAACC,GAAD,OAAWA,EAAMwE,QAEzC4c,EAAY,CAChBh3B,IAAOC,WACPD,IAAOE,UACPF,IAAO6G,YACP7G,IAAOI,UACPJ,IAAOU,eACPV,IAAOS,aACPT,IAAOW,iBACPX,IAAOY,mBACPZ,IAAOa,mBACPb,IAAOe,WACPf,IAAOQ,gBACPR,IAAOK,WACPL,IAAOO,kBACPP,IAAOmD,gBACPnD,IAAOwC,IACPxC,IAAOsD,SACPtD,IAAOgC,qBACPhC,IAAOiC,iBACPjC,IAAOkC,iBACPlC,IAAOmC,uBACPnC,IAAOoC,iBACPpC,IAAOqC,cACPrC,IAAOgH,WACPhH,IAAO+G,gBACP/G,IAAO+B,qBACP/B,IAAOqB,yBACPrB,IAAO4B,eACP5B,IAAOuI,yBAGXwN,qBAAU,WACR6H,IAAQ8L,iBAAiBsN,EAAW7P,KACpC,IAEF,IAAM1F,EAAM,SAACzO,GAAD,uBAAcqK,EAAUkP,OAAOvZ,UAA/B,aAAc,EAA4BuL,OAWhD+Y,EAAa,SAACtkB,GAAc,IAAD,QAM7B,MAAO,CAAE2iB,OALG,UAAGtY,EAAUkP,OAAOvZ,UAApB,aAAG,EAA4BmjB,QAAQ5X,MAKlC+U,KAJP,UAAGjW,EAAUkP,OAAOvZ,UAApB,aAAG,EAA4BojB,OAAO7X,MAIzBmV,OAHX,UAAGrW,EAAUkP,OAAOvZ,UAApB,aAAG,EAA4BqkB,SAAS9Y,MAGrBqX,IAFtB,UAAGvY,EAAUkP,OAAOvZ,UAApB,aAAG,EAA4BqjB,IAAI9X,QAS9C,OACE,qCACE,cAAC,GAAD,CACE3S,KAAK,OACL2S,MAAOkD,EAAIzhB,IAAOC,YAAY,IAAIwhB,EAAIzhB,IAAOE,aAE/C,cAAC,GAAD,CACE0L,KAAM0H,YAAStT,IAAO6G,aAAagsB,SACnCtU,MA9BS,SAACvL,GACd,IAAMmvB,EAAc9kB,EAAUkP,OAAOvZ,GACjC2hB,EAAS,GACb,IAAK,IAAM3X,KAAKmlB,EACZxN,GAAUwN,EAAYnlB,GAAG6Y,UAAUtX,MAAM,IAAI4jB,EAAYnlB,GAAG8Y,SAASvX,MAAM,KAE/E,OAAOoW,EAwBIyN,CAASpiC,IAAO6G,eAEzB,cAAC,GAAD,CACE+E,KAAK,WACL2S,MAAOkD,EAAIzhB,IAAOI,aAEpB,cAAC,GAAD,CACEwL,KAAK,kBACL2S,QACiC,IAA7BkD,EAAIzhB,IAAOS,cAAyB,SAAW,MAChB,IAA/BghB,EAAIzhB,IAAOU,gBAA2B,WAAa,MAClB,IAAjC+gB,EAAIzhB,IAAOW,kBAA6B,yBAA2B,MAChC,IAAnC8gB,EAAIzhB,IAAOY,oBAA+B,6BAA+B,MACtC,IAAnC6gB,EAAIzhB,IAAOa,oBAA+B,iDAAmD,MAClE,IAA3B4gB,EAAIzhB,IAAOe,YAAuB,qBAAuB,MAG/D,cAAC,GAAD,CACE6K,KAAK,eACL2S,OACIkD,EAAIzhB,IAAOQ,iBAAmBihB,EAAIzhB,IAAOQ,iBAAiB,cAAgB,KAC1EihB,EAAIzhB,IAAOK,YAAcohB,EAAIzhB,IAAOK,YAAY,YAAc,MAGpE,cAAC,GAAD,CACEuL,KAAK,oBACL2S,MACE,cAAC,GAAD,CACE8W,WAAW,EACXP,QAASwC,EAAWt3B,IAAOO,uBAIjC,cAAC,GAAD,CACEqL,KAAK,kBACL2S,MACE,cAAC,GAAD,CACE8W,WAAW,EACXP,QAASwC,EAAWt3B,IAAOmD,qBAIjC,cAAC,GAAD,CACEyI,KAAK,yBACL2S,MAAOkD,EAAIzhB,IAAOwC,KAAO,YAAc,KAEzC,cAAC,GAAD,CACEoJ,KAAK,iCACL2S,MAC2B,WAAzBkD,EAAIzhB,IAAOsD,UAAyB,MACX,cAAzBme,EAAIzhB,IAAOsD,UAA4B,KACvC,sBAGJ,cAAC,GAAD,CACEsI,KAAK,4BACL2S,QACyC,IAArCkD,EAAIzhB,IAAOgC,sBAAiC,qCAAuC,MAClD,IAAjCyf,EAAIzhB,IAAOiC,kBAA6B,UAAY,MACnB,IAAjCwf,EAAIzhB,IAAOkC,kBAA6B,8BAAgC,MACjC,IAAvCuf,EAAIzhB,IAAOmC,wBAAmC,wCAA0C,MACvD,IAAjCsf,EAAIzhB,IAAOoC,kBAA6B,UAAY,MACtB,IAA9Bqf,EAAIzhB,IAAOqC,eAA0B,sBAAwB,MAGnE,cAAC,GAAD,CACEuJ,KAAK,oCACL2S,MAAO,cAAC,GAAD,CAAa2U,SAAS,SAAStL,KAAMnG,EAAIzhB,IAAO+G,qBAEzD,cAAC,GAAD,CACE6E,KAAK,cACL2S,MAAO,cAAC,GAAD,CAAa2W,MAAM,EAAMtN,KAnFlB,SAAC5U,GAAc,IAAD,IAClC,iBAAOqK,EAAUkP,OAAOvZ,UAAxB,iBAAO,EAA4BqvB,kBAAnC,aAAO,EAAwC9jB,MAkFH+jB,CAActiC,IAAOgH,gBAE7D,cAAC,GAAD,CACE4E,KAAK,+CACL2S,MAAOkD,EAAIzhB,IAAO+B,wBAEpB,cAAC,GAAD,CACE6J,KAAK,+BACL2S,MAAOkD,EAAIzhB,IAAOuI,2BAEpB,cAAC,GAAD,CACEqD,KAAK,+HACL2S,OAC6C,IAAzCkD,EAAIzhB,IAAOqB,2BAA+E,SAAzCogB,EAAIzhB,IAAOqB,0BAAyC,OAC5D,IAAzCogB,EAAIzhB,IAAOqB,2BAAgF,UAAzCogB,EAAIzhB,IAAOqB,0BAA0C,KAAO,KAGpH,cAAC,GAAD,CACEuK,KAAK,kBACL2S,MAAOkD,EAAIzhB,IAAO4B,qB,eCvJb2gC,GAAiB9H,cAVP,SAAA5e,GAAK,MAAK,CAC/BC,KAAM,CACJ,YAAa,CACXxE,MAAO,0BAGXkrB,QAAS,MAImB/H,CAA2BgI,MA6C1CviB,WA3Cf,YAAyH,EAApGtU,KAAoG,EAA9FC,YAA+F,IAAlF6T,EAAiF,EAAjFA,MAAiF,IAA1E0B,gBAA0E,aAAxD9F,kBAAwD,aAApCC,sBAAoC,SAATjB,EAAS,yFAE/ED,IAAMvF,UAAS,GAFgE,mBAEhH4tB,EAFgH,KAElGC,EAFkG,KAevH,OAZA5sB,qBAAU,WACR,IAAI6sB,EAAMtoB,EAAMiE,MAEJ,UAARqkB,GAA2B,OAARA,IACrBA,GAAM,GAEI,SAARA,IACFA,GAAM,GAERD,EAAgBC,KACf,CAACtoB,EAAMiE,QAGR,sBAAKtG,UAAU,mBAAf,WAEKyH,GAASpE,GAAgB,sBAAMrD,UAAU,WAAhB,gBAGzByH,GAAUpE,IAAcC,EAA2D,KAAzC,sBAAMtD,UAAU,WAAhB,gBAE7C,cAACsqB,GAAD,CACE9hB,SAAU,SAAC/I,GAAD,OAAO4C,EAAMmG,SAAS/I,EAAES,OAAOqqB,UACzCA,QAASE,EACThiB,OAAQpG,EAAMoG,OACdmiB,SAAUvoB,EAAMqG,IAChBS,SAAUA,EACV1B,MAAOA,IAEPA,GACA,uBAAMzH,UAAU,0BAAhB,UACGyH,EACCpE,GAAgB,sBAAMrD,UAAU,WAAhB,iBACfqD,GAAcC,EAAkB,sBAAMtD,UAAU,WAAhB,gBAAyC,cC7CvE,SAAS6qB,GAAT,GAAsC,IAAT3b,EAAQ,EAARA,KAEpC9J,EAAY1H,aAAY,SAACC,GAAD,OAAWA,EAAMwE,QAEzC4c,EAAY,CAChBh3B,IAAOC,WACPD,IAAOE,UACPF,IAAO6G,YACP7G,IAAOG,gBACPH,IAAOI,UACPJ,IAAOyD,gBACPzD,IAAOQ,gBACPR,IAAOK,WACPL,IAAOO,kBACPP,IAAOmD,gBACPnD,IAAOwC,IACPxC,IAAOkD,kBACPlD,IAAOsB,yBACPtB,IAAOuG,0BACPvG,IAAO0F,qBACP1F,IAAO2F,kCACP3F,IAAO4F,6BACP5F,IAAO6F,+BACP7F,IAAO8F,+BACP9F,IAAO+F,mCACP/F,IAAO+C,uBAGTgT,qBAAU,WACR6H,IAAQ8L,iBAAiBsN,EAAW7P,KACpC,IAEF,IAAM1F,EAAM,SAACzO,GAAD,uBAAcqK,EAAUkP,OAAOvZ,UAA/B,aAAc,EAA4BuL,OAEhD+Y,EAAa,SAACtkB,GAAc,IAAD,QAM/B,MAAO,CAAE2iB,OALG,UAAGtY,EAAUkP,OAAOvZ,UAApB,aAAG,EAA4BmjB,QAAQ5X,MAKlC+U,KAJP,UAAGjW,EAAUkP,OAAOvZ,UAApB,aAAG,EAA4BojB,OAAO7X,MAIzBmV,OAHX,UAAGrW,EAAUkP,OAAOvZ,UAApB,aAAG,EAA4BqkB,SAAS9Y,MAGrBqX,IAFtB,UAAGvY,EAAUkP,OAAOvZ,UAApB,aAAG,EAA4BqjB,IAAI9X,QAc9C,OACE,qCACE,cAAC,GAAD,CACE3S,KAAK,OACL2S,MAAOkD,EAAIzhB,IAAOC,YAAY,IAAIwhB,EAAIzhB,IAAOE,aAE/C,cAAC,GAAD,CACE0L,KAAM0H,YAAStT,IAAO6G,aAAagsB,SACnCtU,MAjBW,SAACvL,GAChB,IAAMmvB,EAAc9kB,EAAUkP,OAAOvZ,GACjC2hB,EAAS,GACb,IAAK,IAAM3X,KAAKmlB,EACZxN,GAAUwN,EAAYnlB,GAAG6Y,UAAUtX,MAAM,IAAI4jB,EAAYnlB,GAAG8Y,SAASvX,MAAM,KAE/E,OAAOoW,EAWIyN,CAASpiC,IAAO6G,eAEzB,cAAC,GAAD,CACE+E,KAAK,WACL2S,MAAOkD,EAAIzhB,IAAOI,aAEpB,cAAC,GAAD,CACEwL,KAAK,eACL2S,OACIkD,EAAIzhB,IAAOQ,iBAAmBihB,EAAIzhB,IAAOQ,iBAAiB,cAAgB,KAC1EihB,EAAIzhB,IAAOK,YAAcohB,EAAIzhB,IAAOK,YAAY,YAAc,MAGpE,cAAC,GAAD,CACEuL,KAAK,oBACL2S,MACE,cAAC,GAAD,CACE8W,WAAW,EACXP,QAASwC,EAAWt3B,IAAOO,uBAIjC,cAAC,GAAD,CACEqL,KAAK,kBACL2S,MACE,cAAC,GAAD,CACE8W,WAAW,EACXP,QAASwC,EAAWt3B,IAAOmD,qBAIjC,cAAC,GAAD,CACEyI,KAAK,yBACL2S,MAAOkD,EAAIzhB,IAAOwC,KAAO,YAAc,KAGzC,cAAC,GAAD,CACEoJ,KAAI,8DAAyDub,GAC7D5I,MAC8C,SAA1CkD,EAAIzhB,IAAOuG,6BAAmF,IAA1Ckb,EAAIzhB,IAAOuG,2BAAwC,MAC7D,UAA1Ckb,EAAIzhB,IAAOuG,6BAAoF,IAA1Ckb,EAAIzhB,IAAOuG,2BAAyC,KAAO,KAGtH,cAAC,GAAD,CACEqF,KAAK,gBACL2S,MAAOkD,EAAIzhB,IAAO0F,wBAEpB,cAAC,GAAD,CACEkG,KAAI,qCAAgCub,GACpC5I,MACoD,OAAlDkD,EAAIzhB,IAAO2F,mCAA8C,gBACzD8b,EAAIzhB,IAAO2F,qCAGf,cAAC,GAAD,CACEiG,KAAI,mCAA8Bub,GAClC5I,MAC+C,OAA7CkD,EAAIzhB,IAAO4F,8BAAyC,gBACpD6b,EAAIzhB,IAAO4F,gCAGf,cAAC,GAAD,CACEgG,KAAI,qCAAgCub,EAAO,GAC3C5I,MACiD,OAA/CkD,EAAIzhB,IAAO6F,gCAA2C,gBACtD4b,EAAIzhB,IAAO6F,kCAGf,cAAC,GAAD,CACE+F,KAAI,qCAAgCub,EAAO,GAC3C5I,MACiD,OAA/CkD,EAAIzhB,IAAO8F,gCAA2C,gBACtD2b,EAAIzhB,IAAO8F,kCAGf,cAAC,GAAD,CACE8F,KAAI,qCAAgCub,EAAO,GAC3C5I,MACqD,OAAnDkD,EAAIzhB,IAAO+F,oCAA+C,gBAC1D0b,EAAIzhB,IAAO+F,sCAGf,qBAAKyV,MAAO,CAACkH,OAAQ,aAArB,SACE,cAAC,GAAD,CACErC,eAAe,EACfzU,KAAM5L,IAAO+C,sBACbwb,MAAOkD,EAAIzhB,IAAO+C,uBAClBqe,UAAQ,EACR1B,MAAM,+EAGV,qBAAKlE,MAAO,CAACkH,OAAQ,aAAczK,UAAU,YAC7C,qBAAKuD,MAAO,CAACkH,OAAQ,gBAAiBqgB,cAAe,YAAa/hB,SAAU,OAAQ1J,MAAO,UAAW0rB,cAAe,OAArH,SACE,oDAEF,qBAAI/qB,UAAU,OAAd,UACE,oBAAIA,UAAU,KAAd,8NAKA,oBAAIA,UAAU,KAAd,0JAKF,qBAAKuD,MAAO,CAACyd,WAAY,QAAzB,SACE,cAAC,GAAD,CACE5Y,eAAe,EACfzU,KAAM5L,IAAOkD,kBACbqb,MAAOkD,EAAIzhB,IAAOkD,mBAClBke,UAAQ,EACR1B,MAAM,8FAGV,qBAAKlE,MAAO,CAACkH,OAAQ,aAAczK,UAAU,eC/KpC,SAASgrB,GAAT,GAAuC,IAAT9b,EAAQ,EAARA,KAErC9J,EAAY1H,aAAY,SAACC,GAAD,OAAWA,EAAMwE,QAEzC4c,EAAY,CAChBh3B,IAAOC,WACPD,IAAOE,UACPF,IAAO6G,YACP7G,IAAOI,UACPJ,IAAOyD,gBACPzD,IAAOQ,gBACPR,IAAOK,WACPL,IAAOO,kBACPP,IAAOmD,gBACPnD,IAAOwC,IACPxC,IAAOsD,SACPtD,IAAOgH,WACPhH,IAAO4B,eACP5B,IAAOyD,gBACPzD,IAAOkD,kBACPlD,IAAOqD,mBACPrD,IAAO6D,eACP7D,IAAOwD,eACPxD,IAAOuD,iBACPvD,IAAO0C,gBACP1C,IAAOoH,oBACPpH,IAAOqH,eACPrH,IAAOsH,iBACPtH,IAAOuH,iBACPvH,IAAOwH,qBACPxH,IAAOyH,oBACPzH,IAAO0H,eACP1H,IAAO2H,iBACP3H,IAAO4H,iBACP5H,IAAO6H,qBACP7H,IAAO8H,oBACP9H,IAAO+H,mBACP/H,IAAOgI,2BACPhI,IAAOiI,sBACPjI,IAAOkI,gBACPlI,IAAO+C,uBAGXgT,qBAAU,WACR6H,IAAQ8L,iBAAiBsN,EAAW7P,KACpC,IAEF,IAAM1F,EAAM,SAACzO,GAAD,uBAAcqK,EAAUkP,OAAOvZ,UAA/B,aAAc,EAA4BuL,OAEhD+Y,EAAa,SAACtkB,GAAc,IAAD,QAM/B,MAAO,CAAE2iB,OALG,UAAGtY,EAAUkP,OAAOvZ,UAApB,aAAG,EAA4BmjB,QAAQ5X,MAKlC+U,KAJP,UAAGjW,EAAUkP,OAAOvZ,UAApB,aAAG,EAA4BojB,OAAO7X,MAIzBmV,OAHX,UAAGrW,EAAUkP,OAAOvZ,UAApB,aAAG,EAA4BqkB,SAAS9Y,MAGrBqX,IAFtB,UAAGvY,EAAUkP,OAAOvZ,UAApB,aAAG,EAA4BqjB,IAAI9X,QAcxC+jB,EAAgB,SAACtvB,GAAc,IAAD,EAClC,iBAAOqK,EAAUkP,OAAOvZ,UAAxB,aAAO,EAA4BqvB,WAAW9jB,OAG9C,OACE,qCACE,cAAC,GAAD,CACE3S,KAAK,OACL2S,MAAOkD,EAAIzhB,IAAOC,YAAY,IAAIwhB,EAAIzhB,IAAOE,aAE/C,cAAC,GAAD,CACE0L,KAAM0H,YAAStT,IAAO6G,aAAagsB,SACnCtU,MArBS,SAACvL,GAChB,IAAMmvB,EAAc9kB,EAAUkP,OAAOvZ,GACjC2hB,EAAS,GACb,IAAK,IAAM3X,KAAKmlB,EACZxN,GAAUwN,EAAYnlB,GAAG6Y,UAAUtX,MAAM,IAAI4jB,EAAYnlB,GAAG8Y,SAASvX,MAAM,KAE/E,OAAOoW,EAeMyN,CAASpiC,IAAO6G,eAEzB,cAAC,GAAD,CACE+E,KAAK,WACL2S,MAAOkD,EAAIzhB,IAAOI,aAEpB,cAAC,GAAD,CACEwL,KAAK,eACL2S,OACIkD,EAAIzhB,IAAOQ,iBAAmBihB,EAAIzhB,IAAOQ,iBAAiB,cAAgB,KAC1EihB,EAAIzhB,IAAOK,YAAcohB,EAAIzhB,IAAOK,YAAY,YAAc,MAGpE,cAAC,GAAD,CACEuL,KAAK,oBACL2S,MACE,cAAC,GAAD,CACE8W,WAAW,EACXP,QAASwC,EAAWt3B,IAAOO,uBAIjC,cAAC,GAAD,CACEqL,KAAK,kBACL2S,MACE,cAAC,GAAD,CACE8W,WAAW,EACXP,QAASwC,EAAWt3B,IAAOmD,qBAIjC,cAAC,GAAD,CACEyI,KAAK,kBACL2S,MAAO,cAAC,GAAD,CAAa+W,WAAW,EAAMN,QAAS3X,EAAUkP,OAAOvsB,IAAOyD,qBAExE,cAAC,GAAD,CACEmI,KAAK,yBACL2S,MAAOkD,EAAIzhB,IAAOwC,KAAO,YAAc,KAEzC,cAAC,GAAD,CACEoJ,KAAK,qBACL2S,MAAO,cAAC,GAAD,CAAa2U,SAAS,UAAUtL,KAAMnG,EAAIzhB,IAAOqD,wBAE1D,cAAC,GAAD,CACEuI,KAAK,iBACL2S,MAAO,cAAC,GAAD,CAAa2U,SAAS,QAAQtL,KAAMnG,EAAIzhB,IAAO6D,oBAGvD,cAAC,GAAD,CACC+H,KAAK,sDACL2S,MACoC,SAAhCkD,EAAIzhB,IAAO0C,mBAA+D,IAAhC+e,EAAIzhB,IAAO0C,iBAA8B,MACnD,UAAhC+e,EAAIzhB,IAAO0C,mBAAgE,IAAhC+e,EAAIzhB,IAAO0C,iBAA+B,KAAO,KAGlG,cAAC,GAAD,CACEkJ,KAAK,cACL2S,MAAO,cAAC,GAAD,CAAa2W,MAAM,EAAMtN,KAAM0a,EAActiC,IAAOgH,gBAE7D,cAAC,GAAD,CACE4E,KAAK,kBACL2S,MAAOkD,EAAIzhB,IAAO4B,kBAEpB,cAAC,GAAD,CACEgK,KAAK,6BACL2S,MAAO,cAAC,GAAD,CAAa4W,WAAW,EAAMvN,KAAM0a,EAActiC,IAAOwD,oBAElE,cAAC,GAAD,CACEoI,KAAI,sCAAiCub,GACrC5I,MAAO,cAAC,GAAD,CAAa2U,SAAS,UAAUtL,KAAMnG,EAAIzhB,IAAOuD,sBAE1D,cAAC,GAAD,CACEqI,KAAK,kDACL2S,MACwC,SAApCkD,EAAIzhB,IAAO8H,uBAAuE,IAApC2Z,EAAIzhB,IAAO8H,qBAAkC,MACvD,UAApC2Z,EAAIzhB,IAAO8H,uBAAwE,IAApC2Z,EAAIzhB,IAAO8H,qBAAmC,KAAO,KAG1G,cAAC,GAAD,CACE8D,KAAK,gCACL2S,OACwC,SAAnCkD,EAAIzhB,IAAO+H,sBAAqE,IAAnC0Z,EAAIzhB,IAAO+H,oBAAiC,yFAA2F,KAC9I,SAAtC0Z,EAAIzhB,IAAOiI,yBAA2E,IAAtCwZ,EAAIzhB,IAAOiI,uBAAoC,uBAAyB,KAC7E,SAA3CwZ,EAAIzhB,IAAOgI,8BAAqF,IAA3CyZ,EAAIzhB,IAAOgI,4BAAyC,qDAAuD,MAGvK,cAAC,GAAD,CACE4D,KAAI,2BAAsBub,EAAK,EAA3B,KACJ5I,MACwC,SAApCkD,EAAIzhB,IAAOoH,uBAAuE,IAApCqa,EAAIzhB,IAAOoH,qBAAkC,MACvD,UAApCqa,EAAIzhB,IAAOoH,uBAAwE,IAApCqa,EAAIzhB,IAAOoH,qBAAmC,KAAO,KAG1G,cAAC,GAAD,CACEwE,KAAK,0FACL2S,MACoC,SAAhCkD,EAAIzhB,IAAOkI,mBAA+D,IAAhCuZ,EAAIzhB,IAAOkI,iBAA8B,MACnD,UAAhCuZ,EAAIzhB,IAAOkI,mBAAgE,IAAhCuZ,EAAIzhB,IAAOkI,iBAA+B,KAAO,KAGlG,cAAC,GAAD,CACE0D,KAAI,yBAAoBub,EAAK,EAAzB,KACJ5I,MACmC,SAA/BkD,EAAIzhB,IAAOqH,kBAA6D,IAA/Boa,EAAIzhB,IAAOqH,gBAA6B,MAClD,UAA/Boa,EAAIzhB,IAAOqH,kBAA8D,IAA/Boa,EAAIzhB,IAAOqH,gBAA8B,KAAO,KAGhG,cAAC,GAAD,CACEuE,KAAI,2BAAsBub,EAAtB,KACJ5I,MACqC,SAAjCkD,EAAIzhB,IAAOsH,oBAAiE,IAAjCma,EAAIzhB,IAAOsH,kBAA+B,MACpD,UAAjCma,EAAIzhB,IAAOsH,oBAAkE,IAAjCma,EAAIzhB,IAAOsH,kBAAgC,KAAO,KAGpG,cAAC,GAAD,CACEsE,KAAI,2BAAsBub,EAAtB,KACJ5I,MACqC,SAAjCkD,EAAIzhB,IAAOuH,oBAAiE,IAAjCka,EAAIzhB,IAAOuH,kBAA+B,MACpD,UAAjCka,EAAIzhB,IAAOuH,oBAAkE,IAAjCka,EAAIzhB,IAAOuH,kBAAgC,KAAO,KAGpG,cAAC,GAAD,CACEqE,KAAI,2BAAsBub,EAAtB,KACJ5I,MACyC,SAArCkD,EAAIzhB,IAAOwH,wBAAyE,IAArCia,EAAIzhB,IAAOwH,sBAAmC,MACxD,UAArCia,EAAIzhB,IAAOwH,wBAA0E,IAArCia,EAAIzhB,IAAOwH,sBAAoC,KAAO,KAG5G,cAAC,GAAD,CACEoE,KAAI,yBAAoBub,EAApB,KACJ5I,MACmC,SAA/BkD,EAAIzhB,IAAO0H,kBAA6D,IAA/B+Z,EAAIzhB,IAAO0H,gBAA6B,MAClD,UAA/B+Z,EAAIzhB,IAAO0H,kBAA8D,IAA/B+Z,EAAIzhB,IAAO0H,gBAA8B,KAAO,KAGhG,cAAC,GAAD,CACEkE,KAAI,2BAAsBub,EAAK,EAA3B,KACJ5I,MACqC,SAAjCkD,EAAIzhB,IAAO2H,oBAAiE,IAAjC8Z,EAAIzhB,IAAO2H,kBAA+B,MACpD,UAAjC8Z,EAAIzhB,IAAO2H,oBAAkE,IAAjC8Z,EAAIzhB,IAAO2H,kBAAgC,KAAO,KAGpG,cAAC,GAAD,CACEiE,KAAI,2BAAsBub,EAAK,EAA3B,KACJ5I,MACqC,SAAjCkD,EAAIzhB,IAAO4H,oBAAiE,IAAjC6Z,EAAIzhB,IAAO4H,kBAA+B,MACpD,UAAjC6Z,EAAIzhB,IAAO4H,oBAAkE,IAAjC6Z,EAAIzhB,IAAO4H,kBAAgC,KAAO,KAGpG,cAAC,GAAD,CACEgE,KAAI,2BAAsBub,EAAK,EAA3B,KACJ5I,MACyC,SAArCkD,EAAIzhB,IAAO6H,wBAAyE,IAArC4Z,EAAIzhB,IAAO6H,sBAAmC,MACxD,UAArC4Z,EAAIzhB,IAAO6H,wBAA0E,IAArC4Z,EAAIzhB,IAAO6H,sBAAoC,KAAO,KAG5G,qBAAK2T,MAAO,CAACkH,OAAQ,aAArB,SACE,cAAC,GAAD,CACErC,eAAe,EACfzU,KAAM5L,IAAO+C,sBACbqe,UAAQ,EACR1B,MAAM,+EAGV,qBAAKlE,MAAO,CAACkH,OAAQ,aAAczK,UAAU,YAC7C,qBAAKuD,MAAO,CAACkH,OAAQ,gBAAiBqgB,cAAe,YAAa/hB,SAAU,OAAQ1J,MAAO,UAAW0rB,cAAe,OAArH,SACE,oDAEF,qBAAI/qB,UAAU,OAAd,UACE,oBAAIA,UAAU,KAAd,8NAKA,oBAAIA,UAAU,KAAd,0JAKF,qBAAKuD,MAAO,CAACyd,WAAY,QAAzB,SACE,cAAC,GAAD,CACE5Y,eAAe,EACfzU,KAAK,mBACL2S,MAAOkD,EAAIzhB,IAAOkD,mBAClBke,UAAQ,EACR1B,MAAM,8FAGV,qBAAKlE,MAAO,CAACkH,OAAQ,aAAczK,UAAU,eCxQnD,IAAM0D,GAAYC,aAAW,SAACC,GAAD,MAAY,CACvCC,KAAM,CACJ+K,MAAO,QAETqc,QAAS,CACPtJ,WAAY,YACZuJ,UAAW,SACXrc,WAAY,OACZ9F,SAAU,OACVoiB,WAAY,OACZ9rB,MAAO,UACPyrB,cAAe,YACfM,QAAS,OAEXne,QAAS,CACPme,QAAS,IACTN,cAAe,OACfjc,WAAY,SACZ9F,SAAU,QAEZsiB,QAAS,CACP3c,QAAS,eAKb,SAAS4c,GAAT,GAA8C,IAArBre,EAAoB,EAApBA,QACjB7D,GADqC,2BAC3B1F,MAD2B,EAEX7G,oBAAS,GAFE,mBAEpCmb,EAFoC,KAE1BC,EAF0B,KAI3C,OACE,qBAAKjY,UAAWoJ,EAAQvF,KAAMN,MAAO,CAACqL,MAAO,QAA7C,SACE,qBAAKrL,MAAO,CAAEmjB,cAAe,QAA7B,SACE,eAACpO,GAAA,EAAD,CAAWC,QAAM,EAAC/P,SAAU,kBAAMyP,GAAaD,IAAYzU,MAAO,CAAEsF,aAAcmP,EAAW,cAAgB,OAA7G,UACE,cAACQ,GAAA,EAAD,CACEC,WAAYT,EAAW,cAAC,KAAD,CAAYzU,MAAO,CAAClE,MAAO,WAAc,cAAC,KAAD,CAASkE,MAAO,CAAClE,MAAO,WACxFqZ,gBAAc,kBACd3Z,GAAG,iBACHwE,MAAO,CAACqF,WAAY,wBAA0BC,aAAcmP,EAAW,cAAgB,OAJzF,SAME,sBACEzU,MAAO,GADT,UAEG0J,EAAQuI,QAFX,IAEoB,uBAAMxV,UAAWoJ,EAAQ6D,QAAzB,+BAA0CA,EAAQse,MAAMjN,MAAxD,cAAmErR,EAAQse,MAAMC,IAAMve,EAAQse,MAAMC,IAAM,mBAGjI,eAAC5S,GAAA,EAAD,CAAkBrV,MAAO,CAACsV,UAAW,QAArC,UACE,sBAAK7Y,UAAWoJ,EAAQiiB,QAAxB,UACE,qBAAKrrB,UAAWoJ,EAAQ6hB,QAAxB,qCACA,qBAAKjrB,UAAWoJ,EAAQ6D,QAAxB,SAAmCA,EAAQuI,aAE7C,sBAAKxV,UAAWoJ,EAAQiiB,QAAxB,UACE,qBAAKrrB,UAAWoJ,EAAQ6hB,QAAxB,4BACA,qBAAKjrB,UAAWoJ,EAAQ6D,QAAxB,mBAAsCA,EAAQse,MAAMjN,MAApD,cAA+DrR,EAAQse,MAAMC,UAE/E,sBAAKxrB,UAAWoJ,EAAQiiB,QAAxB,UACE,qBAAKrrB,UAAWoJ,EAAQ6hB,QAAxB,2BACA,qBAAKjrB,UAAWoJ,EAAQ6D,QAAxB,SAAmCA,EAAQwe,YAE7C,sBAAKzrB,UAAWoJ,EAAQiiB,QAAxB,UACE,qBAAKrrB,UAAWoJ,EAAQ6hB,QAAxB,4BACA,qBAAKjrB,UAAWoJ,EAAQ6D,QAAxB,SAAmCA,EAAQye,uB,SAc1CC,G,iFAAf,WAA8BC,GAA9B,6BAAApgB,EAAA,mEACSogB,EAAMxB,kBADf,aACS,EAAkB9jB,MAD3B,qDAIQ,UAAAslB,EAAMxB,kBAAN,eAAkB9jB,SAAUlR,IAJpC,mDAKew2B,EAAMC,oBALrB,aAKe,EAAoBvlB,OALnC,uBAOuBqU,GAAU,mBAAD,UAAqBiR,EAAM7a,YAA3B,aAAqB,EAAYzK,MAAjC,UAAwCslB,EAAMxB,kBAA9C,aAAwC,EAAkB9jB,OAP1F,YAOU3S,EAPV,iDASeA,GATf,sBAWQi4B,EAAMC,oBAXd,aAWQ,EAAoBvlB,OAX5B,oDAYeslB,EAAMC,oBAZrB,aAYe,EAAoBvlB,OAZnC,iCAcW,IAdX,6C,sBAkBe,mBAAiB,IAAdwlB,EAAa,EAAbA,SAAa,EACWjvB,mBAAS,IADpB,mBACtBkvB,EADsB,KACRC,EADQ,KAyB7B,OAvBAluB,qBAAU,WACR,sBAAC,wDAAA0N,EAAA,sDACOygB,EAAgB,GADvB,OAAAzgB,EAAA,KAEiBsgB,GAFjB,iDAEY/mB,EAFZ,WAGOmnB,EAAMJ,EAAS/mB,GAEH,MADZonB,EAAU,8BAAGD,EAAIE,gBAAP,aAAG,EAAc9lB,aAAjB,QAA0B,GAA1B,gCAAgC4lB,EAAIG,gBAApC,aAAgC,EAAc/lB,aAA9C,QAAuD,IAAKmiB,UAEtE0D,EAAU,aANjB,UAQaD,EAAII,oBARjB,aAQa,EAAkBhmB,OAR/B,kCAQ6CwV,GAAS,UAACoQ,EAAII,oBAAL,aAAC,EAAkBhmB,OARzE,iDAQkF,GARlF,mCASoBqlB,GAAeO,GATnC,yBAUY,CACL5N,MAAM,GAAD,iBAAK4N,EAAIK,iBAAT,aAAK,EAAejmB,MAApB,sBAA6B4lB,EAAIM,iBAAjC,aAA6B,EAAelmB,OACjDklB,IAAKW,GAZZ,MAciB,OAAHD,QAAG,IAAHA,GAAA,UAAAA,EAAKO,qBAAL,eAAoBnmB,OAApB,OAA4B4lB,QAA5B,IAA4BA,GAA5B,UAA4BA,EAAKO,qBAAjC,aAA4B,EAAoBnmB,MAAQ,GAP7DkP,EAPT,CAQKiW,OARL,KASKjW,QATL,KAUK+V,MAVL,KAcKG,QAdL,MAgBGO,EAAcle,KAAKyH,GAhBtB,uBAkBCwW,EAAgBC,GAlBjB,2CAAD,KAoBA,CAACH,IAGDC,EACCW,MAAM,EADP,OACUZ,QADV,IACUA,OADV,EACUA,EAAUlpB,QACnBiC,KAAI,SAACsK,EAAMpK,GAAP,OACH,cAACumB,GAAD,CAAgBre,QAASkC,GAAWpK,OC3H3B,SAAS4nB,GAAT,GAAsC,IAATzd,EAAQ,EAARA,KAEpC9J,EAAY1H,aAAY,SAACC,GAAD,OAAWA,EAAMwE,QAEzC4c,EAAY,CAChBh3B,IAAOC,WACPD,IAAOE,UACPF,IAAOI,UACPJ,IAAO6G,YACP7G,IAAOU,eACPV,IAAOS,aACPT,IAAOW,iBACPX,IAAOY,mBACPZ,IAAOa,mBACPb,IAAOe,WACPf,IAAOyG,eACPzG,IAAOwG,iBACPxG,IAAO0G,kBACP1G,IAAO2G,gBACP3G,IAAOQ,gBACPR,IAAOK,WACPL,IAAOO,kBACPP,IAAOmD,gBACPnD,IAAOyD,gBACPzD,IAAOwC,IACPxC,IAAOqD,mBACPrD,IAAO6D,eACP7D,IAAO8D,uBACP9D,IAAO+D,gBACP/D,IAAOgE,gBACPhE,IAAOsD,SACPtD,IAAOgC,qBACPhC,IAAOiC,iBACPjC,IAAOkC,iBACPlC,IAAOmC,uBACPnC,IAAOoC,iBACPpC,IAAOqC,cACPrC,IAAO0C,gBACP1C,IAAO2C,iBACP3C,IAAO4C,mBACP5C,IAAOgH,WACPhH,IAAO+B,qBACP/B,IAAOwD,eACPxD,IAAOuD,iBACPvD,IAAO+C,sBACP/C,IAAOsG,sBACPtG,IAAOuG,0BACPvG,IAAOoG,cACPpG,IAAOqG,aACPrG,IAAOmH,QACPnH,IAAOkH,aAEPlH,IAAOoE,0BACPpE,IAAOqE,6BACPrE,IAAO4E,4BACP5E,IAAO6E,gCACP7E,IAAO8E,4BACP9E,IAAOsE,2BACPtE,IAAOuE,0BACPvE,IAAOwE,yBACPxE,IAAOyE,2BACPzE,IAAO0E,gCACP1E,IAAO2E,yBAEP3E,IAAOiF,4BACPjF,IAAOkF,2BACPlF,IAAOmF,0BACPnF,IAAOoF,4BACPpF,IAAOqF,iCACPrF,IAAOsF,0BACPtF,IAAO+E,2BACP/E,IAAOgF,8BACPhF,IAAOuF,6BACPvF,IAAOwF,iCACPxF,IAAOyF,8BAGTsQ,qBAAU,WACR6H,IAAQ8L,iBAAiBsN,EAAW7P,KACpC,IAEF,IAoBoB0d,EAAWC,EApBzBrjB,EAAM,SAACzO,GAAD,uBAAcqK,EAAUkP,OAAOvZ,UAA/B,aAAc,EAA4BuL,OAEhD+Y,EAAa,SAACtkB,GAAc,IAAD,QAM/B,MAAO,CAAE2iB,OALG,UAAGtY,EAAUkP,OAAOvZ,UAApB,aAAG,EAA4BmjB,QAAQ5X,MAKlC+U,KAJP,UAAGjW,EAAUkP,OAAOvZ,UAApB,aAAG,EAA4BojB,OAAO7X,MAIzBmV,OAHX,UAAGrW,EAAUkP,OAAOvZ,UAApB,aAAG,EAA4BqkB,SAAS9Y,MAGrBqX,IAFtB,UAAGvY,EAAUkP,OAAOvZ,UAApB,aAAG,EAA4BqjB,IAAI9X,QAkBxC+jB,EAAgB,SAACtvB,GAAc,IAAD,EAClC,iBAAOqK,EAAUkP,OAAOvZ,UAAxB,aAAO,EAA4BqvB,WAAW9jB,OAG1CwmB,EAAY,CAChBn5B,KAAM6V,EAAIzhB,IAAOoE,2BACjBuxB,OAAQlU,EAAIzhB,IAAOqE,8BACnBoyB,OAAQhV,EAAIzhB,IAAO4E,6BACnB8xB,WAAYjV,EAAIzhB,IAAO6E,iCACvB8xB,OAAQlV,EAAIzhB,IAAO8E,6BACnB8Q,MAAO6L,EAAIzhB,IAAOsE,4BAClBgvB,KAAM7R,EAAIzhB,IAAOuE,2BACjBqxB,IAAKnU,EAAIzhB,IAAOwE,0BAChB8xB,MAAO7U,EAAIzhB,IAAOyE,4BAClB8xB,MAAO9U,EAAIzhB,IAAO0E,iCAClB8xB,MAAO/U,EAAIzhB,IAAO2E,2BAGdqgC,EAAY,CAChBp5B,KAAM6V,EAAIzhB,IAAO+E,4BACjB4wB,OAAQlU,EAAIzhB,IAAOgF,+BACnByxB,OAAQhV,EAAIzhB,IAAOuF,8BACnBmxB,WAAYjV,EAAIzhB,IAAOwF,kCACvBmxB,OAAQlV,EAAIzhB,IAAOyF,8BACnBmQ,MAAO6L,EAAIzhB,IAAOiF,6BAClBquB,KAAM7R,EAAIzhB,IAAOkF,4BACjB0wB,IAAKnU,EAAIzhB,IAAOmF,2BAChBmxB,MAAO7U,EAAIzhB,IAAOoF,6BAClBmxB,MAAO9U,EAAIzhB,IAAOqF,kCAClBmxB,MAAO/U,EAAIzhB,IAAOsF,4BAGpB,OACE,qCACE,cAAC,GAAD,CACEsG,KAAK,OACL2S,MAAOkD,EAAIzhB,IAAOC,YAAY,IAAIwhB,EAAIzhB,IAAOE,aAE/C,cAAC,GAAD,CACE0L,KAAM0H,YAAStT,IAAO6G,aAAagsB,SACnCtU,MArDW,SAACvL,GAChB,IAAMmvB,EAAc9kB,EAAUkP,OAAOvZ,GACjC2hB,EAAS,GACb,IAAK,IAAM3X,KAAKmlB,EACZxN,GAAUwN,EAAYnlB,GAAG6Y,UAAUtX,MAAM,IAAI4jB,EAAYnlB,GAAG8Y,SAASvX,MAAM,KAE/E,OAAOoW,EA+CIyN,CAASpiC,IAAO6G,eAEzB,cAAC,GAAD,CACE+E,KAAK,WACL2S,MAAOkD,EAAIzhB,IAAOI,aAEpB,cAAC,GAAD,CACEwL,KAAK,kBACL2S,QACiC,IAA7BkD,EAAIzhB,IAAOS,cAAyB,SAAW,MAChB,IAA/BghB,EAAIzhB,IAAOU,gBAA2B,WAAa,MAClB,IAAjC+gB,EAAIzhB,IAAOW,kBAA6B,yBAA2B,MAChC,IAAnC8gB,EAAIzhB,IAAOY,oBAA+B,6BAA+B,MACtC,IAAnC6gB,EAAIzhB,IAAOa,oBAA+B,iDAAmD,MAC9D,IAA/B4gB,EAAIzhB,IAAOc,eAA2B,qBAAuB,MAGnE,cAAC,GAAD,CACE8K,KAAK,WACL2S,QACoC,IAA/BkD,EAAIzhB,IAAOyG,iBAA2D,SAA/Bgb,EAAIzhB,IAAOyG,gBAA+B,eAAiB,MACjE,IAAjCgb,EAAIzhB,IAAOwG,mBAA+D,SAAjCib,EAAIzhB,IAAOwG,kBAAiC,iBAAmB,MACtE,IAAlCib,EAAIzhB,IAAO0G,oBAAiE,SAAlC+a,EAAIzhB,IAAO0G,mBAAkC,oBAAsB,MAC7E,IAAhC+a,EAAIzhB,IAAO2G,kBAA6D,SAAhC8a,EAAIzhB,IAAO2G,iBAAgC,UAAY,MAGtG,cAAC,GAAD,CACEiF,KAAK,eACL2S,OACIkD,EAAIzhB,IAAOQ,iBAAmBihB,EAAIzhB,IAAOQ,iBAAiB,cAAgB,KAC1EihB,EAAIzhB,IAAOK,YAAcohB,EAAIzhB,IAAOK,YAAY,YAAc,MAGpE,cAAC,GAAD,CACEuL,KAAK,oBACL2S,MACE,cAAC,GAAD,CACE8W,WAAW,EACXP,QAASwC,EAAWt3B,IAAOO,uBAIjC,cAAC,GAAD,CACEqL,KAAK,kBACL2S,MACE,cAAC,GAAD,CACE8W,WAAW,EACXP,QAASwC,EAAWt3B,IAAOmD,qBAIjC,cAAC,GAAD,CACEyI,KAAK,kBACL2S,MAAO,cAAC,GAAD,CAAa+W,WAAW,EAAMN,QAAS3X,EAAUkP,OAAOvsB,IAAOyD,qBAExE,cAAC,GAAD,CACEmI,KAAK,yBACL2S,MAAOkD,EAAIzhB,IAAOwC,KAAO,YAAc,KAEzC,cAAC,GAAD,CACEoJ,KAAK,qBACL2S,MAAO,cAAC,GAAD,CAAa2U,SAAS,UAAUtL,KAAMnG,EAAIzhB,IAAOqD,wBAE1D,cAAC,GAAD,CACEuI,KAAK,iBACL2S,MAAO,cAAC,GAAD,CAAa2U,SAAS,QAAQtL,KAAMnG,EAAIzhB,IAAO6D,oBAEvD,cAAC,GAAD,CACC+H,KAAK,yBACL2S,MAAO,cAAC,GAAD,CAAa2U,SAAS,QAAQtL,KAAMnG,EAAIzhB,IAAO8D,4BAEvD,cAAC,GAAD,CACC8H,KAAK,mDACL2S,MAAO,cAAC,GAAD,CAAa6W,WAAW,EAAML,SArHvB8P,EAqH2C7kC,IAAO+D,gBArHvC+gC,EAqHwD9kC,IAAOgE,gBApHrF,CAAEyxB,QAAShU,EAAIojB,GAAYnP,QAASjU,EAAIqjB,SAsH7C,cAAC,GAAD,CACEl5B,KAAK,iCACL2S,MAC2B,WAAzBkD,EAAIzhB,IAAOsD,UAAyB,MACX,cAAzBme,EAAIzhB,IAAOsD,UAA4B,KACvC,sBAGJ,cAAC,GAAD,CACEsI,KAAK,4BACL2S,QACyC,IAArCkD,EAAIzhB,IAAOgC,sBAAiC,qCAAuC,MAClD,IAAjCyf,EAAIzhB,IAAOiC,kBAA6B,UAAY,MACnB,IAAjCwf,EAAIzhB,IAAOkC,kBAA6B,8BAAgC,MACjC,IAAvCuf,EAAIzhB,IAAOmC,wBAAmC,wCAA0C,MACvD,IAAjCsf,EAAIzhB,IAAOoC,kBAA6B,UAAY,MACtB,IAA9Bqf,EAAIzhB,IAAOqC,eAA0B,sBAAwB,MAIlE,cAAC,GAAD,CACCuJ,KAAK,sDACL2S,MACoC,SAAhCkD,EAAIzhB,IAAO0C,mBAA+D,IAAhC+e,EAAIzhB,IAAO0C,iBAA8B,MACnD,UAAhC+e,EAAIzhB,IAAO0C,mBAAgE,IAAhC+e,EAAIzhB,IAAO0C,iBAA+B,KAAO,KAGjG,cAAC,GAAD,CACCkJ,KAAK,iEACL2S,MACqC,SAAjCkD,EAAIzhB,IAAO2C,oBAAiE,IAAjC8e,EAAIzhB,IAAO2C,kBAA+B,MACpD,UAAjC8e,EAAIzhB,IAAO2C,oBAAkE,IAAjC8e,EAAIzhB,IAAO2C,kBAAgC,KAAO,KAGnG,cAAC,GAAD,CACCiJ,KAAK,uEACL2S,MACuC,SAAnCkD,EAAIzhB,IAAO4C,sBAAqE,IAAnC6e,EAAIzhB,IAAO4C,oBAAiC,MACtD,UAAnC6e,EAAIzhB,IAAO4C,sBAAsE,IAAnC6e,EAAIzhB,IAAO4C,oBAAkC,KAAO,KAGxG,cAAC,GAAD,CACEgJ,KAAK,cACL2S,MAAO,cAAC,GAAD,CAAa2W,MAAM,EAAMtN,KAAM0a,EAActiC,IAAOgH,gBAE7D,cAAC,GAAD,CACE4E,KAAK,+CACL2S,MAAOkD,EAAIzhB,IAAO+B,wBAEpB,cAAC,GAAD,CACE6J,KAAK,6BACL2S,MAAO,cAAC,GAAD,CAAa4W,WAAW,EAAMvN,KAAM0a,EAActiC,IAAOwD,oBAElE,cAAC,GAAD,CACEoI,KAAI,sCAAiCub,GACrC5I,MAAO,cAAC,GAAD,CAAa2U,SAAS,UAAUtL,KAAMnG,EAAIzhB,IAAOuD,sBAE1D,qBAAKiY,MAAO,CAACkH,OAAQ,aAArB,SACE,cAAC,GAAD,CACErC,eAAe,EACfzU,KAAM5L,IAAO+C,sBACbqe,UAAQ,EACR1B,MAAM,+EAGV,qBAAKlE,MAAO,CAACkH,OAAQ,oBAAqBzK,UAAU,YACpD,cAAC,GAAD,CACErM,KAAI,oHAA+Gub,GACnH5I,MAC0C,SAAtCkD,EAAIzhB,IAAOsG,yBAA2E,IAAtCmb,EAAIzhB,IAAOsG,uBAAoC,MACzD,UAAtCmb,EAAIzhB,IAAOsG,yBAA4E,IAAtCmb,EAAIzhB,IAAOsG,uBAAqC,KAAO,KAG9G,cAAC,GAAD,CACEsF,KAAI,8DAAyDub,GAC7D5I,MAC8C,SAA1CkD,EAAIzhB,IAAOuG,6BAAmF,IAA1Ckb,EAAIzhB,IAAOuG,2BAAwC,MAC7D,UAA1Ckb,EAAIzhB,IAAOuG,6BAAoF,IAA1Ckb,EAAIzhB,IAAOuG,2BAAyC,KAAO,KAGtH,cAAC,GAAD,CACEqF,KAAK,+BACL2S,MAAOkD,EAAIzhB,IAAOoG,iBAEpB,cAAC,GAAD,CACEwF,KAAK,0BACL2S,MAAOkD,EAAIzhB,IAAOqG,gBAEpB,cAAC,GAAD,CACEuF,KAAK,UACL2S,MACE,cAAC+V,GAAD,CAAaL,QAAS5W,EAAUkP,OAAOvsB,IAAOmH,aAGlD,sBAAKqU,MAAO,CAACkH,OAAQ,uBAArB,UACE,mBAAGlH,MAAO,CAACwF,SAAU,OAAQqiB,QAAS,MAAOL,cAAe,OAA5D,6BACA,qBAAKxnB,MAAO,CAACO,UAAW,QAAxB,SACE,cAAC,GAAD,CAAgBgoB,SAAU1mB,EAAUkP,OAAOvsB,IAAOkH,qBAGtD,qBAAKsU,MAAO,CAACkH,OAAQ,oBAAqBzK,UAAU,YACpD,cAAC,GAAD,CACErM,KAAK,0BAEP,cAAC,GAAD,CACEA,KAAK,kBACL2S,MACE,qCACE,cAAC,GAAD,CAAagX,YAAY,EAAMN,SAAU8P,IACzC,cAAC,GAAD,CAAaxP,YAAY,EAAMN,SAAU+P,Y,sBC7NtCC,G,WA5GX,WAAYhyB,GAAO,qBACfC,KAAKE,MAAQH,E,4CAOjB,WACI,OAAQC,KAAKE,Q,mBAMjB,WACI,OAAOF,KAAKE,Q,gBAOhB,WACI,OAAkB,MAAdF,KAAKE,OAEgB,GAArBF,KAAKE,MAAMyH,OADJ,KAGJ3H,KAAKE,MAAM,GAAG4V,O,iBAQzB,SAAIxV,GACA,GAAmB,MAAfA,EACA,OAAO,KACX,IAAKN,KAAKE,MACN,OAAO,KAJE,qBAMMF,KAAKE,OANX,IAMb,2BAA8B,CAAC,IAAD,EAArB8xB,EAAqB,QAC1B,IAAI,UAAAA,EAAOvyB,mBAAP,eAAoBwyB,kBAApB,OAAsC3xB,QAAtC,IAAsCA,OAAtC,EAAsCA,EAAa2xB,eACnD,OAAOD,GARF,8BAYb,OAAO,O,yBAQX,SAAY1xB,EAAa4xB,GAAc,IAAD,EAClC,GAAmB,MAAf5xB,EACA,OAAO,KACX,IAAKN,KAAKE,MACN,OAAO,KAEXI,EAAcA,EAAY2xB,cAC1BC,EAAY,UAAGA,SAAH,aAAG,EAAcD,cAPK,qBASfjyB,KAAKE,OATU,IASlC,2BAA8B,CAAC,IAAD,IAArB8xB,EAAqB,QAC1B,IAAI,UAAAA,EAAOvyB,mBAAP,eAAoBwyB,iBAAkB3xB,IAAe,UAAA0xB,EAAOG,oBAAP,eAAqBF,iBAAkBC,EAC5F,OAAOF,GAXmB,8BAclC,OAAO,O,oBASX,SAAO1xB,GACH,OAAmB,MAAfA,GAEc,MAAdN,KAAKE,MADE,GAIJF,KAAKE,MAAMuK,QAAO,SAAAunB,GAAM,OAAIA,EAAOvyB,YAAYwyB,gBAAkB3xB,EAAY2xB,mB,iCAGxF,WAAsB,IAAD,EACjB,OAAmB,OAAfjyB,KAAKE,MACE,GAEE,UAAGF,KAAKE,aAAR,aAAG,EAAYuK,QAAO,SAAA8F,GAAC,MAAsC,cAAlCA,EAAE6hB,QAAU,IAAI7xB,mB,wBAI5D,SAAW8xB,GAAc,IAAD,EAEpB,OAAmB,OAAfryB,KAAKE,MACE,GAEH,UAAGF,KAAKE,aAAR,aAAG,EAAYuK,QAAO,SAAA8F,GAAC,OAAG8hB,EAAazmB,SAAS2E,EAAE9Q,oB,KCFnDG,G,WAnGX,WAAYG,GAAM,qBACdC,KAAKE,MAAQH,E,sCAMjB,WACI,OAAOC,KAAKtH,O,gBAGhB,WACI,OAAOsH,KAAKE,MAAMC,O,iBAGtB,WAEI,OAAOH,KAAKE,MAAMR,Q,gBAGtB,WACI,OAAOM,KAAKE,MAAMoyB,O,uBAGtB,WACI,OAAOtyB,KAAKE,MAAM0S,c,iBAGtB,WACI,OAAO5S,KAAKE,MAAMqyB,Q,2BAGtB,WACI,OAAOvyB,KAAKE,MAAMsyB,kB,sBAGtB,WACI,MAA+B,YAAxBxyB,KAAKyyB,kB,sBAMhB,WACI,MAA+B,YAAxBzyB,KAAKyyB,kB,8BAOhB,WACI,MAAqB,eAAdzyB,KAAK0yB,Q,0BAMhB,WACI,MAAqB,WAAd1yB,KAAK0yB,Q,yBAMhB,WACI,OAAQ1yB,KAAKE,MAAMyyB,YAEf,IAAK,YACD,OAAO3yB,KAAKE,MAAM0yB,cACtB,IAAK,OACD,OAAkC,EAA3B5yB,KAAKE,MAAM0yB,cACtB,QACI,OAAO,O,yBASnB,SAAYC,GACR,SAAK7yB,KAAKE,QAAUF,KAAKE,MAAM4yB,aAGxB9yB,KAAKE,MAAM4yB,WAAWjY,MAAK,SAAAyD,GAAC,OAAIA,EAAE/d,eAAiBsyB,EAAStyB,mB,gCAQrE,SAAmB7H,GAAO,IAAD,IACvB,iBAAOsH,KAAKE,aAAZ,iBAAO,EAAY6yB,kBAAkBryB,MAAK,SAAAiV,GAAC,OAAIA,EAAExV,OAASzH,YAA1D,aAAO,EAA0Ds6B,U,KCzF1DC,OAPf,YAAyC,IAAD,IAARjB,EAAQ,EAARA,OAG5B,OAAO,8DAAGA,QAAH,IAAGA,OAAH,EAAGA,EAAQkB,sBAAX,eAA6BlB,QAA7B,IAA6BA,OAA7B,EAA6BA,EAAQmB,gBAArC,QAAiD,UCO7CC,OAff,YAAsC,IAAV/nB,EAAS,EAATA,MAAS,EACCzJ,oBAAS,GADV,mBAC5ByxB,EAD4B,KAChBC,EADgB,KAMnC,OAJAzwB,qBAAU,WACRywB,EAAcjoB,KACb,CAACA,IAGF,cAACkkB,GAAA,EAAD,CACED,QAAS+D,EACTnlB,UAAQ,EACR5F,MAAO,CAAEwR,YAAa,MCCbyZ,OANf,YAAkC,IAATvB,EAAQ,EAARA,OAErB,OAAO,cAAC,GAAD,CAAU3mB,MAAO2mB,EAAOmB,YCOpBK,OAZf,YAAkC,IAATxB,EAAQ,EAARA,OAErB,OACI,oCACI,uCAAMA,QAAN,IAAMA,OAAN,EAAMA,EAAQrP,UAAd,WAA0BqP,QAA1B,IAA0BA,OAA1B,EAA0BA,EAAQpP,YAClC,8BAAMoP,EAAO/O,UACb,8BAAM+O,EAAOyB,eC0BVC,OA7Bf,YAAoC,IAAX1B,EAAU,EAAVA,OAAU,EAEKpwB,mBAAS,MAFd,mBAExB+xB,EAFwB,KAEZC,EAFY,KAqB/B,OAjBA/wB,qBAAU,WACN,sBAAC,8BAAA0N,EAAA,yDACQyhB,EAAO7C,YAAc6C,EAAO7C,aAAeh1B,IADnD,gBAEOy5B,EAAc5B,EAAOpB,cAF5B,0BAI2B,WAAfoB,EAAOM,KAJnB,iCAK6B9hB,IAAU0K,WAAW8W,EAAO7C,YALzD,OAKa5U,EALb,OAMOqZ,EAAa,OAACrZ,QAAD,IAACA,OAAD,EAACA,EAASpa,MAN9B,yCASgCqQ,IAAUqjB,cAAc7B,EAAO7C,YAT/D,QASa2E,EATb,OAUOF,EAAa,OAACE,QAAD,IAACA,OAAD,EAACA,EAAY3zB,MAVjC,2CAAD,KAcD,IAGC,mCACKwzB,KCREI,OAff,YAAoC,IAAX/B,EAAU,EAAVA,OAAU,EAEKpwB,mBAAS,MAFd,mBAExBoyB,EAFwB,KAEZC,EAFY,KAa/B,OATApxB,qBAAU,WACDmvB,EAAO1Q,YAEZ,sBAAC,4BAAA/Q,EAAA,sEACsBC,IAAUjC,IAAV,iBAAwByjB,EAAO1Q,aADrD,OACOkP,EADP,OAEGyD,EAAczD,EAAO9wB,OAFxB,0CAAD,KAKD,IACI,mCAAGs0B,KCNCE,OAVf,YAAkC,IAAXlC,EAAU,EAAVA,OAEnB,KAAI,OAACA,QAAD,IAACA,OAAD,EAACA,EAAQmB,UACT,OAAQ,6BAEZ,IAAMgB,EAAY,IAAI5yB,KAAKA,KAAKI,MAAMqwB,EAAOmB,WAC7C,OAAO,mCAAGgB,EAAUC,mBAAmB,YCD5BC,OALf,YAAsC,IAAXrC,EAAU,EAAVA,OAEvB,OAAO,0CAAGA,QAAH,IAAGA,OAAH,EAAGA,EAAQtyB,SCkCP40B,OA5Bf,YAAkC,IAAVtC,EAAS,EAATA,OAEpB,OAAQA,EAAO1zB,YAEX,IAAK,OACD,OAAO,cAAC,GAAD,CAAa0zB,OAAQA,IAChC,IAAK,OACL,IAAK,UACL,IAAK,UACD,OAAO,cAAC,GAAD,CAAuBA,OAAQA,IAC1C,IAAK,UACD,OAAO,cAAC,GAAD,CAAgBA,OAAQA,IACnC,IAAK,UACL,IAAK,UACD,OAAO,cAAC,GAAD,CAAgBA,OAAQA,IACnC,IAAK,aACL,IAAK,UACD,OAAO,cAAC,GAAD,CAAeA,OAAQA,IAClC,IAAK,SACD,OAAO,cAAC,GAAD,CAAeA,OAAQA,IAClC,IAAK,WACD,OAAO,cAAC,GAAD,CAAiBA,OAAQA,IACpC,QACI,OAAO,2CC4EJuC,OA5Ff,YAAsC,IAAD,EAAdtgB,EAAc,EAAdA,KAAMS,EAAQ,EAARA,KAAQ,EAEO9S,mBAAS,IAFhB,mBAE1B4yB,EAF0B,KAEZC,EAFY,KAG3BC,EAAS,UAAGF,EAAaE,iBAAhB,aAAG,EAAwB9qB,KAAI,SAAAjJ,GAAC,OAAI,IAAIf,GAASe,MAC1Dg0B,EAAY,IAAI5C,GAAUyC,EAAaI,SAEvC1e,EAAYye,EAAUze,UAsB5B,SAAS2e,EAAoBlV,GAAU,IAAD,IAClC,OAAIA,EAAShnB,YACFgnB,EAAShnB,YAEpB,oBAAO0H,YAAgBsf,EAASjnB,aAAhC,aAAO,EAAgCgH,aAAvC,QAAgDigB,EAASjnB,KAiC7D,OAzDAmK,qBAAU,WACN,sBAAC,kCAAA0N,EAAA,sEAC2BC,IAAUjC,IAAV,6BAAoCmG,EAApC,YAA4CT,IADvE,cACSygB,EADT,OAES5Q,EAAY4Q,EAAU9qB,KAAI,SAAAjJ,GAAC,OAAIA,EAAER,QACjCJ,EAAO,CACT,aAAgB+jB,EAChB,KAAQ7P,EACR,WAAa,GANpB,SAQyBzD,IAAUjC,IAAI,UAAWxO,GARlD,OAQS60B,EART,OASGH,EAAgB,CAACC,YAAWE,YAT/B,0CAAD,KAYD,IA4CC1e,EACO,cAAC4e,GAAA,EAAD,IAGP,8BACKJ,EAAUjqB,QAAO,SAAA9J,GAAC,OA7B3B,SAAiBgf,GACb,IACMjnB,EAAOinB,EAASjnB,KAAK6H,cAC3B,MAAa,gBAAT7H,MAEAA,EAAKsf,WAAW,aAJG,CAAC,sBAAuB,oBAAqB,aAAc,wBAAyB,sBAAuB,2BAA4B,4BAM3IpM,SAASlT,MAExBA,EAAKkT,SAAS,kBAEd+T,EAASoV,YAAY,aAErBpV,EAASoV,YAAY,kBAErBpV,EAASoV,YAAY,YAEH,eAAlBpV,EAASrO,OAYe0jB,CAAQr0B,MAAIiJ,KAAI,SAAC+V,EAAUzW,GAAX,OACpC,cAAC,EAAD,CACItD,MAAOivB,EAAoBlV,GAC3BvO,YAAclI,EAAQ,IAAOwrB,EAAU/sB,OAF3C,SAIKgtB,EAAUM,OAAOtV,EAASjnB,MAAMkR,KAAI,SAAAooB,GAAM,OAEvC,cAAC,EAAD,UACI,cAAC3gB,EAAD,CAAWtI,GAAI,GAAf,SACI,qBAAKhE,UAAU,eAAf,SACI,cAAC,GAAD,CAAeitB,OAAQA,qBCpFrDvpB,GAAYC,aAAW,SAACC,GAAD,MAAY,CACvCC,KAAM,GAENonB,QAAS,GAEThe,QAAS,GAEToe,QAAS,OAKX,SAAS8E,GAAT,GAAmD,IAAvBljB,EAAsB,EAAtBA,QACpB7D,GAD0C,EAAboB,IAAa,EAAR0E,KACxBxL,MADgC,EAE7BtB,IAAMvF,UAAS,GAA3Bmb,EAFyC,oBAIhD,OACE,qBAAKhY,UAAU,SAAf,SACE,eAACsY,GAAA,EAAD,WACE,cAACE,GAAA,EAAD,CACEC,WAAYT,EAAW,cAAC,KAAD,IAAiB,cAAC,KAAD,IACxCU,gBAAc,kBACd3Z,GAAG,iBACHiB,UAAU,qBAJZ,SAME,oBAAIA,UAAU,sBAAd,SACGiN,EAAQtZ,SAGb,eAACilB,GAAA,EAAD,CAAkB5Y,UAAU,4BAA5B,UACE,+BACE,6BAAI,6DACJ,6BAAKiN,EAAQtZ,UAEf,+BACE,6BAAI,qDACJ,6BAAKsZ,EAAQmjB,eAGf,qBAAKpwB,UAAWoJ,EAAQiiB,QAAxB,SACCpe,EAAQ6C,WACP,sBAAKvM,MAAO,CAAClE,MAAO,WAApB,UACE,cAAC,KAAD,CAAiBkE,MAAO,CAACwR,YAAa,OAAQhM,SAAS,YACvD,mDAKJ,qBAAK/I,UAAWoJ,EAAQiiB,QAAxB,SACE,cAAC,GAAD,CAAQxqB,MAAK,UAAKoM,EAAQtZ,KAAb,YAAqBsZ,EAAQiC,KAA7B,YAAqCjC,EAAQiC,KAAO,GAAK4a,YAAY,OAAlF,SAEE7c,EAAQ0C,OAASmX,KAAMC,eACrB,cAACkD,GAAD,CAAoB/a,KAAMjC,EAAQiC,OAEpCjC,EAAQ0C,OAASmX,KAAMI,eACrB,cAAC2D,GAAD,CAAkB3b,KAAMjC,EAAQiC,OAElCjC,EAAQ0C,OAASmX,KAAMG,OACrB,cAAC+D,GAAD,CAAmB9b,KAAMjC,EAAQiC,OAEnCjC,EAAQ0C,OAASmX,KAAME,WACrB,cAAC2F,GAAD,CAAkBzd,KAAMjC,EAAQiC,OAEhC,cAACmhB,GAAD,CAAwBnhB,KAAMjC,EAAQiC,KAAMS,KAAM1C,EAAQ0C,mBAW3D,mBAAyB,IAAtB2gB,EAAqB,EAArBA,iBAChB,OACE,qBAAKtwB,UAAU,sBAAf,SACGswB,EAAiBzrB,KAAI,SAACsK,EAAMpK,GAAP,OACpB,sBAAK/E,UAAU,mDAAf,UACE,oBAAIA,UAAU,sBAAd,SAAqCmP,EAAKD,OACxCC,EAAKohB,aAAc1rB,KAAI,SAACuQ,EAAKob,GAAN,OACvB,cAACL,GAAD,CAA0BljB,QAASmI,EAAKlG,KAAMC,EAAKD,MAA5BshB,eC/FtBC,GAAU,uCAAG,0CAAAjlB,EAAA,sEACGC,IAAUjC,IAAV,gBADH,OAClB+mB,EADkB,OAGpBrjB,EAAU,GAHU,eAKRqjB,GALQ,4DAMC,UADhBnb,EALe,SAMd9C,aAA6C,OAAnB8C,EAAI9C,YANhB,yEASA7G,IAAUjC,IAAV,mBAA0B4L,EAAI9C,cAT9B,QAShB2C,EATgB,OAUhByb,EAAM,CACV/8B,KAAI,iBAAEshB,QAAF,IAAEA,OAAF,EAAEA,EAAS7Z,YAAX,QAAmBga,EAAI9C,YAC3B3C,KAAMyF,EAAI9C,YACVpD,KAAMkG,EAAIrE,KACVqf,UAAWhb,EAAIub,OAEjBzjB,EAAQa,KAAK2iB,GAhBS,wKAmBjBxjB,GAnBiB,gEAAH,qDCoER0jB,OA/Df,WAAoB,IAAD,EACuB/zB,mBAAS,IADhC,mBACV0zB,EADU,KACIM,EADJ,OAGeh0B,oBAAS,GAHxB,mBAGVsU,EAHU,KAGC7F,EAHD,KAIbwlB,EAAW,GAEfhzB,qBAAU,WACR,sBAAC,4BAAA0N,EAAA,sEACqBilB,KADrB,OACOnqB,EADP,OAECuqB,EAAgBvqB,GAChBgF,GAAW,GAHZ,0CAAD,KAKC,IAEH,IAAMylB,EAAcR,EAAaS,QAAO,SAACN,EAAKO,GAG5C,OAFAP,EAAIO,EAAE/hB,MAAQwhB,EAAIO,EAAE/hB,OAAS,GAC7BwhB,EAAIO,EAAE/hB,MAAMnB,KAAKkjB,GACVP,IACN,IAEH,IAAK,IAAM3rB,KAAKgsB,EAAa,CAC3B,IAAIG,EAAO,CACThiB,KACE6hB,EAAYhsB,GAAG,GAAGmK,KAAKzS,WACvB,KACCs0B,EAAYhsB,GAAG,GAAGmK,KAAO,GAAGzS,WAC/B8zB,aAAc90B,OAAOC,OAAOq1B,EAAYhsB,KAE1C+rB,EAAS/iB,KAAKmjB,GAGhB,OACE,cAAC,EAAD,UACE,sBAAKv9B,KAAK,cAAcqM,UAAU,UAAlC,UAEE,qBAAKA,UAAU,aAAf,SACE,qBAAKA,UAAU,UAAf,SACE,sBAAKA,UAAU,qBAAf,UACE,qBAAKA,UAAU,mBAAf,SACE,cAAC,KAAD,CAAa+I,SAAS,QAAQxF,MAAO,CAAElE,MAAO,UAAWyE,UAAW,aAEtE,sBAAK9D,UAAU,6BAAf,UACE,oBAAIA,UAAU,sBAAd,iCAGA,mBAAGC,KAAK,aAAR,2CAKR,qBAAKD,UAAU,mBAAf,SACE,sBAAKA,UAAU,UAAf,WACImR,GACA,cAACggB,GAAD,CAAkBb,iBAAkBQ,IAErC3f,GAAa,cAAC4e,GAAA,EAAD,e,0CCtDpBzX,GAAa8Y,KAEJ,SAASC,GAAT,GAAwC,IAAjBC,EAAgB,EAAhBA,aAAgB,EACpBlvB,IAAMvF,UAAS,GADK,mBAC7Cmb,EAD6C,KACnCC,EADmC,KAG9C6N,EAAe,SAACyL,GAAD,OAAW,SAACxN,EAAOyN,GACtCvZ,IAAYuZ,GAAaD,KAG3B,OACE,qBAAKvxB,UAAU,eAAf,SACGsxB,EAAazsB,KAAI,SAACsK,EAAMpK,GAAP,OAChB,eAAC,GAAD,CAAW/E,UAAU,UAAUgY,SAAUA,IAAQ,eAAajT,GAAKyD,SAAUsd,EAAa,QAAD,OAAS/gB,IAAlG,UACE,cAACyT,GAAA,EAAD,CAAkBE,gBAAc,mBAAmB3Z,GAAG,kBAAtD,SACE,sBAAKiB,UAAU,kBAAf,UACE,sBAAKA,UAAU,uBAAf,UACGgY,IAAQ,eAAajT,GACpB,cAAC,KAAD,CAAgBgE,SAAS,UACzB,cAAC,KAAD,CAAkBA,SAAS,UAC7B,iCAASoG,EAAKlB,UAEhB,qBAAKjO,UAAU,uBAAf,SAAwCmP,EAAKsiB,KAAMC,OAAO,EAAG,KAC7D,qBAAK1xB,UAAU,wBAAf,SAAwCmP,EAAKtO,aAIjD,eAAC+X,GAAA,EAAD,CAAkB5Y,UAAU,uBAA5B,UAEE,qBAAKA,UAAU,wBAAwBwD,wBAA0B,CAAEC,OAAQ0L,EAAKpH,WAChF,8BAAK,cAAC,KAAD,CAAQN,MAAM,QAAQzH,UAAU,sBAAsBZ,QAAS0mB,EAAa,QAAD,OAAS/gB,mB,yBC2GtF4sB,OAzIf,WA4BE,IA5BmB,IAAD,EACY90B,oBAAS,GADrB,mBACXwO,EADW,KACFC,EADE,OAEczO,mBAAS,IAFvB,mBAEX+0B,EAFW,KAEDC,EAFC,KAqBZC,EAAmB,CACvBC,YAAa,cACbC,OAAQ,UAINC,EAAc,GAClB,MAA6Bx2B,OAAOy2B,QAAQJ,GAA5C,eAA+D,CAAC,IAAD,sBAA5CrqB,GAA4C,WAC7DwqB,EAAW,sBAAOA,GAAP,CAAoB,CAAE3rB,MAAOmB,EAAOA,WA7B/B,MAgC4B5K,mBAAS,CACrDs1B,YAAa,GACbC,gBAAiBN,EAAiBC,YAClCnL,WAAY,IAnCI,mBAgCXyL,EAhCW,KAsCZC,GAtCY,KAsCL1yB,SAASC,eAAe,SAC/B0yB,EAAc3yB,SAASC,eAAe,oBAvC1B,EA6CgBhD,oBAAS,GA7CzB,mBA6CX21B,EA7CW,KA6CAC,EA7CA,KAqFlB,OAvCA30B,qBAAU,WAER,sBAAC,4BAAA0N,EAAA,+EAEgCC,IAAUjC,IAAI,kBAF9C,OAESkpB,EAFT,OAGGb,EAAY,YACPa,EAAe7tB,KAAI,SAAC8tB,GAAD,MAAW,CAC/B1kB,KAAM0kB,EAAKC,OACX/xB,MAAO8xB,EAAKxJ,QACZsI,KAAMkB,EAAKE,SACX9qB,QAAS4qB,EAAKvJ,WAmBY,IAA1BsJ,EAAe9vB,QACjB6vB,GAAa,GA5BlB,gDA+BGzrB,QAAQuC,MAAR,MA/BH,QAiCC+B,GAAW,GAjCZ,wDAAD,KAmCC,CAAC+mB,IAGF,cAAC,EAAD,UACE,sBAAK1+B,KAAK,eAAeqM,UAAU,WAAnC,UAEE,qBAAKA,UAAU,aAAf,SACE,qBAAKA,UAAU,UAAf,SACE,sBAAKA,UAAU,qBAAf,UACE,qBAAKA,UAAU,mBAAf,SACE,cAAC,KAAD,CAAU+I,SAAS,QAAQxF,MAAO,CAAEO,UAAW,QAASzE,MAAO,eAEjE,qBAAKW,UAAU,6BAAf,SACE,oBAAIA,UAAU,sBAAd,+BAKR,sBAAKA,UAAU,UAAf,UAEGqL,EACC,qBAAK9H,MAAO,CAAEO,UAAW,UAAzB,SACE,cAACgR,GAAA,EAAD,MAEF,MAEC0d,GACD,sBAAKxyB,UAAU,iEAAf,UAEE,qBAAIA,UAAU,8BAA8BjB,GAAG,mBAAmBK,QAxE3D,WACjBkzB,EAAK/xB,UAAUC,OAAO,sBACtB+xB,EAAYhyB,UAAUC,OAAO,WAsEnB,UACE,+BACE,qBAAK+C,MAAO,CAAC,MAAS,UAAWwF,SAAS,QAAQ/I,UAAU,sEAAsE8yB,UAAU,QAAQhZ,QAAQ,YAAYiZ,cAAY,OAAOC,cAAY,mBAAvM,SAA0N,sBAAMjZ,EAAE,uDAFtO,mDAMA,qBAAI/Z,UAAU,gBAAgBjB,GAAG,OAAjC,UACE,oBAAIiB,UAAU,KAAd,sDACA,oBAAIA,UAAU,KAAd,oEACA,oBAAIA,UAAU,KAAd,gHACA,oBAAIA,UAAU,KAAd,oHACA,oBAAIA,UAAU,KAAd,uGACA,oBAAIA,UAAU,KAAd,gEAKN,qBAAKA,UAAU,yBAAf,SACE,cAACqxB,GAAD,CAAaC,aAAcM,e,WCzGxB3pB,WA1Bf,YAA2E,IAApDtU,EAAmD,EAAnDA,KAAM2U,EAA6C,EAA7CA,aAAchC,EAA+B,EAA/BA,MAAOjD,EAAwB,EAAxBA,WAAwB,+DAG7B2C,YAAe,CAAEC,KAAM,YAA1DgtB,EAHgE,EAGhEA,SAAU/sB,EAHsD,EAGtDA,SAAUgtB,EAH4C,EAG5CA,WAoB5B,OAlBAp1B,qBAAU,WACR,IAAIq1B,EAAgB7sB,GAASgC,EAM7B,OALA2qB,EAASt/B,GACNw/B,GACDjtB,EAASvS,EAAKw/B,GAGT,kBAAMD,EAAWv/B,MACxB,CAAC2S,IAIHxI,qBAAU,YACU,IAAfuF,GACD6vB,EAAWv/B,KAEb,CAAC0P,IAEI,QCnBM,SAAS+vB,GAAT,GAAyJ,IAAlIvyB,EAAiI,EAAjIA,MAAOqL,EAA0H,EAA1HA,OAAQmnB,EAAkH,EAAlHA,WAAYC,EAAsG,EAAtGA,YAAaC,EAAyF,EAAzFA,YAAaC,EAA4E,EAA5EA,cAAexxB,EAA6D,EAA7DA,SAAUqJ,EAAmD,EAAnDA,QAASooB,EAA0C,EAA1CA,cAA0C,IAA3BC,sBAA2B,MAAV,OAAU,EAE7JC,EADiBj2B,aAAY,SAACC,GAAD,OAAWA,EAAMwE,QACdgP,UACtC,OACI,sBAAKnR,UAAU,eAAf,UACI,sBAAKA,UAAU,uBAAf,UACI,qBAAIA,UAAU,sBAAd,UAAqCkM,EAArC,IAA8CrL,MAC5CwyB,GAAcC,GACZ,cAAC,KAAD,CAAQ5oB,QAAQ,OAAOjD,MAAOisB,EAAgBhzB,IAAKgzB,EAAgBt0B,QAASk0B,EAAanqB,SAAUwqB,OAG3G,sBAAK3zB,UAAU,wBAAf,UAEKyzB,GAAiBpoB,GACd,cAACyJ,GAAA,EAAD,MAED2e,IAAkBpoB,IAAYrJ,EAEhCqxB,IAAeG,GAAiBD,IAC7B,sBAAKvzB,UAAU,gBAAf,UACKwzB,GACG,cAAC,KAAD,CAAQ7/B,KAAK,sBAAsB8T,MAAM,SAASiD,QAAQ,UAAUtL,QAASo0B,EAAerqB,SAAUwqB,GAAkBtoB,IAE3HkoB,GACG,cAAC,KAAD,CAAQ5/B,KAAK,gBAAgByL,QAASm0B,EAAa9rB,MAAM,OAAO4D,QAASA,EAASlC,SAAUwqB,GAAkBtoB,a,oCCiB3HuoB,OAvCf,YAAiC,IAAX3G,EAAU,EAAVA,OAElB,IAAKA,EAED,OAAQ,cAAC,WAAD,IAGZ,IAAKA,EAAO4G,SAER,OAAuB,IAAnB5G,EAAO6G,QAGH,cAACpmB,GAAA,EAAD,CAAS7M,MAAM,gGAAf,SACI,cAACkzB,GAAA,EAAD,MAGL,KAGX,IAAIC,EAAa,iCAUjB,MAT0B,aAAtB/G,EAAOgH,WACPD,EAAa,qCAAE,cAAC,KAAD,IAAF,+BACc,gBAAtB/G,EAAOgH,WACZD,EAAa,kFACc,aAAtB/G,EAAOgH,aACZD,EAAa,+CAKb,cAACtmB,GAAA,EAAD,CAAS7M,MAAOmzB,EAAhB,SACI,cAAC,KAAD,OC3BGE,OARf,YAA4D,IAApCjH,EAAmC,EAAnCA,OAAQ9jB,EAA2B,EAA3BA,SAAU1B,EAAiB,EAAjBA,MAAUpF,EAAO,6CAEjD8xB,EAAahrB,GAAY8jB,EAAO4G,SAEtC,OACI,cAAC,GAAD,yBAAUlgC,KAAMs5B,EAAOmH,UAAc/xB,GAArC,IAA4C8G,SAAUgrB,EAAY1sB,MAAO,qCAAGA,EAAH,IAAU,cAAC,GAAD,CAAYwlB,OAAQA,W,WCGhG,SAASoH,GAAT,GAAiG,IAAD,EAW3F/V,EAAOgW,EAAMC,EAXS9sB,EAAqE,EAArEA,MAAO9T,EAA8D,EAA9DA,KAA8D,IAAxDwgC,kBAAwD,SAApC7rB,EAAoC,EAApCA,aAAoC,IAAtBjF,kBAAsB,WACxB2C,YAAe,CAAEC,KAAM,WAAlGgtB,EADmG,EACnGA,SAAUC,EADyF,EACzFA,WAAsBsB,GADmE,EAC7EtuB,SAD6E,EACnEsuB,SAASnrB,EAD0D,EAC1DA,OAAQorB,EADkD,EAClDA,SAAUC,EADwC,EACxCA,YAC7DnrB,EAAQC,eAAIH,EAAQ1V,GACpBiQ,EAAQ0F,eAERqrB,EAAcrsB,EAAe,IAAI9L,KAAK8L,GAAgB,KACtDssB,EAAeD,GAAeA,EAAYE,WAAa,GAAGp4B,WAAa,KACvEq4B,EAAW,OAAGH,QAAH,IAAGA,GAAH,UAAGA,EAAah0B,qBAAhB,aAAG,EAA4BlE,WAGzCs4B,GAAe,IAAIv4B,MAAQmE,cAI3Bq0B,GAHS1W,EACKyW,EAAc,EADZT,EACeS,EAAc,IADvBR,GAC6B,EADpB3vB,MAAMqJ,KAAK,CAAErL,QAAS0xB,EAAOhW,GAASiW,EAAO,IAAK,SAACzvB,EAAGC,GAAJ,OAAUuZ,EAASvZ,EAAIwvB,MAGpF1vB,KAAI,SAACqK,GAC3B,MAAO,CACHzH,MAAOyH,EACP5I,MAAO4I,EAAKzS,eAIdw4B,EAAelrB,KAAOmrB,SAASrwB,KAAI,SAACswB,EAAOpwB,GAC7C,MAAO,CACH0C,MAAO0tB,EACP7uB,OAAQvB,EAAI,GAAGtI,eAxBmF,EA4BjFI,mBAAS+3B,GAAgB,IA5BwD,mBA4BpGO,EA5BoG,KA4B7FC,EA5B6F,OA6BnFv4B,mBAASi4B,GAAe,IA7B2D,mBA6BpG5lB,EA7BoG,KA6B9FmmB,EA7B8F,OA8BzEx4B,mBAAS,IA9BgE,mBA8BpGy4B,EA9BoG,KA8BzFC,EA9ByF,KAsE3G,OA5BAz3B,qBAAU,WAGN,OAFAm1B,EAASt/B,EAAM,CAAEmU,SAAUzE,IAEpB,WACH6vB,EAAWv/B,MAEhB,CAACs/B,EAAUC,IAEdp1B,qBAAU,WACN,IAAM03B,EAAeP,EAAanf,MAAK,SAAAnC,GAAC,OAAIA,EAAErN,QAAU6uB,KAClDM,EAAcT,EAAYlf,MAAK,SAAAnC,GAAC,OAAIA,EAAErN,QAAU4I,KAEtD,OAAIsmB,GAAgBC,GAChBF,EAAa,GAAD,OAAIrmB,EAAJ,YAAYimB,SACxBT,EAAY/gC,IAGXwhC,IAAUK,GAAkBtmB,IAASumB,GACtCF,EAAa,SACbd,EAAS9gC,EAAM,CAAE4Y,KAAM,SAAUxE,QAAS,8CAG1C1E,IAAe8xB,GAASjmB,IACxBulB,EAAS9gC,EAAM,CAAE4Y,KAAM,SAAUxE,QAAS,mCAE/C,CAACotB,EAAOjmB,IAIP,sBAAK3L,MAAO,CAAEO,UAAWF,EAAMX,QAAQ,GAAI6d,SAAU,YAArD,UACI,eAACnX,GAAA,EAAD,WACKlC,EAAOpE,GAAc,sBAAME,MAAO,CAAElE,MAAO,OAAtB,sBAE1B,cAAC,GAAD,CAAagE,WAAYA,EAAY1P,KAAMA,EAAM2S,MAAOgvB,IACxD,cAACI,GAAD,CAAQjuB,MAAM,QAAQnB,MAAO6uB,EAAO3sB,SA5CtB,SAAC,GAA2B,IAAflC,EAAc,EAAxBpG,OAAUoG,MAC/B8uB,EAAS9uB,GACTkuB,EAAQ7gC,IA0CyD4V,MAAOA,EAAOJ,SAAUgrB,EAAYhsB,QAAS8sB,EAAc5xB,WAAYA,IACpI,cAACqyB,GAAD,CAAQjuB,MAAM,OAAOnB,MAAO4I,EAAM1G,SAxCrB,SAAC,GAA2B,IAAflC,EAAc,EAAxBpG,OAAUoG,MAC9B+uB,EAAQ/uB,GACRkuB,EAAQ7gC,IAsCsD4V,MAAOA,EAAOJ,SAAUgrB,EAAYhsB,QAAS6sB,EAAa3xB,WAAYA,IAC/HkG,GAAU,qBAAKhG,MAAO,CAAElE,MAAO,MAAO0J,SAAU,YAAtC,SAAqDQ,EAAMxB,aAKlF,SAAS2tB,GAAT,GAAmF,IAAjEjuB,EAAgE,EAAhEA,MAAOnB,EAAyD,EAAzDA,MAAOkC,EAAkD,EAAlDA,SAAUe,EAAwC,EAAxCA,MAAOJ,EAAiC,EAAjCA,SAAUhB,EAAuB,EAAvBA,QAAuB,EAAd9E,WAChE,OACI,eAACsyB,GAAA,EAAD,CAAapyB,MAAO,CAAEomB,SAAU,QAAhC,UACI,cAAChgB,GAAA,EAAD,CAAYisB,QAAQ,EAApB,SAA4BtvB,EAAQ,GAAKmB,IACzC,cAACkgB,GAAA,EAAD,CAAQrhB,MAAOA,EAAOkC,SAAUA,EAAUe,QAASA,EAAOJ,SAAUA,EAChE5F,MAAO,CAAEuF,OAAQ,OAAQD,aAAc,MAAO4B,OAAQ,EAAG7B,WAAY,SADzE,SAGKT,EAAQtD,KAAI,gBAAG4C,EAAH,EAAGA,MAAOnB,EAAV,EAAUA,MAAV,OAAsB,cAACshB,GAAA,EAAD,CAAsBthB,MAAOA,EAA7B,SAAqCmB,GAAtBnB,WClG3D,IAAMuvB,GACH,MADGA,GAED,QAiCGC,OAvBf,YAA0F,IAAD,IAApEC,kBAAoE,MAAvDF,GAAuD,EAAnC5I,EAAmC,EAAnCA,OAAQxlB,EAA2B,EAA3BA,MAAO0B,EAAoB,EAApBA,SAAa9G,EAAO,0DAK/E2zB,EACF,qCACKvuB,EACD,cAAC,GAAD,CAAYwlB,OAAQA,OAItBkH,EAAahrB,GAAY8jB,EAAO4G,SAEtC,OAAK5G,IAA+B,IAArBA,EAAOgJ,UAGlBF,IAAeF,GACR,cAACxB,GAAD,yBAAiB1gC,KAAMs5B,EAAOmH,UAAc/xB,GAA5C,IAAmDoF,MAAOuuB,EAAW7B,WAAYA,EAAY7rB,aAAc2kB,EAAOmB,YAEtH,cAAC,GAAD,yBAAkBz6B,KAAMs5B,EAAOmH,UAAc/xB,GAA7C,IAAoDoF,MAAOuuB,EAAW7sB,SAAUgrB,KAL5E,MC3BF+B,GACF,UADEA,GAEF,UAFEA,GAGA,YAHAA,GAIJ,QA0DMC,OA/Cf,YAA0E,IAApDlJ,EAAmD,EAAnDA,OAAQvlB,EAA2C,EAA3CA,WAAYyB,EAA+B,EAA/BA,SAAUuB,EAAqB,EAArBA,QAAYrI,EAAS,4DAEjE8xB,EAAahrB,GAAY8jB,EAAO4G,SAEhCmC,EAAY,qCAAGtuB,EAAH,IAAe,cAAC,GAAD,CAAYulB,OAAQA,OAEjDrlB,EAAQ,KACZ,GAAI8C,GAAWwrB,GACbtuB,EAAQ,CACN6f,QAAS,CACPnhB,MAAO,sCACPyB,QAAS,yBAIV,GAAI2C,GAAWwrB,GAClBtuB,EAAQ,CACN6f,QAAS,CACPnhB,MAAO,oBACPyB,QAAS,wBAIV,IAAI2C,GAAWwrB,GAClB,OAAO,cAAC,GAAD,yBAAWviC,KAAMs5B,EAAOmH,SAAU1sB,WAAYsuB,GAAe3zB,GAA7D,IAAoE8G,SAAUgrB,KAElF,GAAIzpB,GAAWwrB,GAElB,OACE,qCACGF,EACA3zB,EAAMgB,YAAc,sBAAMrD,UAAU,WAAhB,eACrB,uBACA,cAAC,GAAD,yBAAiBrM,KAAMs5B,EAAOmH,UAAc/xB,GAA5C,IAAmDqI,QAAQ,WAAWrH,YAAY,EAAO8F,SAAUgrB,QAIzG,OAAO,cAAC,GAAD,aACLxgC,KAAMs5B,EAAOmH,SACb1sB,WAAYsuB,EACZrrB,YAAajD,EACbyB,SAAUgrB,EACVvsB,MAAOA,GACHvF,KCqOO+zB,OArRf,YAAwD,IAAD,IAA/B/K,EAA+B,EAA/BA,QAAS7iB,EAAsB,EAAtBA,SAAU6tB,EAAY,EAAZA,SACnCjxB,EAAY1H,aAAY,SAACC,GAAD,OAAWA,EAAMwE,QAEzC+I,EAAUC,YAAQ,CACtBlF,KAAM,WAEAE,EAA+F+E,EAA/F/E,UAAWD,EAAoFgF,EAApFhF,SAAUkF,EAA0EF,EAA1EE,aAAqCkrB,GAAqCprB,EAA5DupB,SAA4DvpB,EAAlDwpB,YAAkDxpB,EAArCorB,OAC5DC,GADiGrrB,EAA9B9F,UACnDkxB,EAAMvuC,IAAOE,WAAW,IACxCuuC,EAAgBF,EAAMvuC,IAAOI,WAAW,GARO,EASvB0U,oBAAS,GATc,mBAS9CwO,EAT8C,KASrCC,EATqC,KAW/CN,EAAWC,cAGXM,EAAQ,uCAAG,WAAOvQ,EAAMyE,GAAb,SAAA+L,EAAA,sEAGbF,GAAW,GAHE,SAKQ3F,IAAQ8wB,WAAWz7B,EAAM,GAC5C,CAAC,GAAD,OAAIjT,IAAOE,UAAX,sBACGF,IAAOI,UADV,YAGA,iBATW,cAaU,oBAAbqgB,GACRA,GAAS,GAdE,gDAkBbwC,EAAS3N,aAAK,CACZ0K,QAAS,KAAEA,QACXiE,SAAU,aAEZhF,QAAQuC,MAAM,CAAC9J,EAAC,OAtBH,yBAwBb6L,GAAW,GAxBE,4EAAH,wDA4BRorB,EAAU,SAACrtB,GACfrC,QAAQwiB,IAAI,QAASngB,GACrB2B,EACE3N,aAAK,CACH0K,QAAS,qEACTiE,SAAU,cAIhBlO,qBAAU,WAER,OADAqD,OAAOU,iBAAiB,eAAgB80B,GACjC,WACLx1B,OAAOW,oBAAoB,eAAgB60B,MAE5C,IAEH,IAAMC,EAAkB,SAACtwB,EAAOuwB,GAE9B,OAAIvwB,IAAUuwB,GAGL,kBA/D0C,EA2Efh6B,mBAAS,MA3EM,mBA2E9Ci6B,EA3E8C,KA2EjCC,EA3EiC,KAqG/CJ,EAAY,SAAAl3B,GAChBA,EAAEC,iBACFD,EAAEu3B,YAAc,IAMlBl5B,qBAAU,WAAO,IAAD,EACdoI,EAAS,GAAD,OAAIne,IAAOE,UAAX,sBAAgCmd,EAAUkP,OAAOvsB,IAAOE,kBAAxD,aAAgC,EAAoCqe,SAE9E,WAAClB,EAAUkP,OAAOvsB,IAAOE,kBAAzB,aAAC,EAAoCqe,QAhHgB,MAkHLzJ,mBAAS,MAlHJ,mBAkH9Co6B,EAlH8C,KAkH5BC,EAlH4B,KA0HrD,OAPAp5B,qBAAU,WAAO,IAAD,IACdoI,EAAS,GAAD,OAAIne,IAAOI,UAAX,sBAAgCid,EAAUkP,OAAOvsB,IAAOI,kBAAxD,aAAgC,EAAoCme,OAC5E4wB,EAAmB,UAAC9xB,EAAUkP,OAAOvsB,IAAOI,kBAAzB,aAAC,EAAoCme,SAE1D,WAAClB,EAAUkP,OAAOvsB,IAAOI,kBAAzB,aAAC,EAAoCme,QAInC,cAAC,IAAD,2BAAkB4E,GAAlB,aACE,sBAAMK,SAAUH,EAAaG,EAAUmrB,GAAvC,SACE,eAACtD,GAAD,CACEvyB,MAAM,oBACNwyB,YAAY,EACZE,YAAanoB,EAAaG,EAAUmrB,GACpClD,cAAe6C,EACfhrB,QAASA,EALX,UAME,cAAC,EAAD,CAAcxK,MAAM,OAApB,SACE,eAAC,EAAD,WACE,cAACyL,EAAD,UACE,cAAC,GAAD,CAAY/B,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAAqButB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOC,YAAa0f,WAAW,mBAAmBiD,YAAY,mBAAmBD,QAAQ,WAAWrH,YAAY,MAEhO,cAACiJ,EAAD,UACE,cAAC,GAAD,CAAY/B,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAAqButB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOG,iBAAkBwf,WAAW,4BAA4BiD,YAAY,4BAA4BD,QAAQ,eAEhO,cAAC4B,EAAD,UACE,cAAC,GAAD,CAAY/B,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAAqButB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOE,WAAYyf,WAAW,kBAAkBiD,YAAY,kBAAkBD,QAAQ,WAAWrH,YAAY,MAE7N,cAACiJ,EAAD,UACE,cAAC,GAAD,CAAO/B,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAAqB/L,KAAI,UAAK5L,IAAOE,UAAZ,YAAiCyf,WAAW,0BAA0BiD,YAAY,kBAAkBD,QAAQ,WAAWrH,YAAY,EAAMuE,MAAO,CAAEwvB,SAAU,SAAA9wB,GAAK,OAAIswB,EAAgBtwB,EAAOiwB,cAK9Q,cAAC,EAAD,CAAc11B,MAAOxF,YAAStT,IAAO6G,aAAagsB,SAAlD,SACE,cAAC,GAAD,CAAiBjnB,KAAM5L,IAAO6G,YAA9B,SACG,SAACyoC,EAASC,EAAgBC,EAAmBryB,GAC5C,OACE,qCACGmyB,EAAQxyB,KAAI,SAACE,EAAEZ,GAAW,IAAD,EACiD,CACvEF,GAAoBlc,IAAO6G,YAAamW,EAAGnO,IAAoB5O,YAC/Dic,GAAoBlc,IAAO6G,YAAamW,EAAGnO,IAAoBC,aAC/DoN,GAAoBlc,IAAO6G,YAAamW,EAAGnO,IAAoB3O,WAC/Dgc,GAAoBlc,IAAO6G,YAAamW,EAAGnO,IAAoBjC,KAJ1D6iC,EADiB,KACGC,EADH,KACwBC,EADxB,KAC2C34B,EAD3C,KAQxB,OACE,eAAC,EAAD,WACE,eAACuN,EAAD,WACE,cAAC,GAAD,CAAa3Y,KAAMoL,IACnB,cAAC,GAAD,CACEpL,KAAM6jC,EACNlvB,aAAcnC,EAAUqxB,GAExB9vB,WAAW,aACXgD,QAAQ,WACRrH,YAAY,EACZkH,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,mBAJvC83B,MAOT,cAAClrB,EAAD,UACE,cAAC,GAAD,CACE3Y,KAAM8jC,EACNnvB,aAAcnC,EAAUsxB,GAExB/vB,WAAW,cACXgD,QAAQ,WACRH,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,mBAHvC+3B,KAMT,eAACnrB,EAAD,WACE,cAAC,GAAD,CACE3Y,KAAM+jC,EACNpvB,aAAcnC,EAAUuxB,GAExBhwB,WAAW,YACXgD,QAAQ,WACRrH,YAAY,EACZkH,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,mBAJvCg4B,GAMP,cAACC,GAAA,EAAD,CAAYp0B,MAAO,CAAElE,MAAO,wBAAyBD,QAASm4B,EAAkBxyB,cAKxF,cAAC,EAAD,UACE,cAACuH,EAAD,CAAW/I,MAAO,CAAEO,UAAW,UAA/B,SACE,cAAC,KAAD,CAAQnQ,KAAK,UAAU8T,MAAM,aAAaiD,QAAQ,OAAOnH,MAAO,CAAEunB,cAAe,cAAgB1rB,QAASk4B,gBASxH,cAAC,EAAD,CAAcz2B,MAAM,YAApB,SACE,eAAC,EAAD,WACE,cAACyL,EAAD,UACE,cAAC,GAAD,CACI1E,MAAO,CAAEwvB,SAAU,SAAA9wB,GAAK,OApJrB,SAACA,GACpB,MAAc,iBAAVA,GAGK,4BAgJmCsxB,CAAatxB,KACzC2mB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOI,WACxC8gB,QAAS,IAAIzM,KAAK,cAClB0M,eAAe,EAAMvV,KAAM5L,IAAOI,UAClCsf,MAAM,YAAYpE,YAAY,EAC9BmF,SA3HW,SAAClC,GAC5BJ,EAASne,IAAOI,UAAWme,QA4HjB,cAACgG,EAAD,UACE,cAAC,GAAD,CAAkBrD,QAAS,IAAIzM,KAAK,cAAe0M,eAAe,EAAMvV,KAAI,UAAK5L,IAAOI,UAAZ,YAAiCsf,MAAM,oBAAoBpE,YAAY,EAAMuE,MAAO,CAAEwvB,SAAU,SAAA9wB,GAAK,OAAIswB,EAAgBtwB,EAAOkwB,KAAkBluB,aAAc2uB,MAE9O,cAAC3qB,EAAD,SAKJ,eAAC,EAAD,CAAczL,MAAM,kBAAkBwC,YAAU,EAAhD,UACE,cAAC,GAAD,CAAa1P,KAAK,eAAeiU,MAAO,CAAEwvB,SAAU,SAAA9wB,GAAK,OA/I1C,IAXF,CACnBve,IAAOU,eACPV,IAAOS,aACPT,IAAOY,mBACPZ,IAAOW,iBACPX,IAAOa,mBACPb,IAAOc,cACPd,IAAOe,YAEyB+b,KAAI,SAAAgzB,GAAC,OAAI1xB,EAAU0xB,MACjB/hB,MAAK,SAAAgiB,GAAE,MAAW,SAAPA,IAAwB,IAAPA,MAE9Df,EAAe,OACR,IAEPA,EAAe,+CACR,OA2ID,cAAC,EAAD,UACE,eAACzqB,EAAD,WACIwqB,GAAe,qBAAKvzB,MAAO,CAAEO,UAAW,SAAUzE,MAAO,OAA1C,SAAmDy3B,IAEpE,cAAC,GAAD,CAAervB,MAAM,SAASwlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOU,kBACtE,cAAC,GAAD,CAAegf,MAAM,OAAOwlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOS,gBACpE,cAAC,GAAD,CAAeif,MAAM,2BAA2BwlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOY,sBACxF,cAAC,GAAD,CAAe8e,MAAM,uBAAuBwlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOW,oBACpF,cAAC,GAAD,CAAe+e,MAAM,+CAA+CwlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOa,sBAC5G,cAAC,GAAD,CAAe6e,MAAM,qBAAqBwlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOc,iBAClF,cAAC,GAAD,CAAe4e,MAAM,oBAAoBwlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOe,sBAMvF,eAAC,EAAD,CAAc+X,MAAM,WAAWwC,YAAY,EAA3C,UAEA,cAAC,GAAD,CAAa1P,KAAK,kBAChB,eAAC,EAAD,WACE,eAAC2Y,EAAD,WACE,cAAC,GAAD,CAAe7E,MAAM,eAAewlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOwG,oBAC5E,cAAC,GAAD,CAAekZ,MAAM,aAAawlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOyG,kBAC1E,cAAC,GAAD,CAAeiZ,MAAM,kBAAkBwlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO0G,wBAEjF,cAAC,GAAD,CAAY8b,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAAqButB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO2G,iBAC/GgZ,WAAW,iBAAiBiD,YAAY,iCAAiCD,QAAQ,mBAI3F,cAAC,EAAD,CAAc7J,MAAM,yBAApB,SACE,cAAC,EAAD,UAEE,cAACyL,EAAD,UACE,cAAC,GAAD,CAAe2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOoD,kBAAmBkY,YAAY,EAAMoE,MAAM,+D,WCnR5G/D,GAAYC,aAAW,SAACC,GAAD,MAAY,CACrCC,KAAM,GAENkd,MAAO,SAAC1e,SAmFG4F,WA/Ef,YAAsO,IAA5MtU,EAA2M,EAA3MA,KAA2M,KAArMiU,MAAqM,EAA9LvE,mBAA8L,cAA1K0F,SAA0K,EAAvJgvB,wBAAuJ,SAA9HnkC,EAA8H,EAA9HA,YAA8H,IAAjH6T,aAAiH,MAAzG,GAAyG,EAArGigB,EAAqG,EAArGA,UAAqG,IAA1Fhd,eAA0F,MAAhF,WAAgF,EAApEC,EAAoE,EAApEA,YAAajD,EAAuD,EAAvDA,WAAYnE,EAA2C,EAA3CA,MAAO+C,EAAoC,EAApCA,MAAO0xB,EAA6B,EAA7BA,gBAAoB31B,EAAS,mLAE3N+G,EAAU1F,GAAU,CACtBq0B,oBAII1uB,GAFMC,eACEtD,YAAe,CAAEC,KAAM,WAC/BoD,QACFE,EAAQC,eAAIH,EAAQ1V,GAElBuS,EAAaF,YAAe,CAAEC,KAAM,WAApCC,SAoBR,OAjBApI,qBAAU,WACN,GAAsB,kBAAVwI,GAAsBA,IAAUA,EAAMmB,OAAWuwB,GAA6B,OAAV1xB,EAAiB,CAC7F,IAAM2xB,EAAoBvQ,EAAU/rB,MAAK,SAACwT,GAAD,OAAUA,EAAK7I,QAAW0xB,GAA6B,OAAV1xB,EAAkBA,EAAQA,EAAMA,UACtH,GAAI2xB,GAAqBA,EAAkBxwB,MACvC,IACIvB,EAASvS,EAAMskC,GACjB,MAAOC,GACyB,oBAAnB71B,EAAMmG,UACbnG,EAAMmG,SAASyvB,OAMhC,CAAC3xB,EAAOohB,IAKP,sBAAK1nB,UAAWoJ,EAAQvF,KAAMN,MAAO,CAAEwT,eAAgBxN,GAAS,SAAhE,UACI,eAACI,GAAA,EAAD,WACKjC,EAEGrE,GACI,sBAAME,MAAO,CAAElE,MAAO,MAAOsZ,gBAAiB,eAA9C,oBAIZ,cAACwf,GAAA,EAAD,2BACQ91B,GADR,IAEIqI,QAAQ,WACR9L,WAAW,EACXoB,UAAS,UAAKoJ,EAAQ2X,MAAb,UACT5Y,QAASuf,EACT0Q,eAAgB,SAACvd,GAAD,OAAkB,OAANA,QAAM,IAANA,OAAA,EAAAA,EAAQpT,QAAS,IAC7C4wB,kBAAmB,SAACxd,GAGhB,OAFgBA,EAAOvU,QAAP,OAAgBA,QAAhB,IAAgBA,OAAhB,EAAgBA,EAAOA,QAI3CA,MAAOA,EACP8D,YAAa,SAACC,GAAD,OACT,cAACC,EAAA,EAAD,2BACQD,GADR,IAEIM,YAAaA,EACblD,MAAOA,EACPqD,aAAYlX,EACZ8W,QAAUqtB,EAA4B,WAAVrtB,EAC5BnH,MAAOA,EACPgG,QAASA,MAGjB+uB,cAAc,EACd9vB,SAAU,SAAC1D,EAAG9J,GAAJ,OAAaqH,EAAMmG,SAASxN,QAGjC,OAALuO,QAAK,IAALA,OAAA,EAAAA,EAAOxB,UACH,qBAAKxE,MAAO,CAAElE,MAAO,MAAO0J,SAAU,YAAtC,gBACKQ,QADL,IACKA,OADL,EACKA,EAAOxB,eAQc,KAAM,CAAEjC,eAAe,ICvF/DyyB,GAAU,CACd9Q,QAAS,CACPnhB,MAAO,sCACPyB,QAAS,oBAKE,mBAAM1F,EAAN,2BAAkB,cAAC,GAAD,aAAOkI,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAAqBkI,MAAO2wB,IAAcl2B,KCbxHm2B,GAAe,CACnB/Q,QAAS,CACPnhB,MAAO,oBACPyB,QAAS,oBAIE,mBAAM1F,EAAN,2BAAkB,cAAC,GAAD,aAAOkI,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAAqBkI,MAAO4wB,IAAkBn2B,KCsInHo2B,GArIO,SAAC,GAAmC,IAAjC9kC,EAAgC,EAAhCA,KAAgC,IAA1B+kC,YAA0B,MAAnB,GAAmB,EAAf12B,EAAe,EAAfA,SAG9Bs0B,EADQtwB,YAAe,CAAEC,KAAM,WAC/BqwB,MAH6C,EAKTz5B,mBAAS,IALA,mBAK9C87B,EAL8C,KAK9BC,EAL8B,KAM/CC,EAASF,EAAe9zB,KAAI,SAAAlH,GAAK,MAAK,CACxC8J,MAAO9J,EAAMvC,KACbkL,MAAOwyB,OAAOn7B,EAAMue,IACpB6c,UAAWp7B,EAAMq7B,cATgC,EAYrBn8B,mBAAS,IAZY,mBAY9Co8B,EAZ8C,KAYpCC,EAZoC,OAazBr8B,mBAAS,IAbgB,mBAa9Cs8B,EAb8C,KAatCC,EAbsC,KAc/CC,EAAkC,IAApBJ,EAASr2B,OAGvBjF,EAAQ24B,EAAMgD,YAAmB3lC,EAAKiB,IAAuBG,QAC7D0mB,EAAS6a,EAAMgD,YAAmB3lC,EAAKiB,IAAuBE,SAC9DumB,EAAOib,EAAMgD,YAAmB3lC,EAAKiB,IAAuBI,OAC5D2oB,EAAM2Y,EAAMgD,YAAmB3lC,EAAKiB,IAAuBK,MAC3DskC,EAAgBjD,EAAMgD,YAAmB3lC,EAAKiB,IAAuBC,UAErE2kC,EAAW,SAAClzB,GACd,MAAoB,kBAAVA,GAAsBA,EAAO,OAAOA,QAAP,IAAOA,OAAP,EAAOA,EAAOA,MAC9CA,GA2FX,OAxFAxI,qBAAU,WACH46B,GAAgB,UAARA,GAEX,sBAAC,4BAAAltB,EAAA,+EAE4BC,IAAUjC,IAAI,+CAF1C,QAEaqvB,EAFb,QAGcY,QAAQ,CACX,IAAO,EACP,UAAa,KACb,SAAY,KACZ,aAAgB,KAChB,KAAQ,6BAEZb,EAAkBC,GAVzB,gDAYO7xB,QAAQuC,MAAR,MAZP,wDAAD,KAeF,IAEFzL,qBAAU,WACF46B,GAAgB,WAARA,GAEP/6B,GAEL,sBAAC,4BAAA6N,EAAA,+EAG8BC,IAAUjC,IAAI,mBAAoB,CAAE,QAAW7L,EAAM2I,QAHnF,OAGa2yB,EAHb,OAKOC,EAAYD,EAASp0B,KAAI,SAAA4W,GACrB,MAAO,CACHhU,MAAOgU,EAAOC,WACdpV,MAAOwyB,OAAOrd,EAAOS,SAKV,OAAX,OAALve,QAAK,IAALA,OAAA,EAAAA,EAAO2I,SACN3I,EAAM2I,OAAS,GAGf+U,GAAuB,OAAX,OAAJA,QAAI,IAAJA,OAAA,EAAAA,EAAM/U,SACd+U,EAAK/U,OAAS,GAlBzB,gDAsBOU,QAAQuC,MAAR,MAtBP,wDAAD,KAyBF,CAAC5L,IAEHG,qBAAU,WACF46B,GAAgB,SAARA,IAEPjd,GAAW4d,IAEhB,sBAAC,gCAAA7tB,EAAA,kEAIW2tB,EAAS,IACTE,EALX,wBAMiBN,EAAYS,EAAS77B,GACrB+7B,EAAcf,EAAeh9B,MAAK,SAAAgC,GAAK,OAAIse,SAASte,EAAMue,MAAQ6c,KAPnF,SAS0BttB,IAAUjC,IAAV,gDAAuDkwB,EAAYC,eAT7F,OASWR,EATX,gDAW0B1tB,IAAUjC,IAAV,uBAA8BgwB,EAAS/d,KAXjE,QAWW0d,EAXX,eAcOA,EAAOM,QAAQ,CACX,IAAO,EACP,KAAQ,gBACR,MAAS,OAEbL,EAAUD,EAAOt0B,KAAI,SAAAwW,GACjB,MAAO,CACH5T,MAAO4T,EAAKjgB,KACZkL,MAAOwyB,OAAOzd,EAAKa,SAtBlC,kDA0BOlV,QAAQuC,MAAR,MA1BP,yDAAD,KA6BF,CAACkS,EAAQ9d,IAGP,mCACKqE,EAAS,CACN62B,SACAI,WACAE,SACAI,gBACA57B,QACA8d,SACAJ,OACAsC,MACA0b,kB,qBCwcDO,OAzjBf,YAAkD,IAAvBpxB,EAAsB,EAAtBA,SAAU6tB,EAAY,EAAZA,SAC7BwD,EAAiBn8B,aAAY,SAACC,GAAD,OAAWA,EAAMwE,QAE5C+I,GADe2uB,EAAe1oB,UACpBhG,YAAQ,CACtBlF,KAAM,YAJqC,EAOnBpJ,mBAAS,IAPU,mBAOtCi9B,EAPsC,KAO/BC,EAP+B,KAQrC1wB,EAA8C6B,EAA9C7B,OAAQ+B,EAAsCF,EAAtCE,aAA4BkrB,GAAUprB,EAAxB4a,aAAwB5a,EAAVorB,OARC,EAUfz5B,oBAAS,GAVM,mBAUtCwO,EAVsC,KAU7BC,EAV6B,KAWvCN,EAAWC,cAEbM,EAAQ,uCAAG,WAAOvQ,EAAMyE,GAAb,yBAAA+L,EAAA,sEAEXF,GAAW,GAIN0uB,IACHh/B,EAAK9P,gBAAkB,OAI3B,UAAG8P,EAAK1S,yBAAR,aAAG,EAAwB81B,OAEnB6b,EAAUj/B,EAAK1S,kBAAkB81B,KACzBxb,OAAS,IACnB5H,EAAK1S,kBAAkB81B,IAAM6b,EAAQvI,OAAO,EAAG,GAC/C12B,EAAK1S,kBAAkB4xC,SAAWD,EAAQvI,OAAOuI,EAAQr3B,OAAO,EAAG,KAGzE,UAAG5H,EAAKxP,uBAAR,aAAG,EAAsB4yB,OAEjB6b,EAAUj/B,EAAKxP,gBAAgB4yB,KACvBxb,OAAS,IACnB5H,EAAKxP,gBAAgB4yB,IAAM6b,EAAQvI,OAAO,EAAG,GAC7C12B,EAAKxP,gBAAgB0uC,SAAWD,EAAQvI,OAAOuI,EAAQr3B,OAAO,EAAG,KAGvE,UAAG5H,EAAK9P,uBAAR,aAAG,EAAsBkzB,OAEjB6b,EAAUj/B,EAAK9P,gBAAgBkzB,KACvBxb,OAAS,IACnB5H,EAAK9P,gBAAgBkzB,IAAM6b,EAAQvI,OAAO,EAAG,GAC7C12B,EAAK9P,gBAAgBgvC,SAAWD,EAAQvI,OAAOuI,EAAQr3B,OAAO,EAAG,IAhC1D,SAmCU+C,IAAQ8wB,WAAWz7B,EAAK,GAAG,CAAC,qBAnCtC,cAqCY,oBAAbwN,GACRA,GAAS,GAtCA,kDAyCXwC,EAAS3N,aAAK,CACZ0K,QAAS,KAAEA,QACXiE,SAAU,aAEZhF,QAAQuC,MAAM,CAAC9J,EAAC,OA7CL,yBA+CX6L,GAAW,GA/CA,6EAAH,wDAmDNorB,EAAU,SAACrtB,EAAQ5J,GACvBuH,QAAQwiB,IAAIngB,EAAQ5J,GACpBuL,EAAS3N,aAAK,CACZ0K,QAAS,4FACTiE,SAAU,cASRmuB,EAAmB,mBAAGl6B,KAAK,IAAID,UAAU,iBAAiBZ,QALtC,SAACK,GACzBA,EAAEC,iBAEF9B,IAAKw8B,eAEkB,kCAEzBt8B,qBAAU,WAER,IAAMu8B,EAAYz8B,IAAK08B,eACvBP,EAASM,KACT,IAnF2C,MAqFKx9B,mBAAS,IArFd,mBAqFtC09B,EArFsC,KAqFnBC,EArFmB,OAsFS39B,mBAAS,MAtFlB,mBAsFtC49B,EAtFsC,KAsFjBC,EAtFiB,KAuF7C58B,oBAAS,sBAAC,kCAAA0N,EAAA,sEACwBC,IAAUjC,IAAV,wCADxB,OAEN4S,GADIA,EADE,QAEgC1W,QAAO,SAAAi1B,GAAC,OAAqB,IAAjBA,EAAEC,eAChDL,EAAoBne,EAAkBvX,KAAI,SAAA81B,GAAC,MAAK,CAChDlzB,MAAOkzB,EAAE9sB,YACTvH,MAAO,GAAKq0B,EAAEze,QAEAud,QAAQ,CAAChyB,MAAO,OAAQnB,MAAO,KAC7Cu0B,EAAU,cAAKze,EAAkBzgB,MAAK,SAAAgY,GAAC,OAAIA,EAAEmnB,kBAAnC,aAAK,EAAwC5e,IAC3Dwe,EAAuBG,GACvBL,EAAqBD,GAVf,2CAWR,IAEF,IAAMQ,EAAsBzE,EAAMvuC,IAAOQ,iBACnCyyC,EAAoB1E,EAAMvuC,IAAOK,YAWjC6yC,EAAa31B,KAAK+D,EAAQ,4BAS1B6xB,EAAa,CACjBzT,QAAS,CACPnhB,MAAO,iHACPyB,QAAS,kBA5HgC,EAiIiBlL,mBAAsG,OAA7Fs+B,YAAc7B,YAAmBvxC,IAAOmD,gBAAgB0J,IAAuBC,WAjIzG,mBAiItCmlC,EAjIsC,KAiIboB,EAjIa,KAmIvCC,EAAuB,WAC3BD,GAA4BpB,IAGxBsB,EAAwBhF,EAAMgD,YAAmBvxC,IAAOyD,gBAAgByK,IAAuBC,WAErG,OACE,cAAC,IAAD,2BAAkBgV,GAAlB,aACE,sBAAMK,SAAUH,EAAaG,EAAUmrB,GAAvC,SACA,eAACtD,GAAD,CAAavyB,MAAM,sBAAsBwyB,YAAY,EAAME,YAAanoB,EAAaG,EAAUmrB,GAAUlD,cAAe6C,EAAUhrB,QAASA,EAA3I,UAEE,cAAC,EAAD,CAAcxK,MAAM,QAApB,SACI,cAAC,EAAD,UACE,cAACyL,EAAD,UACE,cAAC,GAAD,CACEjJ,YAAY,EACZ+E,eAAe,EACfV,WAAW,QACXiD,YAAY,QACZE,oBAAqBsvB,EACrBhxB,UAAU,EACV7C,MAAOwzB,UAMjB,eAAC,EAAD,CAAcj5B,MAAM,2CAA2CwC,YAAU,EAAzE,UACI43B,GACA,cAAC,EAAD,UACE,cAAC3uB,EAAD,UACE,wBAAQ/I,MAAO,CAAElE,MAAO,OAAxB,iDAIN,eAAC,EAAD,WACE,eAACiN,EAAD,WACE,cAAC,GAAD,CAAa3Y,KAAK,mBAAmBiU,MAAO,CAAEwvB,SAAU,SAAA9wB,GAAK,SA/DlEy0B,IAAwBC,IAClB,sCA+DD,cAAC,GAAD,CAAWrnC,KAAM5L,IAAOQ,gBAAiBmf,WAAW,sBAAsBiD,YAAY,sBAAsBD,QAAQ,aACpH,cAAC,GAAD,CAAU/W,KAAM5L,IAAO0D,wBAAyBgc,MAAM,0BAExD,cAAC6E,EAAD,UACE,cAAC,GAAD,CAAW3Y,KAAM5L,IAAOK,WAAYsf,WAAW,oBAAoBiD,YAAY,oBAAoBD,QAAQ,qBAKjH,cAAC,EAAD,UACE,eAAC,EAAD,WACE,cAAC4B,EAAD,CAAWtI,GAAI,EAAf,SACE,cAAC,GAAD,CAAerQ,KAAM5L,IAAOO,kBAA5B,SACG,YAQM,IAPLuwC,EAOI,EAPJA,OACAI,EAMI,EANJA,SACAE,EAKI,EALJA,OACAx7B,EAII,EAJJA,MACA8d,EAGI,EAHJA,OACAJ,EAEI,EAFJA,KACAge,EACI,EADJA,WAEA,OACE,eAAC,EAAD,CAAcx4B,MAAM,oBAAoBwL,aAAa,EAArD,UACE,cAAC,EAAD,UACE,cAACC,EAAD,UACE,cAACivB,GAAD,CACE5nC,KAAM2lC,YAAmBvxC,IAAOO,kBAAkBsM,IAAuBC,SACzE6S,WAAW,iBACXiD,YAAY,iBACZD,QAAQ,WACRrH,YAAY,EACZuE,MAAOszB,QAIb,oBAAIl7B,UAAU,sBAAd,4BACE,cAAC,EAAD,UACE,cAACsM,EAAD,UACE,cAAC,GAAD,CACE/B,WAAY,SAAC9K,GACD,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAEzB2D,YAAY,EACZqE,WAAW,QACXiD,YAAY,QACZhX,KAAM2lC,YAAmBvxC,IAAOO,kBAAmBsM,IAAuBG,OAC1E2yB,UAAWmR,EACXnuB,QAAQ,kBAGG,IAAZ,OAAL/M,QAAK,IAALA,OAAA,EAAAA,EAAO2I,QACP,sBAAK/C,MAAO,CACVoV,gBAAiB,YACjBjK,QAAS,QAFX,UAIE,gCAAO,0EACP,cAAC,GAAD,CAAO/a,KAAM2lC,YAAmBvxC,IAAOO,kBAAkBsM,IAAuBM,qBAAsByV,YAAY,uDAAuDtH,YAAY,OAGvL1F,IAAU07B,GACV,cAAC,EAAD,UACE,cAAC/sB,EAAD,UACE,cAAC,GAAD,CACE/B,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5C2D,YAAY,EACZqE,WAAW,SACXiD,YAAY,SACZhX,KAAM2lC,YAAmBvxC,IAAOO,kBAAkBsM,IAAuBE,QACzE4yB,UAAWuR,EACXvuB,QAAQ,kBAKb+Q,GAAU4d,IACX,cAAC,EAAD,UACE,cAAC/sB,EAAD,UACE,cAAC,GAAD,CACE/B,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5C2D,YAAY,EACZqE,WAAW,OACXiD,YAAY,OACZhX,KAAM2lC,YAAmBvxC,IAAOO,kBAAkBsM,IAAuBI,MACzE0yB,UAAWyR,EACXzuB,QAAQ,kBAIC,IAAZ,OAAJ2Q,QAAI,IAAJA,OAAA,EAAAA,EAAM/U,QACL,sBACE/C,MAAO,CACLoV,gBAAiB,YACjBjK,QAAS,QAHb,UAKE,gCAAO,sDACP,cAAC,GAAD,CACE/a,KAAM2lC,YAAmBvxC,IAAOO,kBAAmBsM,IAAuBO,oBAC1EkO,YAAY,EACZsH,YAAY,kDAGhB0Q,GACA,cAAC,EAAD,UACE,cAAC/O,EAAD,UACE,cAAC,GAAD,CACEjJ,YAA8B,KAAb,OAAL1F,QAAK,IAALA,OAAA,EAAAA,EAAO2I,OACnB3S,KAAM2lC,YAAmBvxC,IAAOO,kBAAkBsM,IAAuBK,KACzEyS,WAAW,WACXiD,YAAY,WACZD,QAAQ,iBAIhB,cAAC,EAAD,CAAUnH,MAAO,CAACO,UAAW,QAA7B,SACE,cAACwI,EAAD,UACE,cAAC,GAAD,CAAU3Y,KAAK,0BAA0B2S,MAAO0zB,EAAyBxxB,SAAU6yB,EAAsB5zB,MAAM,0CAU3HuyB,GACF,eAAC1tB,EAAD,WACE,uBACA,cAAC,GAAD,CAAe3Y,KAAM5L,IAAOmD,gBAA5B,SACG,YAQM,IAPL2tC,EAOI,EAPJA,OACAI,EAMI,EANJA,SACAE,EAKI,EALJA,OACAx7B,EAII,EAJJA,MACA8d,EAGI,EAHJA,OACAJ,EAEI,EAFJA,KACAge,EACI,EADJA,WAEA,OACE,eAAC,EAAD,CAAcx4B,MAAM,kBAAkBwL,aAAa,EAAnD,UACE,cAAC,EAAD,UACE,cAACC,EAAD,UACE,cAACivB,GAAD,CACE5nC,KAAM2lC,YAAmBvxC,IAAOmD,gBAAgB0J,IAAuBC,SACvE6S,WAAW,iBACXiD,YAAY,iBACZD,QAAQ,WACRrH,WAAY22B,EACZpyB,MAAOszB,QAIb,oBAAIl7B,UAAU,sBAAd,4BACA,eAAC,EAAD,WACI,cAACsM,EAAD,UACE,cAAC,GAAD,CACE/B,WAAY,SAAC9K,GACD,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAEzB2D,WAAY22B,EACZrmC,KAAM2lC,YAAmBvxC,IAAOmD,gBAAiB0J,IAAuBG,OACxE2S,WAAW,QACXiD,YAAY,QACZ+c,UAAWmR,EACXnuB,QAAQ,gBAGK,IAAZ,OAAL/M,QAAK,IAALA,OAAA,EAAAA,EAAO2I,QACP,sBAAK/C,MAAO,CACVoV,gBAAiB,YACjBjK,QAAS,QAFX,UAIE,gCAAO,0EACP,cAAC,GAAD,CAAOrL,WAAY22B,EAAyBrmC,KAAM2lC,YAAmBvxC,IAAOmD,gBAAgB0J,IAAuBM,qBAAsByV,YAAY,+DAIzJhN,IAAU07B,GACV,cAAC,EAAD,UACE,cAAC/sB,EAAD,UACE,cAAC,GAAD,CACE/B,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5C2D,WAAY22B,EACZrmC,KAAM2lC,YAAmBvxC,IAAOmD,gBAAgB0J,IAAuBE,QACvE4S,WAAW,SACXiD,YAAY,SACZ+c,UAAWuR,EACXvuB,QAAQ,kBAKb+Q,GAAU4d,IACX,cAAC,EAAD,UACE,cAAC/sB,EAAD,UACE,cAAC,GAAD,CACE/B,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5C2D,WAAY22B,EACZrmC,KAAM2lC,YAAmBvxC,IAAOmD,gBAAgB0J,IAAuBI,MACvE0S,WAAW,OACXiD,YAAY,OACZ+c,UAAWyR,EACXzuB,QAAQ,kBAKC,IAAZ,OAAJ2Q,QAAI,IAAJA,OAAA,EAAAA,EAAM/U,QACL,sBACE/C,MAAO,CACLoV,gBAAiB,YACjBjK,QAAS,QAHb,UAKE,gCAAO,sDACP,cAAC,GAAD,CACE/a,KAAM2lC,YAAmBvxC,IAAOmD,gBAAiB0J,IAAuBO,oBACxEkO,WAAY22B,EACZrvB,YAAY,kDAGhB0Q,GACA,cAAC,EAAD,UACE,cAAC/O,EAAD,UACE,cAAC,GAAD,CACE3Y,KAAM2lC,YAAmBvxC,IAAOmD,gBAAgB0J,IAAuBK,KACvEyS,WAAY,WACZiD,YAAY,WACZD,QAAQ,WACRrH,YAA8B,KAAb,OAAL1F,QAAK,IAALA,OAAA,EAAAA,EAAO2I,2BAczC,eAAC,EAAD,CAAczF,MAAM,qBAApB,UACE,eAAC,EAAD,WACE,cAACyL,EAAD,UACE,cAACgd,GAAD,CAAU31B,KAAM2lC,YAAmBvxC,IAAOyD,gBAAgByK,IAAuBC,UAAWuR,MAAM,4BAA4BigB,UAAW6S,MAEzIe,IAA0Bb,GAC1B,cAACnuB,EAAD,UACE,cAAC,GAAD,CAAO/B,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBACjD/L,KAAM2lC,YAAmBvxC,IAAOyD,gBAAgByK,IAAuBE,mBAAoBuR,WAAW,uBAAuBiD,YAAY,uBACzID,QAAQ,gBAET,QAGP,eAAC,EAAD,WACE,cAAC4B,EAAD,UACE,cAAC,GAAD,CAAO/B,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAAqB/L,KAAM2lC,YAAmBvxC,IAAOyD,gBAAgByK,IAAuBjO,YAAa0f,WAAW,aAAaiD,YAAY,aAAaD,QAAQ,eAEvN,cAAC4B,EAAD,UACE,cAAC,GAAD,CAAO/B,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAAqB/L,KAAM2lC,YAAmBvxC,IAAOyD,gBAAgByK,IAAuBhO,WAAYyf,WAAW,YAAYiD,YAAY,YAAYD,QAAQ,kBAGtN,cAAC,EAAD,UACE,cAAC4B,EAAD,CAAWtI,GAAI,EAAf,SACE,cAAC,GAAD,CAAOikB,SAAU,CAAEmP,SAAU,SAAA9wB,GAAK,OAA0BA,IAjU5DwzB,GACD,0CAgUuEz2B,YAAY,EAAO1P,KAAM2lC,YAAmBvxC,IAAOyD,gBAAgByK,IAAuBI,OAAQqR,WAAW,QAAQiD,YAAY,QAAQD,QAAQ,iBAI3N,cAAC,GAAD,CAAe/W,KAAM5L,IAAOyD,gBAA5B,SACG,YAQM,IAPLqtC,EAOI,EAPJA,OACAI,EAMI,EANJA,SACAE,EAKI,EALJA,OACAx7B,EAII,EAJJA,MACA8d,EAGI,EAHJA,OACAJ,EAEI,EAFJA,KACAge,EACI,EADJA,WAEA,OACE,qCACE,cAAC,EAAD,UACE,cAAC/sB,EAAD,CAAWtI,GAAI,EAAf,SACE,cAAC,GAAD,CACEuG,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5C/L,KAAM2lC,YAAmBvxC,IAAOyD,gBAAgByK,IAAuBpB,SACvE6S,WAAW,iBACXiD,YAAY,iBACZD,QAAQ,iBAKd,eAAC,EAAD,WACI,cAAC4B,EAAD,CAAWtI,GAAI,EAAf,SACE,cAAC,GAAD,CACEuG,WAAY,SAAC9K,GACD,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAEzB/L,KAAM2lC,YAAmBvxC,IAAOyD,gBAAiByK,IAAuBlB,OACxE2S,WAAW,QACXiD,YAAY,QACZ+c,UAAWmR,EACXnuB,QAAQ,gBAGK,IAAZ,OAAL/M,QAAK,IAALA,OAAA,EAAAA,EAAO2I,QACP,sBAAK/C,MAAO,CACVoV,gBAAiB,YACjBjK,QAAS,QAFX,UAIE,gCAAO,0EACP,cAAC,GAAD,CAAO/a,KAAM2lC,YAAmBvxC,IAAOyD,gBAAgBoJ,IAAuBM,qBAC5EyV,YAAY,+DAIlBhN,IAAU07B,GACV,cAAC,EAAD,UACE,cAAC/sB,EAAD,CAAWtI,GAAI,EAAf,SACE,cAAC,GAAD,CACEuG,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAE5C/L,KAAM2lC,YAAmBvxC,IAAOyD,gBAAgByK,IAAuBnB,QACvE4S,WAAW,SACXiD,YAAY,SACZ+c,UAAWuR,EACXvuB,QAAQ,kBAKb+Q,GAAU4d,IACX,cAAC,EAAD,UACE,cAAC/sB,EAAD,CAAWtI,GAAI,EAAf,SACE,cAAC,GAAD,CACEuG,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5C/L,KAAM2lC,YAAmBvxC,IAAOyD,gBAAgByK,IAAuBjB,MACvE0S,WAAW,OACXiD,YAAY,OACZ+c,UAAWyR,EACXzuB,QAAQ,kBAKC,IAAZ,OAAJ2Q,QAAI,IAAJA,OAAA,EAAAA,EAAM/U,QACL,sBACE/C,MAAO,CACLoV,gBAAiB,YACjBjK,QAAS,QAHb,UAKE,gCAAO,sDACP,cAAC,GAAD,CACE/a,KAAM2lC,YAAmBvxC,IAAOyD,gBAAiBoJ,IAAuBO,oBACxEwV,YAAY,kDAGhB0Q,GACA,cAAC,EAAD,UACE,cAAC/O,EAAD,CAAWtI,GAAI,EAAf,SACE,cAAC,GAAD,CACErQ,KAAM2lC,YAAmBvxC,IAAOyD,gBAAgByK,IAAuBhB,KACvEyS,WAAW,WACXiD,YAAY,WACZD,QAAQ,uBAUxB,cAAC,EAAD,UACE,cAAC4B,EAAD,CAAWtI,GAAI,EAAf,SACE,cAAC,GAAD,CAAWrQ,KAAM2lC,YAAmBvxC,IAAOyD,gBAAgByK,IAAuBK,OAAQoR,WAAW,eAAegD,QAAQ,WAAWC,YAAY,qBAGvJ,cAAC,EAAD,UACE,eAAC2B,EAAD,CAAWtI,GAAI,GAAf,UACE,qBAAKhE,UAAU,QAAf,SACE,cAAC,GAAD,CAAUrM,KAAM2lC,YAAmBvxC,IAAOyD,gBAAgByK,IAAuBM,YAAakR,MAAM,yBAEtG,8BACE,cAAC,GAAD,CAAU9T,KAAM2lC,YAAmBvxC,IAAOyD,gBAAgByK,IAAuBG,gBAAiBqR,MAAM,2I,4CCnhB3GQ,WAzCf,YAA+G,IAAlFtU,EAAiF,EAAjFA,KAAM+zB,EAA2E,EAA3EA,UAAWjgB,EAAgE,EAAhEA,MAAO7T,EAAyD,EAAzDA,YAAyD,KAA5C4zB,QAA4C,EAAnCre,iBAAmC,SAAlB5F,EAAkB,EAAlBA,MAAUlB,EAAQ,uFAGtG6I,EAAUlF,YAAe,CAAEC,KAAM,WACjCoD,EAAM,OAAG6B,QAAH,IAAGA,OAAH,EAAGA,EAAS7B,OACpBE,EAAQ,KAIZ,OAHIF,IACFE,EAAQC,eAAIH,EAAQ1V,IAGpB,eAACgiC,GAAA,EAAD,CAAatU,UAAU,WAAWrhB,UAAU,cAA5C,UACIyH,GACA,cAAC+zB,GAAA,EAAD,CAAWna,UAAU,SAArB,SACE,qBAAIrhB,UAAU,sBAAd,cAAsCyH,EACpCpF,EAAMgB,WAAY,sBAAMrD,UAAU,WAAhB,gBAAuC,MACxDqC,EAAMgB,YAAchB,EAAMiB,eAAgB,sBAAMtD,UAAU,WAAhB,gBAAuC,UAItFuJ,GAAS,qBAAKhG,MAAO,CAAElE,MAAO,OAArB,qCACX,cAACo8B,GAAA,EAAD,yBAAY3wB,aAAYlX,GAAiByO,GAAzC,aACGqlB,EAAU7iB,KAAI,SAACsK,EAAKpK,GAAN,OACb,cAAC22B,GAAA,EAAD,CACEn4B,MAAOlB,EAAMs5B,WAEbr1B,MAAO6I,EAAK7I,MACZkhB,QACE,cAACoU,GAAA,EAAD,CACEv8B,MAAM,UACNkE,MAAOA,IAIXkE,MAAO0H,EAAK1H,MACZ0B,UAA4B,IAAlBgG,EAAKhG,UAAuC,SAAlBgG,EAAKhG,WAAoC,IAAbA,GAZlE,UAEU1B,EAFV,mBAE0B1C,gBCXrBkD,WAZf,YAAqE,IAAD,IAAjDrU,mBAAiD,MAAnC,MAAmC,EAA5B6T,EAA4B,EAA5BA,MAAmBpF,GAAS,EAArBmlB,QAAqB,kDAElE,OACA,cAACH,GAAD,aACE5f,MAAOA,EACP0C,OAAO,cACPW,aAAYlX,GACRyO,MAdM,CACZolB,QAAS,CACPnhB,MAAO,6DACPyB,QAAS,iB,WCkCE8zB,OA9Bf,YAA6D,IAApC5O,EAAmC,EAAnCA,OAAQ9jB,EAA2B,EAA3BA,SAAU1B,EAAiB,EAAjBA,MAAUpF,EAAO,+CAE9BxF,mBAAS,IAFqB,mBAEjDslB,EAFiD,KAE1C2Z,EAF0C,KAIxDh+B,oBAAS,sBAAC,4BAAA0N,EAAA,yDAEDyhB,EAAOlc,KAFN,iEAKgBtF,IAAUswB,sBAAsB9O,EAAOvyB,YAAauyB,EAAOlc,MAL3E,OAKA5I,EALA,OAMN2zB,EAAS3zB,GANH,2CAQR,CAAC8kB,EAAOlc,OAEV,IAAMirB,EAAgB7Z,EAAMvf,OAAS,GAC/BuxB,EAAahrB,GAAY8jB,EAAO4G,SAEhCmC,EACF,qCACKvuB,EACD,cAAC,GAAD,CAAYwlB,OAAQA,OAI5B,OAAI+O,EACO,cAAC,GAAD,aAAgBtU,UAAWvF,EAAOxuB,KAAMs5B,EAAOmH,SAAUjrB,SAAUgrB,EAAYzsB,WAAYsuB,GAAe3zB,IAE9G,cAACinB,GAAD,aAAU5B,UAAWvF,EAAOxuB,KAAMs5B,EAAOmH,SAAUjrB,SAAUgrB,EAAY1sB,MAAOuuB,GAAgB3zB,KCHrG45B,GAAmB,CACrB,CAAE31B,MAAO,OAAQmB,MAAO,OACxB,CAAEnB,MAAO,QAASmB,MAAO,OAGd,SAASy0B,GAAT,GAA4F,IAA/DvoC,EAA8D,EAA9DA,KAAM2U,EAAwD,EAAxDA,aAAwD,IAA1Cof,iBAA0C,MAA9BuU,GAA8B,EAAT55B,EAAS,mDAChG85B,EAAiBz+B,aAAY,SAACC,GAAD,OAAWA,EAAMwE,KAAKmS,OAAO3gB,MAOhE,OALK2U,GAAgB6zB,GAA2C,OAAzBA,EAAe71B,QAElDgC,EAAe8zB,YAAQD,EAAe71B,QAItC,cAAC,GAAD,aACI3S,KAAMA,EACN+zB,UAAWA,EACXiU,WAAY,CAAE7sB,aAAc,QAC5BxG,aAAcA,GACVjG,ICPDg6B,OAjCf,YAA+D,IAAtCpP,EAAqC,EAArCA,OAAQ9jB,EAA6B,EAA7BA,SAAU1B,EAAmB,EAAnBA,MAAUpF,EAAS,6CAEpDi6B,EAAYnzB,GAAY8jB,EAAO4G,SAFqB,EAIc7tB,cAAlCE,GAJoB,EAIlDmD,OAJkD,EAI1CjE,UAJ0C,EAI/Be,UAJ+B,EAIpBD,UAWtC,OAf0D,EAIVkF,aAJU,EAIIkrB,MAE9Dx4B,qBAAU,WACN,IAAyB,IAArBmvB,EAAOgJ,UAAX,CAGA,IAAM3tB,GAAmC,IAApB2kB,EAAOmB,SAAoB,QAA6B,IAApBnB,EAAOmB,SAAqB,QAAUnB,EAAOmB,SACtGloB,EAAS+mB,EAAOmH,SAAU9rB,MAE3B,CAAC2kB,EAAOgJ,YAGP,qCACI,8BACKxuB,EADL,SAEmBwC,IAAVxC,GAAuBpF,EAAMgB,YAC1B,sBAAME,MAAO,CAAElE,MAAO,OAAtB,mBAHZ,IAKM,cAAC,GAAD,CAAY4tB,OAAQA,OAE1B,cAACiP,GAAD,aACI/yB,SAAUmzB,EACV3oC,KAAMs5B,EAAOmH,UACT/xB,QCELk6B,OAjCf,YAA+D,IAApCtP,EAAmC,EAAnCA,OAAQ9jB,EAA2B,EAA3BA,SAAU1B,EAAiB,EAAjBA,MAAUpF,EAAO,+CAEhCxF,mBAAS,IAFuB,mBAEnDslB,EAFmD,KAE5C2Z,EAF4C,KAI1Dh+B,oBAAS,sBAAC,4BAAA0N,EAAA,yDAEDyhB,EAAOlc,KAFN,iEAKgBtF,IAAUjC,IAAI,kBAAmB,CACnDjO,YAAa0xB,EAAOvyB,YACpBwU,KAAM+d,EAAOlc,OAPX,OAKA5I,EALA,OASN2zB,EAAS3zB,EAAQtD,KAAI,SAAA81B,GAAC,kCACfA,GADe,IAElBlzB,MAAOkzB,EAAEv/B,KACTkL,MAAOq0B,EAAE1M,YAZP,2CAeR,CAAChB,EAAOlc,OAEV,IAAMojB,EAAahrB,GAAY8jB,EAAO4G,SAEhCmC,EACF,qCACKvuB,EACD,cAAC,GAAD,CAAYwlB,OAAQA,OAI5B,OAAO,cAAC,GAAD,aAAYvF,UAAWvF,EAAOxuB,KAAMs5B,EAAOmH,SAAUjrB,SAAUgrB,EAAY1sB,MAAOuuB,GAAe3zB,KCkW7Fm6B,OA/Wf,YAAyD,IAAD,IAA/BnR,EAA+B,EAA/BA,QAAS7iB,EAAsB,EAAtBA,SAAU6tB,EAAY,EAAZA,SAElCoG,EAAYpR,EAAQnc,KAEpBhE,EAAUC,YAAQ,CACpBlF,KAAM,WAKNE,GAIA+E,EANA7B,OAMA6B,EALA9F,UAKA8F,EAJA/E,WACAD,EAGAgF,EAHAhF,SACAkF,EAEAF,EAFAE,aACAkrB,EACAprB,EADAorB,MAbgD,EAgBtBz5B,oBAAS,GAhBa,mBAgB7CwO,EAhB6C,KAgBpCC,EAhBoC,KAiB9CN,EAAWC,cAEXM,EAAQ,uCAAG,WAAOvQ,EAAMyE,GAAb,eAAA+L,EAAA,6DACTkxB,EAAU,CAAC,cAAe,uBACG,aAA7BvB,YAAcpzC,IAAOwC,OACrBmyC,EAAU,CAAC,cAAe,sBAAuB,wBAEnB,OAA9B1hC,EAAK9M,sBACLwuC,EAAQ3uB,KAAK,wBANJ,SAUTzC,GAAW,GAVF,SAWY3F,IAAQ8wB,WACzBz7B,EACA,GACA0hC,GAdK,cAiBe,oBAAbl0B,GACPA,GAAS,GAlBJ,kDAqBTwC,EACI3N,aAAK,CACD0K,QAAS,KAAEA,QACXiE,SAAU,aAxBT,yBA4BTV,GAAW,GA5BF,6EAAH,wDAgCRorB,EAAU,SAACrtB,GACbrC,QAAQwiB,IAAI,QAASngB,GACrB2B,EACI3N,aAAK,CACD0K,QAAS,qEACTiE,SAAU,cAIhB2wB,EAAe,CACjB50C,IAAOgC,qBACPhC,IAAOiC,iBACPjC,IAAOkC,iBACPlC,IAAOmC,uBACPnC,IAAOoC,iBACPpC,IAAOqC,cACPrC,IAAOe,YAnEyC,EAsEd+T,mBAAS,MAtEK,mBAsE7C+/B,EAtE6C,KAsEhCC,EAtEgC,KAuF9CC,EAAyBxG,EAAMvuC,IAAOqC,eAC5C0T,qBAAU,YACyB,IAA3Bg/B,GACAH,EAAa93B,KAAI,SAACk4B,GACVA,IAAOh1C,IAAOqC,eACd8b,EAAS62B,GAAI,QAI1B,CAACD,IAEJ,IAAME,EAAsB1G,EAAMvuC,IAAOgC,sBACnCkzC,EAAa3G,EAAMvuC,IAAOiC,kBAC1BkzC,EAAa5G,EAAMvuC,IAAOkC,kBAC1BkzC,EAAe7G,EAAMvuC,IAAOmC,wBAC5BkzC,EAAa9G,EAAMvuC,IAAOoC,kBAChC2T,qBAAU,YACsB,IAAxBk/B,IAA+C,IAAfC,IAAsC,IAAfC,IAAwC,IAAjBC,IAAwC,IAAfC,GACvGl3B,EAASne,IAAOqC,eAAe,KAEpC,CAAC4yC,EAAqBC,EAAYC,EAAYC,EAAcC,IA3GX,MA6GtBvgC,oBAAS,GA7Ga,mBA6G7CwgC,EA7G6C,KA6GpCC,EA7GoC,KA8G9CC,EAAajH,EAAM,SACnBkH,EAAgBlH,EAAM,YACtBmH,EAAsBnH,EAAMvuC,IAAO0C,iBACnCizC,EAAWpH,EAAMvuC,IAAOwC,KAK9BuT,qBAAU,YACa,IAAfy/B,GAEAr3B,EAAS,YAAY,KAG1B,CAACq3B,IAEJz/B,qBAAU,YACgB,IAAlB0/B,GAEAt3B,EAAS,SAAS,KAGvB,CAACs3B,IAEJ,IAYIG,EAA8C,cAA9BxC,YAAcpzC,IAAOwC,KAInCqzC,EAAW,UAAGvS,EAAQ8L,iBAAiBpvC,IAAOuC,0BAAnC,iBAAG,EAAoD8jC,gBAAvD,aAAG,EAA8DyP,MAAM,KAAK,GAtJzC,GAuJdhhC,mBAAS,MAvJK,qBAuJ7CihC,GAvJ6C,MAuJhCC,GAvJgC,MAwJ9CC,GAAa1H,EAAMvuC,IAAOuC,mBAsBhC,OApBAwT,qBAAU,WAEFigC,GADc,eAAfC,MAMJ,CAACA,KAcA,cAAC,IAAD,2BAAkB9yB,GAAlB,aACI,sBAAMK,SAAUH,EAAaG,EAAUmrB,GAAvC,SACI,eAACtD,GAAD,CACIvyB,MAAM,WACNwyB,YAAY,EACZE,YAAanoB,EAAaG,EAAUmrB,GACpClD,cAAe6C,EACfhrB,QAASA,EALb,UAOI,eAAC,EAAD,CAAcxK,MAAM,yBAAyBwC,YAAU,EAAvD,UACI,cAAC,EAAD,UACI,eAACiJ,EAAD,CAAWtI,GAAI,EAAf,WAEMu5B,IAAeC,GACb,gCACKG,EAAgB,wBAAgB,eADrC,YAGI,wBAAQ39B,UAAU,SAAUZ,QAlD9C,SAACK,GACfA,EAAEC,iBACF49B,GAAYD,IAiDwB95B,MAAO,CACHwF,SAAU,QACVoiB,WAAY,QACZzc,QAAS,YACTib,SAAU,cACVsU,UAAW,eANnB,sBAWNV,IAAeC,GAAiBH,GAC9B,cAAC,GAAD,CACI1pC,KAAM5L,IAAOwC,IACbmd,WAAW,MACXiD,YAAY,MACZD,QAAQ,WACRrH,YAAam6B,IAAkBD,KAGrCA,IAAeC,GAAiBH,GAC9B,cAAC/wB,EAAD,CAAWtI,GAAI,EAAf,SACI,cAAC,GAAD,CACIrQ,KAAI,UAAK5L,IAAOwC,IAAZ,YACJmd,WAAW,cACXiD,YAAY,cACZD,QAAQ,WACRrH,YAAam6B,IAAkBD,EAC/B31B,MAAS41B,GAAkBD,EAAwE,GAA1D,CAAEnG,SAAU,SAAA9wB,GAAK,OAtF1E,SAACA,EAAOuwB,GAC5B,OAAIvwB,IAAUuwB,GAGH,iBAkFuFD,CAAgBtwB,EAAOo3B,cAMzG,cAAC,EAAD,UACI,eAACpxB,EAAD,CAAWtI,GAAI,EAAf,UACI,qBAAKhE,UAAU,QAAf,SACI,cAAC,GAAD,CAAUrM,KAAK,QAAQ8T,MAAM,2BAE/Bk2B,GACE,8BACI,cAAC,GAAD,CAAUhqC,KAAK,WAAW8T,MAAM,wCASpD,cAAC,EAAD,UACI,cAAC,EAAD,UACI,cAAC6E,EAAD,CAAWtI,GAAI,EAAf,SACC,cAAC,GAAD,CAAkByD,MAAM,kCAAkCwlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOsD,UAAWgY,YAAY,UAKlI,cAAC,EAAD,CAAcxC,MAAM,6BAA6BwC,YAAU,EAA3D,SACI,cAAC,EAAD,UACI,eAACiJ,EAAD,WACI,cAAC,GAAD,CACI3Y,KAAK,sBACLiU,MAAO,CAAEwvB,SAAU,SAAC9wB,GAAD,OAlLxB,IALFq2B,EAAa93B,KAAI,SAACgzB,GAAD,OAAO1xB,EAAU0xB,MACnB/hB,MAChC,SAACgiB,GAAD,MAAe,SAAPA,IAAwB,IAAPA,MAKzB+E,EAAe,OACR,IAEPA,EAAe,sCACR,OA8KcD,GACG,qBAAKr5B,MAAO,CAAEO,UAAW,SAAUzE,MAAO,OAA1C,SACKu9B,IAGT,cAAC,GAAD,CAAe3P,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOgC,sBAAuB0d,MAAM,qCACpF,cAAC,GAAD,CAAewlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOiC,kBAAmByd,MAAM,UAChF,cAAC,GAAD,CAAewlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOkC,kBAAmBwd,MAAM,8BAChF,cAAC,GAAD,CAAewlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOmC,wBAAyBud,MAAM,wCACtF,cAAC,GAAD,CAAewlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOoC,kBAAmBsd,MAAM,UAChF,cAAC,GAAD,CAAewlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOqC,eAAgBqd,MAAM,sBAE7E,cAAC,GAAD,CAAYwlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOsC,kBAChDsgB,YAAY,uCACZjD,WAAW,uDAM3B,cAAC,EAAD,CAAc7G,MAAM,wBAApB,SACI,cAAC,EAAD,UACI,sBAAKb,UAAU,kBAAf,UACI,oBAAIA,UAAU,oCAAd,wCAGA,uBACA,cAAC,GAAD,CAAgBitB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOmG,sBAAuBuZ,MAAM,oBAAoBpE,YAAY,WAKjI,cAAC,EAAD,CAAcxC,MAAM,wBAApB,SACI,cAAC,EAAD,UACI,eAACyL,EAAD,WACI,cAAC,GAAD,CAAe2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO6K,wBAAyB6U,MAAM,+BACtF,cAAC,GAAD,CAAewlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO2K,0BACnD+U,MAAM,yDACV,cAAC,GAAD,CAAewlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO4K,6BACnD8U,MAAM,2NACV,cAAC,GAAD,CAAewlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO6C,aACnD6c,MAAM,iGACV,cAAC,GAAD,CAAewlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO8C,sBACnD4c,MAAM,iHAKtB,cAAC,EAAD,CACI5G,MAAK,6CAAwC47B,EAAxC,YACGA,EAAY,EADf,KAELp5B,YAAY,EAHhB,SAKI,cAAC,EAAD,UACI,cAACiJ,EAAD,CAAWtI,GAAI,EAAf,SACI,cAAC,GAAD,CACIrQ,KAAM5L,IAAOuC,kBACbge,aAAcs1B,EACdh2B,MAAO,CAAEwvB,SAAU,SAAC9wB,GAAD,OAxJvB,SAACA,GACzB,QAAIA,EAuJsD43B,CAAoB53B,KAClDohB,UAAW,CACP,CAAEphB,MAAO,aAAcmB,MAAO,qBAC9B,CAAEnB,MAAO,aAAcmB,MAAO,+BAC9B,CAAEnB,MAAO,aAAcmB,MAAO,gDAU5Cq2B,GAMW,GALT,8BACI,eAAC,KAAD,CAAO9xB,SAAS,UAAU3M,MAAM,UAAhC,UACI,cAAC8+B,GAAA,EAAD,kCADJ,+HASZ,cAAC,EAAD,CAAct9B,MAAM,iBAApB,SACI,eAAC,EAAD,WACI,cAACyL,EAAD,UACI,cAAC,GAAD,CAAe2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOyC,kBAAmB6Y,YAAY,EAClFoE,MAAM,gJAEd,cAAC,KAAD,CAAOuE,SAAS,UAAU3M,MAAM,UAAhC,kHAMR,eAAC,EAAD,WACI,qBAAIW,UAAU,sBAAd,6BAAqDy8B,EAArD,kFAA8I,sBAAMl5B,MAAO,CAAElE,MAAO,OAAtB,kBAC9I,cAAC,EAAD,UACI,cAACiN,EAAD,UACI,cAAC,GAAD,CAAe2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO0C,iBAAkB6b,MAAOm3B,EAAqBp6B,YAAY,oBCxXlI,YAAChB,GAAD,OAAW,cAAC,GAAD,aAAOkK,KAAK,WAAW6xB,aAAa,oBAAuB/7B,KCgLtEg8B,OA1Kf,YAA2D,IAAhChT,EAA+B,EAA/BA,QAAS7iB,EAAsB,EAAtBA,SAAU6tB,EAAY,EAAZA,SAEtCnrB,EAAUC,YAAQ,CACtBlF,KAAM,WAEwCmF,GAAiBF,EAAzD7B,OAAyD6B,EAAjD9F,UAAiD8F,EAAtC/E,UAAsC+E,EAA3BhF,SAA2BgF,EAAjBE,cALQ,EAO1BvO,oBAAS,GAPiB,mBAOjDwO,EAPiD,KAOxCC,EAPwC,KAQlDN,EAAWC,cAEXM,EAAQ,uCAAG,WAAOvQ,EAAMyE,GAAb,SAAA+L,EAAA,sEAEbF,GAAW,GAFE,SAGQ3F,IAAQ8wB,WAAWz7B,GAH3B,cAKW,oBAAbwN,GACTA,GAAS,GANE,gDASbwC,EACE3N,aAAK,CACH0K,QAAS,KAAEA,QACXiE,SAAU,aAZD,yBAgBbV,GAAW,GAhBE,4EAAH,wDAoBRorB,EAAU,SAACrtB,EAAQ5J,KASnB6+B,EACJ,mBAAGr+B,KAAK,IAAID,UAAU,iBAAiBZ,QANZ,SAACK,GAC5BA,EAAEC,iBACF9B,IAAK2gC,kBAIL,6BAGF,OACE,cAAC,IAAD,2BAAkBrzB,GAAlB,aACE,sBAAMK,SAAUH,EAAaG,EAAUmrB,GAAvC,SACE,eAACtD,GAAD,CACEvyB,MAAM,kCACNwyB,YAAY,EACZE,YAAanoB,EAAaG,EAAUmrB,GACpClD,cAAe6C,EACfhrB,QAASA,EALX,UAOE,cAAC,EAAD,CAAcxK,MAAM,YAApB,SACE,cAAC,EAAD,UACE,cAACyL,EAAD,UACE,cAACkyB,GAAD,CACEj0B,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5C0I,eAAe,EACfV,WAAW,WACXgD,QAAQ,WACRvB,UAAU,EACV7C,MAAM,YACNuE,oBAAqByzB,UAM7B,cAAC,EAAD,CAAcz9B,MAAM,uDAApB,SACE,cAAC,EAAD,UACE,cAACyL,EAAD,UACE,cAAC,GAAD,CAAgB2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOgD,eAAgBsY,YAAY,EAAMoE,MAAM,qCAKtG,cAAC,EAAD,CAAc5G,MAAM,gBAAgBwL,aAAa,EAAjD,SACE,cAAC,EAAD,CAAUoyB,QAAM,EAACnc,MAAM,aAAvB,SACE,eAAChW,EAAD,WACE,cAAC,GAAD,CAAe2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOkD,mBACrDoY,YAAY,EACZq7B,KAAK,EACLj3B,MAAM,oKAKR,qBAAIzH,UAAU,uBAAd,UACE,qBAAIA,UAAU,KAAd,UACG,IADH,+IAMA,qBAAIA,UAAU,KAAd,UACG,IADH,gNAOA,qBAAIA,UAAU,KAAd,UACG,IADH,+IAMA,qBAAIA,UAAU,KAAd,UACG,IADH,8PAQA,qBAAIA,UAAU,KAAd,UACG,IADH,4vBAgBA,qBAAIA,UAAU,KAAd,UACG,IADH,0YAeR,cAAC,EAAD,CAAca,MAAM,+BAApB,SACE,cAAC,EAAD,UACE,cAAC,EAAD,UACE,cAACyL,EAAD,UACE,cAAC,GAAD,CAAe2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOiD,mBACrDqY,YAAY,EACZq7B,KAAK,EACLj3B,MAAM,qN,sBCnJ1B,SAASk3B,GAAgB9F,EAAQI,EAAUE,EAAQx7B,EAAO8d,EAAQJ,GAC9D,QAAKI,MAED0d,GAAUA,EAAOv2B,OAAS,GAWlC,SAASg8B,GAAwB/F,EAAQI,EAAUE,EAAQx7B,EAAO8d,EAAQJ,GACtE,SAAI1d,IAA0B,IAAjBA,EAAM2I,WAEf+U,IAAwB,IAAhBA,EAAK/U,OAWrB,SAASu4B,GAAgBC,EAAIC,GACzB,IAAMC,EAA6B,OAAbF,EAAGG,MAAiB,IAAMH,EAAGG,MAC7CC,EAA6B,OAAbH,EAAGE,MAAiB,IAAMF,EAAGE,MAEnD,OAAID,EAAgBE,EACT,EAEPF,EAAgBE,GACR,EAGRJ,EAAG1jC,KAAO2jC,EAAG3jC,KACN,EAEP0jC,EAAG1jC,KAAO2jC,EAAG3jC,MACL,EAEL,EAgBX,SAAS+jC,GAAoBC,EAAGC,GAC5B,IAAKD,EAAEx8B,OAAQ,OAAOy8B,EAAEz8B,OACxB,IAAKy8B,EAAEz8B,OAAQ,OAAOw8B,EAAEx8B,OAExB,IADA,IAAM08B,EAAM,GACHv6B,EAAI,EAAGA,GAAKs6B,EAAEz8B,OAAQmC,IAAK,CAChCu6B,EAAIv6B,GAAK,CAACA,GACV,IAAK,IAAIyrB,EAAI,EAAGA,GAAK4O,EAAEx8B,OAAQ4tB,IAC3B8O,EAAIv6B,GAAGyrB,GACG,IAANzrB,EACMyrB,EACAhrB,KAAKC,IACH65B,EAAIv6B,EAAI,GAAGyrB,GAAK,EAChB8O,EAAIv6B,GAAGyrB,EAAI,GAAK,EAChB8O,EAAIv6B,EAAI,GAAGyrB,EAAI,IAAM4O,EAAE5O,EAAI,KAAO6O,EAAEt6B,EAAI,GAAK,EAAI,IAIrE,OAAOu6B,EAAID,EAAEz8B,QAAQw8B,EAAEx8B,QAO3B,SAAS28B,GAAkBC,GACvB,IAAMC,EAAY,CAAE,SAAU,UAAW,OAAQ,UAAW,WAAY,aAAc,UAAW,SAAU,aAAc,YAAa,SAAU,aAAc,OAAQ,IAItK,OAFkB,OAAGD,QAAH,IAAGA,OAAH,EAAGA,EAAQ3B,MAAM,KAAKh5B,KAAI,SAAA8O,GAAC,OAAIA,EAAE8U,OAAOjtB,iBAAekK,QAAO,SAAAiO,GAAC,OAAIA,EAAE/Q,OAAS,IAAM68B,EAAU54B,SAAS8M,OACrFtP,KAAK,KAU7C,SAASq7B,GAAuBZ,EAAIC,GAChC,OAAID,EAAGa,iBAAmBZ,EAAGY,iBAClB,EAEPb,EAAGa,iBAAmBZ,EAAGY,kBACjB,EAEL,EAUX,IA2QeC,GA3QU,SAAC,GAAkC,IAAhC3S,EAA+B,EAA/BA,OAAQ4S,EAAuB,EAAvBA,OAAQ12B,EAAe,EAAfA,SAElCxV,EAAOs5B,EAAOmH,SAEd0L,EAAsBxG,YAAmB3lC,EAAMmD,IAA0BxB,aACzEyqC,EAA8BzG,YAAmB3lC,EAAMmD,IAA0Bf,eALhC,GAOvCoV,YAAQ,CAAElF,KAAM,WAEAD,YAAe,CAAEC,KAAM,YAA/CC,EAT+C,EAS/CA,SAAUC,EATqC,EASrCA,UAEZ65B,GAA2B/S,EAAO7C,cAAgB6C,EAAOpB,aAXR,EAYjBhvB,mBAASmjC,GAZQ,mBAYhDC,EAZgD,KAYlCC,EAZkC,OAafrjC,mBAASowB,EAAO7C,YAbD,mBAahD+V,EAbgD,KAalCC,EAbkC,OAchBvjC,mBAASowB,EAAOpB,cAdA,mBAchDwU,EAdgD,KAclCC,EAdkC,OAejBzjC,mBAAS,IAfQ,mBAehD0jC,EAfgD,KAenCC,EAfmC,iDA6DvD,gCAAAh1B,EAAA,6DAEQi1B,EAAkB,GACR,MAAVZ,EACAY,EAAkB,CAAC,MAEJ,OAAVZ,GAA6B,OAAVA,EACxBY,EAAkB,CAAC,MAAO,OAEX,OAAVZ,GAA6B,SAAVA,IACxBY,EAAkB,CAAC,QAV3B,SAYgC5sB,QAAQC,IAAI2sB,EAAgB57B,KAAI,SAAA8O,GAAC,OAAIlI,IAAUjC,IAAV,mCAA0CmK,QAZ/G,OAYU+sB,EAZV,OAaUH,EAAcG,EAAc7vB,SAAQ,SAAA8C,GAAC,OAAIA,KAE/C6sB,EAAeD,GAfnB,4CA7DuD,sBAkFvDziC,qBAAU,WACD+hC,GAnF8C,mCAsFnDc,KAED,CAACd,IAIJ,IAAM1L,EAAahrB,GAAY8jB,EAAO4G,SAEhC1R,EAAQoe,EAAYvvB,KAAK6tB,IAAiBh6B,KAAI,SAAA81B,GAEhD,MAAO,CACHlzB,MAjKZ,SAA4Bm5B,GACxB,IACIC,EADc,CAACD,EAAGE,KAAMF,EAAG3B,OACIv5B,QAAO,SAAAiO,GAAC,cAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAG8U,UAAQpkB,KAAK,MAI/D,OAHIw8B,EAAmBpY,SACnBoY,EAAkB,WAAOA,EAAP,MAEhB,GAAN,OAAUD,EAAGxlC,KAAb,YAAqBylC,GAyJHE,CAAmBpG,GAG7Br0B,MAAOq0B,EAAEze,OAMb8kB,EAA4B,GAChC,GAAIX,EAAc,CAAC,IAAD,iBACCE,GADD,IACd,2BAA4B,CAAC,IAApBK,EAAmB,QACxBA,EAAGjB,iBAAmBR,GAAoBI,GAAkBqB,EAAGxlC,MAAOmkC,GAAkBc,KAF9E,8BAKdW,EAA4BT,EAAYvvB,KAAK0uB,IAAwBhT,MAAM,EAAG,IAKlF,OACI,gCACgB,UAAXmT,GAAiC,UAAXA,GACnB,qCACI,cAACvzB,EAAD,UACI,cAAC,GAAD,CACI3Y,KAAMmsC,EACNp4B,WAAY,oDAAc,cAAC,GAAD,CAAYulB,OAAQA,OAC9C5pB,YAAa48B,EACb92B,SAAUgrB,GAAc8L,EAExBvY,UAAWvF,GADN2d,KAIb,cAACxzB,EAAD,UACI,cAAC,GAAD,CAAUnD,SAAUgrB,EAAY8M,YAAY,EACxC1W,QAAS0V,EACT35B,MAAO25B,EACPtsC,KAlIQ,aAmIR2U,aAAc23B,EACdx4B,MAAM,+BACNe,SA1FC,SAAC04B,GAEtB,GADAhB,EAAcgB,GACVA,EAAY,CACZ,IAAMC,EAAoBh7B,EAAU25B,GACpCM,EAAgBe,GAChBj7B,EAAS45B,EAAqB,SAG9B55B,EAAS45B,EAAqBK,YAwF5BF,GAA0B,SAAVJ,IACd,cAAC,EAAD,UACI,eAACvzB,EAAD,WACI,cAAC,EAAD,CACIzL,MAAM,0BACNwL,aAAa,IAEjB,cAAC,GAAD,CACI7D,SAhIS,SAAC/I,GAC9B6gC,EAAe7gC,EAAES,OAAOoG,OACxBJ,EAAS65B,EAA6BtgC,EAAES,OAAOoG,QA+H3BjD,YAAY,EACZ1P,KAAMosC,EACNr4B,WAAW,yBACXyB,SAAUgrB,EACV7tB,MAAO+5B,EACP/3B,aAAc2kB,EAAOpB,eAGxBmV,EAA0Bp+B,OAAS,GAChC,eAACoU,GAAA,EAAD,CAAOhL,SAAS,OAAhB,UAEI,cAAC,KAAD,+BACA,oBAAIhM,UAAU,OAAd,SACKghC,EAA0Bn8B,KAAI,SAAAu8B,GAAC,OAC5B,qBAAIphC,UAAU,KAAKZ,QAAS,SAACK,GAAD,OAtI9B,SAAC4hC,EAAY5hC,GAC3C,IAAM6hC,EAASf,EAAY5kC,MAAK,SAAAylC,GAAC,OAAIA,EAAEllB,KAAOmlB,KACxCE,EAAkB,CACpBj7B,MAAO+6B,EACP55B,MAAO65B,EAAOlmC,MAElB8kC,GAAc,GACdE,EAAgBmB,GAChBr7B,EAAS45B,EAAqByB,GA8HqCC,CAA0BJ,EAAEllB,KAA/D,UACI,cAACulB,GAAA,EAAD,UAAOL,EAAEhmC,OADb,KAC4BgmC,EAAEN,KAD9B,KACsCM,EAAEnC,MADxC,eAShB,cAAC,GAAD,CAAetrC,KAAMA,EAArB,SACK,YAQM,IAPHklC,EAOE,EAPFA,OACAI,EAME,EANFA,SACAE,EAKE,EALFA,OACAx7B,EAIE,EAJFA,MACA8d,EAGE,EAHFA,OACAJ,EAEE,EAFFA,KACAge,EACE,EADFA,WAEA,OACI,gCACI,cAAC,EAAD,UACI,cAAC/sB,EAAD,UACI,cAAC,GAAD,CACI/B,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5C2D,YAAY,EACZqE,WAAW,QACXiD,YAAY,QACZhX,KAAM2lC,YAAmB3lC,EAAMmD,IAA0B/B,OACzD2yB,UAAWmR,EACXnuB,QAAQ,kBAKF,IAAZ,OAAL/M,QAAK,IAALA,OAAA,EAAAA,EAAO2I,QACJ,sBAAK/C,MAAO,CACRoV,gBAAiB,YACjBjK,QAAS,OACTqI,aAAc,QAHlB,UAKI,gCAAO,uEAAyC,sBAAM/W,UAAU,WAAhB,oBAChD,cAAC,GAAD,CAAOrM,KAAM2lC,YAAmB3lC,EAAMmD,IAA0B5B,qBAC5DyV,YAAY,4DAIvBhN,IAAU07B,GACP,cAAC,EAAD,UACI,cAAC/sB,EAAD,UACI,cAAC,GAAD,CACI/B,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5C2D,YAAY,EACZqE,WAAW,SACXiD,YAAY,SACZhX,KAAM2lC,YAAmB3lC,EAAMmD,IAA0BhC,QACzD4yB,UAAWuR,EACXvuB,QAAQ,iBAKvBi0B,GAAgB9F,EAAQI,EAAUE,EAAQx7B,EAAO8d,IAC9C,cAAC,EAAD,UACI,cAACnP,EAAD,UACI,cAAC,GAAD,CACI/B,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5C2D,YAAY,EACZqE,WAAW,OACXiD,YAAY,OACZhX,KAAM2lC,YAAmB3lC,EAAMmD,IAA0B9B,MACzD0yB,UAAWyR,EACXzuB,QAAQ,iBAMvBk0B,GAAwB/F,EAAQI,EAAUE,EAAQx7B,EAAO8d,EAAQJ,IAC9D,sBACI9X,MAAO,CACHoV,gBAAiB,YACjBjK,QAAS,QAHjB,UAKI,gCAAO,mDAAqB,sBAAM1O,UAAU,WAAhB,oBAC5B,cAAC,GAAD,CACIrM,KAAM2lC,YAAmB3lC,EAAMmD,IAA0B3B,oBACzDwV,YAAY,iEC1VjD+2B,GAtCU,SAACr/B,GAExB,IAAIs/B,EAAgB,KAChB55B,EAAU,gBACd,GAAI1F,EAAMu/B,WAAav/B,EAAMw/B,MAAO,CAClC,IAAIC,EAAYz/B,EAAMu/B,UAAYv/B,EAAMw/B,MACxCF,EAAgB,SAAWG,EAAY,cAAgBz/B,EAAMw/B,MAAO,MAEpE,IAAME,EAAY,YAAID,GAAU,EAEhC/5B,EAAU,4BADgC,IAAxB1F,EAAM2/B,cAA0B,GAAKD,GACL,QAAUA,EAAY,qBAAuB1/B,EAAMw/B,MAAQ,kBAAoBx/B,EAAMw/B,MAAQ,EAAI,IAAM,SAGzJF,EAAgB,yBAUlBA,EAAgB,KALdA,GAD0B,IAAxBt/B,EAAM2/B,cACQ,OAASL,EAGT,QAAUA,GAEU,IAEtC,IAAMM,EAAe,CACnBxa,QAAS,CACPnhB,MAAO,IAAI47B,OAAOP,GAClB55B,QAASA,IAIb,OACE,cAAC,GAAD,2BAAW1F,GAAX,IAAkBkI,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAAqBkI,MAAOq6B,MCb/EE,OAff,YAAiE,IAAzClV,EAAwC,EAAxCA,OAAQ9jB,EAAgC,EAAhCA,SAAUzB,EAAsB,EAAtBA,WAAerF,EAAO,kDAG5D,OAAO,cAAC+/B,GAAD,aACC16B,WAAY,qCAAGA,EAAH,IAAe,cAAC,GAAD,CAAYulB,OAAQA,OAC/CtiB,YAAajD,EACbk6B,UAAW,IACXz4B,SAAUA,GAAY8jB,EAAO4G,SAC7BmO,eAAe,EACfruC,KAAMs5B,EAAOmH,UACT/xB,KC4XDggC,OAnXf,YAKI,IAAD,MAJCC,wBAID,SAHC95B,EAGD,EAHCA,SACA6tB,EAED,EAFCA,SACAhL,EACD,EADCA,QAIMngB,EAAUC,YAAQ,CACpBlF,KAAM,WAONC,GAGAgF,EANA7B,OAMA6B,EALA9F,UAKA8F,EAJA/E,UAIA+E,EAHAhF,UACAkF,EAEAF,EAFAE,aACAkrB,EACAprB,EADAorB,MAbL,EAmB+Bz5B,oBAAS,GAnBxC,mBAmBQwO,EAnBR,KAmBiBC,EAnBjB,KAoBON,EAAWC,cAGXs3B,EAAc,OACdC,EAAuB,iBACvBC,EAAWnM,EAAMvuC,IAAO4B,gBACxB+4C,EAAsBpM,EAAMkM,GAElC1kC,qBAAU,WAEF,UAAG2kC,KAAeF,IAClBr8B,EAASne,IAAO4B,eAAgB,IAChCuc,EAASs8B,GAAsB,MAGpC,CAACC,IAGJ,IAAMl3B,EAAQ,uCAAG,WAAOvQ,EAAMyE,GAAb,iBAAA+L,EAAA,sEAETF,GAAW,IACiB,IAAxBo3B,IACA1nC,EAAKjT,IAAO4B,gBAAkB44C,GAE9BvnC,EAAKjT,IAAOuB,sCACZ0R,EAAKjT,IAAOuB,oCAAsCygB,KAC9C/O,EAAKjT,IAAOuB,qCACd6gB,OAAO,aAGb,UAAInP,EAAKjM,kBAAT,aAAI,EAAiB88B,gBACjB7wB,EAAK2nC,YAAa,EAClB3nC,EAAKjM,WAAWq7B,WAAa,MAEI,UAAjCpvB,EAAKjT,IAAO+G,mBACZkM,EAAK2nC,YAAa,EAClB3nC,EAAKjM,WAAa,CACd88B,aAAc,KACdzB,WAAY,MAEhBpvB,EAAKjT,IAAO+B,sBAAwB,MAtB/B,SAyBauhC,EAAQuX,YAAY5nC,EAAMgQ,GAzBvC,QAyBHoZ,EAzBG,UA2BDA,EAAQye,oBACR73B,EACI3N,aAAK,CACD0K,QAAS,+HACTiE,SAAU,aAIlBoY,EAAQ0e,mBACR93B,EACI3N,aAAK,CACD0K,QAAS,sHACTiE,SAAU,aAIlBqf,EAAQ0X,WAAWC,YACnBh4B,EACI3N,aAAK,CACD0K,QAAS,iGACTiE,SAAU,WAIO,oBAAbxD,GACZA,GAAS,IApDR,yBAyDT8C,GAAW,GAzDF,2EAAH,wDA8DRorB,EAAU,SAACrtB,EAAQ5J,KAIzB3B,qBAAU,WAEN,OADAqD,OAAOU,iBAAiB,eAAgB80B,GACjC,WACHx1B,OAAOW,oBAAoB,eAAgB60B,MAEhD,IAEH,IAAMA,EAAY,SAACl3B,GACfA,EAAEC,iBACFD,EAAEu3B,YAAc,IAGdiM,EAAsB3M,EAAMvuC,IAAO+G,iBACnCo0C,EAA6C,QAAxBD,GAAyD,UAAxBA,EAGtDE,EAAgC7M,EAAMvuC,IAAOwB,4BAC7C65C,EAAiD,GAAjCD,GAAuE,GAAjCA,GAAuE,GAAjCA,GAAuE,GAAjCA,EAElIE,EAAoB/M,EAAMvuC,IAAOiB,sBACjCs6C,KAA2C,IAAtBD,GAAoD,SAAtBA,GACzDvlC,qBAAU,YAEoB,IAAtBulC,GAAoD,SAAtBA,GAC9Bn9B,EAASne,IAAOgB,UAAW,MAEhC,CAACs6C,IAGJ,IAAME,EAA+BlY,EAAQ8L,iBAAiBpvC,IAAOqB,0BAC/Do6C,EAAsBlN,EAAMvuC,IAAOqB,yBAA0Bm6C,EAA6BnV,UAC1FqV,EAA2BnN,EAAMvuC,IAAOsB,0BACxCq6C,EAAoBpN,EAAMvuC,IAAOkB,gBAGjC06C,EAAuBtY,EAAQ0X,WAAWv5B,IAAI,cAE9Co6B,EAAavY,EAAQnc,KAE3B,OACI,cAAC,IAAD,2BAAkBhE,GAAlB,aACI,sBAAMK,SAAUH,EAAaG,EAAUmrB,GAAvC,SACI,eAACtD,GAAD,CACIvyB,MAAM,0BACNwyB,YAAY,EACZE,YAAanoB,EAAaG,EAAUmrB,GACpClD,cAAe6C,EACfhrB,QAASA,EALb,UAOI,eAAC,EAAD,CAAcxK,MAAM,sCAAuCwC,YAAU,EAArE,WACMi/B,GACE,eAAC,EAAD,WACI,cAACh2B,EAAD,UACI,4HAEoC,IAChC,qEAHJ,IAKI,sIAMR,eAACA,EAAD,WACI,cAAC,GAAD,CACI2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOsB,0BACxCga,YAAY,EACZiD,MAAOm9B,IACR,QAE6C,IAAnDI,YAAOvN,EAAMvuC,IAAOsB,4BACjB,cAACijB,EAAD,UACI,eAAC,EAAD,CAAcD,aAAa,EAA3B,UACI,cAAC,EAAD,UACI,cAACC,EAAD,UACI,cAAC,GAAD,CACI2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOqB,0BACxC0e,UAAU,EACVL,MAAO,oIAA8F,sBAAMlE,MAAO,CAAElE,MAAO,OAAtB,yBAIvE,UAAzCykC,YAAgBN,IACb,qCACI,cAAC,EAAD,UACI,cAACl3B,EAAD,UACI,cAAC,GAAD,CAAgB2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOwB,4BACpDghB,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5CgL,QAAQ,WACRrH,YAAY,EACZoE,MAAM,yHAIlB,cAAC,EAAD,UACK27B,EACG,cAAC92B,EAAD,UACI,cAAC,GAAD,CACI/B,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5CutB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOyB,4BACxC6Z,YAAY,EACZqE,WAAW,sCAInB,cAAC,GAAD,CACI/T,KAAM5L,IAAOyB,2BACb8c,MAAM,OAIlB,cAAC,EAAD,UACI,cAACgG,EAAD,UACI,cAAC,GAAD,CACIypB,WAAYF,GACZtrB,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5CutB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOuB,oCACxC+Z,YAAY,EACZ0gC,eAAe,EACfp5B,YAAY,sDACZlD,MAAM,4CAIlB,cAAC,EAAD,UACI,eAAC6E,EAAD,WACI,cAAC,GAAD,CACIjJ,YAAY,EACZ4pB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO0B,0CACxCge,MAAM,mHACP,IACgE,GAAlEo8B,YAAOvN,EAAMvuC,IAAO0B,4CACjB,8BACI,4BACI,oBAAGuW,UAAU,WAAb,wKAAmL,mBAAGC,KAAK,uCAAR,2CAAnL,2BAahD,cAAC,EAAD,UACI,eAAC,EAAD,CAAcY,MAAM,uBAAuBwL,aAAa,EAAxD,UACI,eAAC,EAAD,WACI,cAACC,EAAD,UACI,cAAC,GAAD,CAAgB2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO+G,iBACpDuU,YAAY,EACZkH,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5C+H,MAAM,wCAId,cAAC,GAAD,CAAkBwlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOgH,YAAa8wC,OAAQoD,IAE/E,cAAC32B,EAAD,UACI,cAAC,GAAD,CACI2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO+B,sBACxCisC,WAAYF,GACZtrB,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5C2D,YAAY,EACZoE,MAAM,wCAKjBk8B,EAAqBK,gBAClB,cAAChtB,GAAA,EAAD,CAAOhL,SAAS,QAAQhM,UAAU,qBAAlC,kJASQ,IAAvBkjC,GACG,eAAC,EAAD,CAAcriC,MAAM,gBAApB,UACI,cAAC,EAAD,UACI,cAACyL,EAAD,UACI,cAAC,GAAD,CACI2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOgB,WACxCogB,UAAWm6B,EACX57B,WAAW,gBACXrE,WAAYigC,QAIxB,cAAC,EAAD,UACI,cAACh3B,EAAD,UACI,cAAC,GAAD,CAAe2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOiB,sBACnDye,MAAM,oGAMD,QAAxBw7B,GAAyD,UAAxBA,GAC9B,cAAC,EAAD,CAAcpiC,MAAM,uBAAuBwC,YAAU,EAArD,SACI,cAAC,GAAD,CAAe4pB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO2B,mBAAoB2Z,YAAY,EACnFoE,MAAO,0EAA4Em8B,OAIvE,IAAvBV,GAAwD,UAAxBD,EAC7B,cAAC,EAAD,CAAcpiC,MAAOxF,YAAStT,IAAO4B,gBAAgBixB,SAArD,SACI,eAAC,EAAD,WACI,cAACtO,EAAD,UACI,cAAC,GAAD,CAAe2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO4B,gBACnDwf,SAAUu5B,EACVr/B,YAAaq/B,EACbh7B,WAAW,sBAGnB,cAAC4E,EAAD,CAAW23B,WAAS,EAAC52B,WAAW,WAAhC,SACI,cAAC,GAAD,CAAU1Z,KAAM6uC,EAAsB/6B,MAAM,+CAA+C0B,SAAQ,UAAEkiB,EAAQ8L,iBAAiBpvC,IAAO4B,uBAAlC,aAAE,EAAiDkqC,kBAKlK,GAGJ,cAAC,EAAD,CAAchzB,MAAM,uDAApB,SACI,cAAC,EAAD,UACI,cAACyL,EAAD,UACI,cAAC,GAAD,CAAe2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOkB,gBAAiBqd,MAAOo9B,UAK3F,cAAC,EAAD,CAAcr3B,aAAa,EAA3B,SACI,eAAC,EAAD,WACI,cAACC,EAAD,UACI,cAAC,GAAD,CACI/B,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5CutB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOmB,iBACxCwe,WAAW,gCAGnB,cAAC4E,EAAD,UACI,cAAC,GAAD,CACI/B,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5CutB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOoB,cACxCue,WAAW,qCCnHhCw8B,G,WAzQX,WAAYlpC,GAAM,qBACdC,KAAKE,MAAQH,EACbC,KAAKkpC,YAAa,E,8CAGtB,WACI,OAAOlpC,KAAKE,MAAMT,c,gBAGtB,WACI,OAAOO,KAAKE,MAAM4V,O,eAMtB,WAEI,cADO9V,KAAKE,MAAMkwB,QACXpwB,KAAKE,Q,sBAOhB,WACI,MAAO,CACH4D,GAAI9D,KAAK8D,GACTmQ,KAAMjU,KAAKiU,KACX3T,YAAaN,KAAKM,e,qBAS1B,WACI,IAAI2wB,EAAG,eAAOjxB,KAAKE,OAgBnB,cAbO+wB,EAAIb,eACJa,EAAItU,oBACJsU,EAAIkY,+BACJlY,EAAImY,0BACJnY,EAAI4H,eACJ5H,EAAIre,mBACJqe,EAAIiC,sBACJjC,EAAImB,cACJnB,EAAI2H,gBACJ3H,EAAI+H,kBACJ/H,EAAIoY,uBACJpY,EAAI+J,iBACJ/J,EAAIqY,cACJrY,I,cAGX,WACI,OAAOjxB,KAAKE,MAAM+gB,I,IAGtB,SAAO5V,GACHrL,KAAKE,MAAMopC,cAAgBtpC,KAAK8D,GAChC9D,KAAKE,MAAM+gB,GAAK5V,I,mBAGpB,WAAc,IAAD,EACT,iBAAOrL,KAAKE,MAAMopC,qBAAlB,QAAmCtpC,KAAK8D,K,iBAG5C,WACI,OAAO9D,KAAK8D,GAAK,I,qBAGrB,WACI,OAAO9D,KAAKkpC,a,gBAMhB,WAAW,IAAD,EACN,iBAAOlpC,KAAKE,aAAZ,aAAO,EAAY5B,a,oBAOvB,WAAe,IAAD,EACV,iBAAO0B,KAAKE,aAAZ,aAAO,EAAY04B,W,6BAQvB,SAAiB2Q,GAEb,IAAMC,EAAOxpC,KAOb,SAASypC,EAAUC,GACf,IAAKA,GAAyB,IAAbA,EACb,OAAO,KACX,GAAwB,kBAAbA,EAAsB,CAE7B,GAAIlpC,OAAOmpC,KAAKD,GAAU99B,SAAS,YAC/B,OAAO89B,EAASvW,SAEpB,GAAI3yB,OAAOmpC,KAAKD,GAAU99B,SAAS,SAG/B,OAAO89B,EAASr+B,MAGxB,OAAOq+B,EAOX,SAASE,IACL,IAAKL,GAA2B,IAAdA,EACd,OAAO,KACX,IAAIG,EAAWH,EAMf,OALI5/B,MAAMkgC,QAAQN,KAEdG,EAAWH,EAAU7oC,MAAK,SAAAgY,GAAC,OAAIA,EAAEuI,KAAOuoB,EAAK1lC,OAG1C2lC,EAAUC,GAOrB,SAASI,IAEL,OAAKP,GAA2B,IAAdA,EAGd5/B,MAAMkgC,QAAQN,GACPA,EAAU7oC,MAAK,SAAAgY,GAAC,OAAIA,EAAEuI,KAAOuoB,EAAK1lC,IAAM4U,EAAEuI,KAAOuoB,EAAKO,WAK1DR,EARI,KAYf,OAAQvpC,KAAKsR,MACT,IAAK,UACD,IAAIo4B,EAAWE,IACE,SAAbF,EACAA,GAAW,EACO,UAAbA,IACLA,GAAW,GAEf1pC,KAAKE,MAAMizB,SAAWuW,EACtB,MACJ,IAAK,OACL,IAAK,OACD1pC,KAAKE,MAAMizB,SAAWyW,IACtB,MACJ,IAAK,UACL,IAAK,UACD5pC,KAAKE,MAAMizB,SAAWyW,IACtB,MAEJ,IAAK,aACD5pC,KAAKE,MAAMivB,WAAasa,EAAUF,EAAUpa,YAC5CnvB,KAAKE,MAAMgjB,OAASumB,EAAWF,EAAUrmB,QACzCljB,KAAKE,MAAMikB,SAAWslB,EAAUF,EAAUplB,UAC1CnkB,KAAKE,MAAM8pC,QAAUP,EAAUF,EAAUS,SACzChqC,KAAKE,MAAM0wB,aAAe6Y,EAAUF,EAAU3Y,cAC9C5wB,KAAKE,MAAM+pC,kBAAoBR,EAAUF,EAAUU,mBACnDjqC,KAAKE,MAAMgqC,iBAAmBT,EAAUF,EAAUW,kBAClD,MACJ,IAAK,SACD,IAAMC,EAAWL,IACbK,GACAnqC,KAAKE,MAAMmhB,SAAWooB,EAAUU,EAAS9oB,UACzCrhB,KAAKE,MAAMshB,eAAiBioB,EAAUU,EAAS3oB,gBAC/CxhB,KAAKE,MAAMohB,WAAamoB,EAAUU,EAAS7oB,YAC3CthB,KAAKE,MAAMqhB,YAAckoB,EAAUU,EAAS5oB,cAG5CvhB,KAAKkpC,YAAa,EAEtB,MACJ,IAAK,UACD,IAAMkB,EAAYN,IACdM,GACApqC,KAAKE,MAAMivB,WAAasa,EAAUW,EAAUjb,YAC5CnvB,KAAKE,MAAMgjB,OAASumB,EAAUW,EAAUlnB,QACxCljB,KAAKE,MAAMikB,SAAWslB,EAAUW,EAAUjmB,UAC1CnkB,KAAKE,MAAM8pC,QAAUP,EAAUW,EAAUJ,SACzChqC,KAAKE,MAAM0wB,aAAe6Y,EAAUW,EAAUxZ,cAC9C5wB,KAAKE,MAAM+pC,kBAAoBR,EAAUW,EAAUH,mBACnDjqC,KAAKE,MAAMgqC,iBAAmBT,EAAUW,EAAUF,kBAClDlqC,KAAKE,MAAMmqC,aAAeZ,EAAUW,EAAUC,cAC9CrqC,KAAKE,MAAMoxB,UAAYmY,EAAUW,EAAU9Y,WAC3CtxB,KAAKE,MAAMqxB,UAAYkY,EAAUW,EAAU7Y,WAC3CvxB,KAAKE,MAAMixB,SAAWsY,EAAUW,EAAUjZ,UAC1CnxB,KAAKE,MAAMkxB,SAAWqY,EAAUW,EAAUhZ,UAC1CpxB,KAAKE,MAAMsxB,cAAgBiY,EAAUW,EAAU5Y,eAC/CxxB,KAAKE,MAAMmxB,aAAeoY,EAAUW,EAAU/Y,eAG9CrxB,KAAKkpC,YAAa,EAEtB,MACJ,IAAK,UACL,IAAK,UACL,IAAK,WACD,MAAM,IAAI38B,MAAM,kCAAoCvM,KAAKsR,MAC7D,QACI,MAAM,IAAI/E,MAAM,uBAAyBvM,KAAKsR,U,2BAU1D,SAAoB/B,GAAc,IAATzL,EAAQ,uDAAH,EACtBmtB,EAAM,CACNhQ,GAAInd,EACJrE,YAAa8P,EACbqpB,UAAU,EACVoC,WAAW,GAGf,OADAzrB,EAAMA,EAAIhP,eAEN,IAAK,UACD0wB,EAAI3yB,WAAa,SACjB,MACJ,IAAK,mBACL,IAAK,gBACD2yB,EAAI3yB,WAAa,UACjB,MACJ,QACI2yB,EAAIkC,SAAW,KAEvB,OAAO,IAAI8V,EAAUhY,O,KCnNdqZ,G,WAxCX,WAAYvqC,GAAO,qBACfC,KAAKE,MAAQH,E,kDAGjB,WACI,OAAOC,KAAKuqC,WAAW,W,8BAG3B,WACI,OAAOvqC,KAAKuqC,WAAW,c,6BAG3B,WACI,OAAOvqC,KAAKuqC,WAAW,a,4BAO3B,WACI,IADkB,EACZphB,EAAU,GADE,eAEAnpB,KAAKE,OAFL,IAElB,2BAA6B,CAAC,IAArBsqC,EAAoB,QACzB,GAAI7gC,MAAMkgC,QAAQW,GAAlB,sBACqBA,GADrB,IACI,2BAAuB,CAAC,IAAft2B,EAAc,QACnBiV,EAAQrW,KAAKoB,IAFrB,oCAKIiV,EAAQrW,KAAK03B,IARH,8BAUlB,OAAOrhB,I,wBAGX,SAAWshB,GACP,OAAOzqC,KAAK0qC,iBAAiB7vB,MAAK,SAAA6kB,GAAC,aAA2C,KAAvC,UAAAA,EAAEiL,eAAF,eAAW9vB,MAAK,SAAA/Q,GAAC,OAAIA,IAAM2gC,a,KCzCpEG,G,WAMF,WAAY7qC,GAAO,qBACfC,KAAKE,MAAQH,E,2CAOhB,WACG,OAAqB,MAAdC,KAAKE,Q,iBAQhB,SAAII,GACA,GAAmB,MAAfA,EACA,OAAO,KACX,GAAkB,MAAdN,KAAKE,MACL,OAAO,KAEXI,EAAcA,EAAYC,cAC1B,IAAMi0B,EAAex0B,KAAKE,MAAMuK,QAAO,SAAAiO,GAAC,OAAIA,EAAEjZ,YAAYc,gBAAkBD,KAC5E,OAAO,IAAIuqC,GAAoBrW,K,sBAQnC,SAAS10B,GACL,IAAMQ,EAAc8L,IAAeC,eAAevM,GAClD,OAAOE,KAAKuO,IAAIjO,K,kBAOpB,WACI,OAAkB,MAAdN,KAAKE,MACE,EAEJF,KAAKE,MAAMyH,S,2BAOtB,WACI,OAAkB,MAAd3H,KAAKE,MACE,EACJF,KAAKE,MAAMuK,QAAO,SAAAiO,GAAC,OAAIA,EAAEoyB,cAAYnjC,S,sBAOhD,WACI,OAAkB,MAAd3H,KAAKE,OAGFF,KAAKE,MAAM6qC,OAAM,SAAAryB,GAAC,OAAIA,EAAEoyB,gB,uBAMnC,WACI,OAAO9qC,KAAKE,MAAM2a,MAAK,SAAAnC,GAAC,MAA0B,sBAAtBA,EAAEsyB,kBAAkE,uBAAtBtyB,EAAEsyB,kBAAmE,wBAAtBtyB,EAAEsyB,sB,wBAQ/H,SAAW1qC,GAAc,IAAD,EACpB,OAA6C,KAAtC,UAAAN,KAAKuO,IAAIjO,UAAT,eAAuB8H,c,uBAQlC,SAAU9H,GAAa,IAAD,EAClB,OAA4C,KAArC,UAAAN,KAAKuO,IAAIjO,UAAT,eAAuB2qC,a,wBAQlC,SAAW5Y,GACP,OAAkB,MAAdryB,KAAKE,MACE,IAAI0qC,EAAe,OAE9BvY,EAAeA,EAAazoB,KAAI,SAAA8O,GAAC,OAAIA,EAAEnY,iBAEhC,IAAIqqC,EADI5qC,KAAKE,MAAMuK,QAAO,SAAAiO,GAAC,OAAI2Z,EAAazmB,SAAS8M,EAAEjZ,YAAYc,sB,gCAS9E,SAAmBujB,GACf,IAAMuO,EAAevO,EAAUla,KAAI,SAAA8O,GAAC,OAAItM,IAAeC,eAAeqM,MACtE,OAAO1Y,KAAKkrC,WAAW7Y,K,+BAO3B,WAII,OAHuBryB,KAAKE,MAAMuK,QAAO,SAAAiO,GAAC,OAAKA,EAAEoyB,cAG3BlhC,KAAI,SAAA8O,GAAC,OAAI,IAAImyB,GAAoB,CAACnyB,W,KAQ1DmyB,G,WAMF,WAAY9qC,GAAM,qBACdC,KAAKE,MAAQH,E,6CAOjB,WACI,OAAOC,KAAKE,MAAM6qC,OAAM,SAAAryB,GAAC,OAAIA,EAAEoyB,gB,0BAMnC,WACI,OAAO9qC,KAAKE,MAAM2a,MAAK,SAAAnC,GAAC,MAA2B,uBAAvBA,EAAEsyB,sB,2BAMlC,WACI,OAAOhrC,KAAKE,MAAM2a,MAAK,SAAAnC,GAAC,MAA2B,wBAAvBA,EAAEsyB,sB,wBAMlC,WACI,OAAOhrC,KAAKE,MAAM2a,MAAK,SAAAnC,GAAC,MAA2B,yBAAvBA,EAAEsyB,sB,2BAQlC,WACI,OAAOhrC,KAAK+oC,gBAAkB/oC,KAAKmrC,iBAAmBnrC,KAAKorC,e,sBAO/D,WACI,OAAQprC,KAAKoI,YAAcpI,KAAKE,MAAM2a,MAAK,SAAAnC,GAAC,MAAyB,YAArBA,EAAE8Z,qB,sBAOtD,WACI,OAAOxyB,KAAKE,MAAM2a,MAAK,SAAAnC,GAAC,MAAyB,YAArBA,EAAE8Z,qB,sBAOlC,WACI,OAA0B,GAArBxyB,KAAKE,MAAMyH,QAET3H,KAAKE,MAAM6qC,OAAM,SAAAryB,GAAC,MAAyB,YAArBA,EAAE8Z,iBAAsD,WAArB9Z,EAAE8Z,qB,qBAOtE,WACI,OAA0B,GAArBxyB,KAAKE,MAAMyH,QAET3H,KAAKE,MAAM6qC,OAAM,SAAAryB,GAAC,MAAyB,WAArBA,EAAE8Z,uB,KAMxBoY,MC5NFS,GAAb,WAMI,WAAY3oC,EAAOoV,GAAc,qBAC7B9X,KAAKsrC,UAAY,GAEjBtrC,KAAKyoB,OAAS/lB,EAAM,GACpB1C,KAAK0oB,UAAYhmB,EAAM,GACvB1C,KAAKurC,iBAAkB,EACvBvrC,KAAKwrC,aAAe1zB,EAZ5B,2CAsBI,SAAOpV,EAAO+K,EAAKqW,EAAWle,GAC1B,IAAIwqB,EAAU,IAAIqb,GAAczrC,KAAM0C,EAAO+K,EAAKqW,EAAWle,GAE7D,OADA5F,KAAKsrC,UAAUx4B,KAAKsd,GACbA,IAzBf,gBA+BI,WAAY,IAAD,EACP,iBAAOpwB,KAAKyoB,cAAZ,aAAO,EAAaxU,OAhC5B,oBAuCI,WACI,OAAOjU,KAAKsrC,YAxCpB,qBA8CI,WACI,IAAMI,EAAU1rC,KAAKsrC,UAAUvV,QAAO,SAAUxlB,EAAGoL,GAAK,OAAOpL,EAAEo7B,OAAOhwB,EAAEiwB,cAAgB,IAC1F,OAAO,YAAI,IAAIpzB,IAAIkzB,MAhD3B,sBAwDI,WACI,OAAO1rC,KAAKsrC,UAAUP,OAAM,SAAAx6B,GAAC,OAAIA,EAAEoC,gBAzD3C,8BAgEI,WAA0B,IAAD,iBACD3S,KAAKsrC,WADJ,IACrB,2BAAoC,CAAC,IAA5Blb,EAA2B,QAChC,IAAKA,EAAQzd,WACT,OAAOyd,GAHM,8BAKrB,OAAO,OArEf,2BA4EI,WACI,GAA6B,GAAzBpwB,KAAKsrC,UAAU3jC,OACf,OAAO,EAEX,IAJkB,EAIdkkC,EAAa,EACbC,EAAgB,EALF,eAME9rC,KAAKsrC,WANP,IAMlB,2BAAoC,CAAC,IAA5Blb,EAA2B,QAC5BA,EAAQ2b,iBAGZF,IACIzb,EAAQzd,YACRm5B,MAZU,8BAclB,OAAuB,IAAhBA,EAAsBD,IA1FrC,mBAiGI,WAAe,IAAD,EACV,OAAO,IAAI9Z,GAAJ,UAAc/xB,KAAKyoB,cAAnB,aAAc,EAAamM,WAlG1C,uBAwGI,WACI,OAAO50B,KAAKwrC,eAzGpB,+DAgHI,WAAiBv3B,GAAjB,mBAAA1D,EAAA,sEAC2BvQ,KAAKgsC,aAAa/3B,GAD7C,OACQg4B,EADR,sBAGwBjsC,KAAKsrC,WAH7B,IAGI,2BAAoC,QACxBY,mBAJhB,uDAMWD,GANX,gDAhHJ,wHA8HI,WAAmBh4B,GAAnB,eAAA1D,EAAA,sEAC6B7F,IAAQ8L,iBAAiBxW,KAAK8jB,UAAW7P,GADtE,cACUg4B,EADV,OAEIjsC,KAAKyoB,OAAL,2BACOzoB,KAAKyoB,QADZ,IAEImM,QAASqX,EACTh4B,KAAI,OAAEA,QAAF,IAAEA,IAAQ,IAAI8d,GAAUka,GAAYh4B,OAE5CjU,KAAKmsC,eAPT,kBASWF,GATX,gDA9HJ,iFA0II,WACIjsC,KAAK0oB,UAAU1oB,KAAKyoB,UA3I5B,8BAmJI,SAAiB3oB,GACb,IAAMQ,EAAc8L,IAAeC,eAAevM,GAC9CkyB,EAAShyB,KAAK40B,QAAQrmB,IAAIjO,GAC9B,OAAK0xB,GAWLA,EAAOmH,SAAWr5B,EAClBkyB,EAAOgJ,WAAY,EACnBhJ,EAAO5B,QAAUpwB,KACVgyB,GAZI,CACHvyB,YAAaa,EACbwV,KAAM9V,KAAKiU,KACXklB,SAAUr5B,EACVk7B,WAAW,EACX5K,QAASpwB,QA7JzB,2BAuKI,SAAc8D,GAAI,IAAD,EACPkuB,EAAM,UAAGhyB,KAAKyoB,cAAR,aAAG,EAAamM,QAAQl0B,MAAK,SAAA6P,GAAC,OAAIA,EAAE0Q,KAAOnd,KACvD,OAAKkuB,GAELA,EAAOgJ,WAAY,EACnBhJ,EAAO5B,QAAUpwB,KACVgyB,GAHI,OA1KnB,kCAsLI,SAAqBlyB,GAAgC,IAAtBssC,EAAqB,uDAAN,KACpC9rC,EAAc8L,IAAeC,eAAevM,GAC9C80B,EAAU50B,KAAK40B,QAAQK,OAAO30B,GAKlC,IAAK,IAAIwJ,KAJLsiC,IACAxX,EAAUA,EAAQnqB,OAAO2hC,IAGfxX,EAAS,CACnB,IAAI5C,EAAS4C,EAAQ9qB,GACrBkoB,EAAOqa,MAAQviC,EACfkoB,EAAOmH,SAAWr5B,EAClBkyB,EAAOgJ,WAAY,EACnBhJ,EAAO5B,QAAUpwB,KAErB,OAAO40B,MApMf,KA4MM6W,G,WAUF,WAAYa,EAAa5pC,EAAO+K,EAAKqW,EAAWle,GAAQ,qBACpD5F,KAAKusC,aAAeD,EACpBtsC,KAAKyoB,OAAS/lB,EAAM,GAAKA,EAAM,GAAK,CAAEiQ,WAAY,MAClD3S,KAAK0oB,UAAYhmB,EAAM,GACvB1C,KAAKwsC,KAAO/+B,EACZzN,KAAK4rC,WAAa9nB,EAClB9jB,KAAKysC,OAAS7mC,EACd5F,KAAK0sC,sBAAuB,EAE5B1sC,KAAK2sC,OAAS,aACd3sC,KAAK4sC,OAAS,aACd5sC,KAAK6sC,OAAS,a,sDAMlB,WACI,OAAO7sC,KAAK0sC,sB,IAGhB,SAAwBrhC,GACpBrL,KAAK0sC,qBAAuBrhC,I,gBAGhC,WACI,OAAOrL,KAAKusC,aAAat4B,O,iBAG7B,WACI,OAAKjU,KAAKysC,OAEHzsC,KAAKysC,OADD,O,eAIf,WACI,OAAOzsC,KAAKwsC,O,mBAQhB,WACI,OAAOxsC,KAAKusC,aAAa3X,U,2BAO7B,WACI,IADW,EACLkY,EAAe,GADV,eAEU9sC,KAAK4rC,YAFf,IAEX,2BAAqC,CAAC,IAA7B9rC,EAA4B,QACjCgtC,EAAah6B,KAAb,MAAAg6B,EAAY,YAAS9sC,KAAK+sC,qBAAqBjtC,MAHxC,8BAKX,OAAO,IAAIiyB,GAAU+a,K,qBAGzB,WACI,OAAO9sC,KAAK4rC,a,8BAQhB,SAAiB9rC,GACb,OAAOE,KAAKusC,aAAarQ,iBAAiBp8B,K,2BAQ9C,SAAcgE,GACV,OAAO9D,KAAKusC,aAAaS,cAAclpC,K,kCAQ3C,SAAqBhE,GAAgC,IAAtBssC,EAAqB,uDAAN,KAC1C,OAAOpsC,KAAKusC,aAAaQ,qBAAqBjtC,EAAUssC,K,sEAU5D,WAAwBrsC,EAAMgQ,EAAUk9B,GAAxC,SAAA18B,EAAA,sEACUvQ,KAAKktC,cAAcntC,EAAMgQ,GAAU,EAAMk9B,GADnD,gD,2HAUA,WAAkBltC,EAAMgQ,GAAxB,SAAAQ,EAAA,sEACiBvQ,KAAKktC,cAAcntC,EAAMgQ,GAAU,GADpD,wF,2HAWA,WAAoBhQ,EAAMgQ,EAAUo9B,EAA0BF,GAA9D,qBAAA18B,EAAA,mEAGY48B,EAHZ,gCAImCziC,IAAQ8wB,WAAWz7B,EAAM,GAAIktC,GAJhE,OAIgBG,EAJhB,OAKYjkB,EAAU,IAAImhB,GAAmB8C,GAL7C,wCAQ4BptC,KAAKqtC,YAAYttC,GAR7C,QAQYopB,EARZ,sBAUYmkB,EAVZ,0BAUsCttC,KAAK4F,aAV3C,QAUoD,GAVpD,0BAWYujB,EAAQokB,kBACRD,GAAkB,sPAZ9B,UAecttC,KAAKksC,mBAfnB,eAgBQn8B,EACI3N,aAAK,CACD0K,QAASwgC,EACTv8B,SAAU,aAnB1B,kBAuBeoY,GAvBf,yCA0BQpd,QAAQuC,MAAR,MACAyB,EACI3N,aAAK,CACD0K,QAAS,KAAGA,QACZiE,SAAU,aA9B1B,kBAiCe,MAjCf,0D,+EA0CA,WAAQ,IAAD,OACH/Q,KAAKyoB,OAAL,2BAAmBzoB,KAAKyoB,QAAxB,IAAgC2P,YAAY,IAC5Cp4B,KAAKmsC,eACL,sBAAC,4BAAA57B,EAAA,sEAGS7F,IAAQ8iC,iCAHjB,uBAI4B9iC,IAAQ8L,iBAAiB,EAAK+1B,aAAazoB,UAAW,EAAK7P,MAJvF,OAISg4B,EAJT,OAMG,EAAKM,aAAa9jB,OAAlB,2BAAgC,EAAK8jB,aAAa9jB,QAAlD,IAA0DmM,QAASqX,IACnE,EAAKM,aAAaJ,eAClB,EAAKS,SACL,EAAKV,mBATR,0CAAD,K,kBAgBJ,WACIlsC,KAAKyoB,OAAL,2BAAmBzoB,KAAKyoB,QAAxB,IAAgC2P,YAAY,IAC5Cp4B,KAAKmsC,eACLnsC,KAAK2sC,W,kBAMT,WACI3sC,KAAKyoB,OAAL,2BAAmBzoB,KAAKyoB,QAAxB,IAAgC2P,YAAY,IAC5Cp4B,KAAKmsC,eACLnsC,KAAK6sC,W,sBAMT,WACI,OAAkC,IAA3B7sC,KAAKyoB,OAAO2P,a,sBAMvB,WACI,OAAOp4B,KAAKyoB,OAAO9V,a,2BAOvB,WACI,OAAI3S,KAAKyoB,OAAO9V,WACL,WAEA,e,+BAQf,WACI,OAAkC,OAA3B3S,KAAKyoB,OAAO9V,a,2BAMvB,WACI,OAAO3S,KAAKusC,aAAa3X,QAAQ1e,Y,wBAOrC,WACI,IAAMw1B,EAAU1rC,KAAK4rC,WAAWhiC,KAAI,SAAC9J,GAAD,OAAcsM,IAAeC,eAAevM,MAChF,OAAO,YAAI,IAAI0Y,IAAIkzB,M,0BAMvB,WACI,OAAO1rC,KAAKurC,iB,IAMhB,SAAmBlgC,GACfrL,KAAKurC,gBAAkBlgC,I,uBAG3B,WACI,OAAOrL,KAAKusC,aAAaf,e,sBAK7B,WACI,OAAO,IAAIZ,GAAe5qC,KAAKyoB,OAAOglB,oB,qEAI1C,kCAAAl9B,EAAA,yDACUxQ,EAAO,CACT,aAAgBC,KAAKqyB,aACrB,KAAQryB,KAAKiU,OAGby5B,EAAqB1tC,KAAK8X,eAE1B/X,EAAKwY,aAAem1B,IAGpB1tC,KAAK2tC,oBAXb,iCAYuCn9B,IAAUjC,IAAI,qBAAsBxO,GAZ3E,OAYc0tC,EAZd,OAaQztC,KAAKyoB,OAAL,2BACOzoB,KAAKyoB,QADZ,IAEI9V,WAAY86B,EAAiB1C,OAAM,SAAApqC,GAAC,OAAqB,IAAjBA,EAAEmqC,cAC1C2C,iBAAmBA,IAhB/B,yCAoBiCj9B,IAAUjC,IAAI,qBAAsBxO,GApBrE,QAoBc4S,EApBd,OAqBQ3S,KAAKyoB,OAAL,2BACOzoB,KAAKyoB,QADZ,IAEI9V,WAAYA,EACZ86B,iBAAmB,OAxB/B,QA4BIztC,KAAKmsC,eA5BT,iD,gFAqCA,SAAa7rC,GAA2B,IAAdypC,EAAa,uDAAH,EAC5B/X,EAASiX,GAAU2E,aAAattC,EAAaypC,GAEjD,OADA/X,EAAO9xB,MAAM4V,KAAO9V,KAAKiU,KAClB+d,I,gEASX,WAAkBjyB,GAAlB,UAMa8tC,EA+BAC,EArCb,gDAAAv9B,EAAA,sDAqCau9B,EArCb,SAqC4Bv+B,GACpB,IAAKA,EACD,MAAMhD,MAAM,oDAGhB,OADAgD,EAAMA,EAAIhP,eAEN,IAAK,UACD,MAAO,gBACX,IAAK,mBACD,MAAO,gBACX,IAAK,aACD,MAAO,kBACX,QACI,OAAO,OA5CVstC,EANb,SAM8BvtC,GAUtB,IAAIwjB,EARJ,WACI,IAAIiqB,EAAiBvtC,OAAOy2B,QAAQz3B,KAAoBiL,QAAO,SAAAjG,GAAC,OAAIA,EAAE,GAAG/E,YAAYc,gBAAkBD,EAAYC,iBAAeqJ,KAAI,SAAApF,GAAC,OAAIA,EAAE,MAC7I,OAA8B,IAA1BupC,EAAepmC,OACR,CAACrH,GAEDytC,EAGCC,GAChB,GAAyB,IAArBlqB,EAAUnc,OAAa,CACvB,IAAIsmC,EAAYluC,EAAK+jB,EAAU,IAI/B,OAHIna,MAAMkgC,QAAQoE,KACdA,EAAYA,EAAUxjC,QAAO,SAAAiO,GAAC,OAAU,OAANA,QAAoB1J,IAAN0J,MAE7Cu1B,EAIX,IApBkC,EAoB5BC,EAAe,GApBa,eAqBbpqB,GArBa,IAqBlC,2BAA+B,CAAC,IAAvBhkB,EAAsB,QACvBypC,EAAYxpC,EAAKD,GACjBypC,GACA2E,EAAap7B,KAAb,MAAAo7B,EAAY,YAAS3E,KAxBK,8BA2BlC,OADoB2E,EAAazjC,QAAO,SAAAiO,GAAC,OAAU,OAANA,QAAoB1J,IAAN0J,MA9BzDy1B,EAAkB,GAClBC,EAAkB,GAClBC,EAAoB,GAkDpBzZ,EAAW50B,KAAKusC,aAAa3X,QAAQA,QAAQhrB,KAAI,SAAA2G,GAAC,OAAI,IAAI04B,GAAU14B,MAtD9E,eAyDuBqkB,GAzDvB,0BAyDa5C,EAzDb,QA4DQ,GAAIA,EAAOsc,WAAa,EAAKjc,aAAazoB,KAAI,SAAA8O,GAAC,OAAIA,EAAEnY,iBAAeqL,SAASomB,EAAO1xB,YAAYC,eAE5F,OADA4tC,EAAgBr7B,KAAKkf,EAAOf,KAC5B,WAGAsd,EAAcT,EAAe9b,EAAO1xB,aACpCipC,EAAYsE,EAAiB7b,EAAO1xB,aACxC0xB,EAAOwc,gBAAgBjF,GAEnBgF,GAAevc,EAAOyc,UACtBJ,EAAkBv7B,KAAK,sBAAC,4BAAAvC,EAAA,sEACDC,IAAUgP,OAAO,UAAWwS,EAAO0c,YADlC,cAChBh+B,EADgB,yBAGb,CAACA,IAHY,0CAAD,KAOvB09B,EAAgBt7B,KAAKkf,EAAO2c,WAC5BR,EAAgBr7B,KAAKkf,EAAOf,OA9ExC,qQAkFQmd,EAAgBzmC,OAAS,GACzB0mC,EAAkBv7B,KAAKtC,IAAUo+B,IAAI,UAAWR,IAnFxD,eAsF4BpuC,KAAKqyB,cAtFjC,8DAsFa/xB,EAtFb,QAuFYiuC,EAAcT,EAAextC,GAvFzC,wDA8FQ,GAHIipC,EAAYsE,EAAiBvtC,GAC7BuuC,EA5FZ,UA4F8BtF,SA5F9B,aA4F8B,EAAW9+B,QAAO,SAAAiO,GAAC,OAAKkc,EAAQ/Z,MAAK,SAAAtK,GAAC,OAAIA,EAAEw5B,SAAWrxB,EAAEuI,SAE3D,CAAC,EAAD,aACE4tB,GADF,IAChB,2BAASle,EAA0B,SAC3BqB,EAAShyB,KAAK8uC,aAAaxuC,EAAaqwB,EAAM1P,KAC3CutB,gBAAgBjF,GACvB8E,EAAkBv7B,KAAK,sBAAC,4BAAAvC,EAAA,sEACCC,IAAU4d,KAAKmgB,EAAavc,EAAO2c,WADpC,cACdj+B,EADc,OAEpBshB,EAAOluB,GAAK4M,EAAOuQ,GACnBktB,EAAgBr7B,KAAKkf,EAAOf,KAHR,kBAIb,CAACvgB,IAJY,0CAAD,IAJX,+BA9F5B,kKA8G+BkI,QAAQC,IAAIw1B,GA9G3C,eA8GUU,EA9GV,OAgHI/uC,KAAKusC,aAAa9jB,OAAlB,2BACOzoB,KAAKusC,aAAa9jB,QADzB,IAEImM,QAASuZ,IAEbnuC,KAAKusC,aAAaJ,eApHtB,kBAsHW,IAAI7B,GAAmByE,IAtHlC,8E,iFA0HA,WACI/uC,KAAK0oB,UAAU1oB,KAAKyoB,Y,KAMb4iB,MC5pBA,eAAgB,IAAdjb,EAAa,EAAbA,QACb,OAAIA,EAAQ4e,oBACA,cAACn1B,GAAA,EAAD,CAASo1B,KAAK,SACtB7e,EAAQzd,WACA,cAAC,KAAD,CAAaW,GAAI,CAAElP,MAAO,aAE9B,cAAC,KAAD,CAAakP,GAAI,CAAElP,MAAO,cCmBtC,SAAS8qC,GAAT,GAAoD,IAA3BhhC,EAA0B,EAA1BA,SAAUihC,EAAgB,EAAhBA,KAAS/nC,EAAO,mCAE/C,OAAI8G,EACO,8CAAMA,SAAS,YAAe9G,GAA9B,aAAsC+nC,KAGtC,6CAAO/nC,GAAP,aAAe+nC,KAwvBfC,OAhvBf,WAAoB,IAAD,YAETjlC,EAAY1H,aAAY,SAACC,GAAD,OAAWA,EAAMwE,QAEzCgV,EADWC,wBACOC,KACxBvZ,qBAAU,WACN,GAAIqZ,EAAQ,CACR,IAAMmzB,EAAU1qC,SAAS2qC,cAAcpzB,GACnCmzB,GACAA,EAAQE,eAAe,CAAEC,SAAU,cAG5C,CAACtzB,IAZW,MAgBWta,mBAAS,IAhBpB,mBAgBRi9B,EAhBQ,KAgBDC,EAhBC,KAkBT2Q,EAAe,IAAIpE,GAAkBzpC,sBAErC8tC,EAAiB9tC,mBAAS,MAC1B+tC,EAAYF,EAAaG,OAAOF,EAAgBG,iBAAO,MAAO,CAChE/iD,IAAOC,WACPD,IAAOE,UACPF,IAAOG,gBACPH,IAAOI,UACPJ,IAAO6G,YACP7G,IAAOS,aACPT,IAAOU,eACPV,IAAOa,mBACPb,IAAOc,cACPd,IAAOW,iBACPX,IAAOY,mBACPZ,IAAOe,WACPf,IAAOwG,iBACPxG,IAAOyG,eACPzG,IAAO0G,kBACP1G,IAAO2G,gBACP3G,IAAOoD,mBAGL4/C,EAAmBluC,mBAAS,MAC5BmuC,EAAcN,EAAaG,OAAOE,EAAkBD,iBAAO,MAAO,CACpE/iD,IAAOK,WACPL,IAAOQ,gBACPR,IAAOO,kBACPP,IAAOmD,gBACPnD,IAAOyD,gBACPzD,IAAO0D,wBACP1D,IAAO2D,4BAGLu/C,EAAiBpuC,mBAAS,MAC1BquC,EAAYR,EAAaG,OAAOI,EAAgBH,iBAAO,MAAO,CAChE/iD,IAAOwC,IACPxC,IAAOsD,SACPtD,IAAOgC,qBACPhC,IAAOiC,iBACPjC,IAAOkC,iBACPlC,IAAOmC,uBACPnC,IAAOoC,iBACPpC,IAAOqC,cACPrC,IAAOsC,iBACPtC,IAAOmG,qBACPnG,IAAO6K,uBACP7K,IAAO2K,yBACP3K,IAAO4K,4BACP5K,IAAO6C,YACP7C,IAAOyC,iBACPzC,IAAO0C,gBACP1C,IAAO8C,qBACP9C,IAAOuC,kBACPvC,IAAO4K,8BAGLw4C,EAAkBtuC,mBAAS,MAC3BkyB,EAAa2b,EAAaG,OAAOM,EAAiBL,iBAAO,MAAO,CAClE/iD,IAAOkB,eACPlB,IAAOmB,gBACPnB,IAAOoB,aACPpB,IAAOqB,yBACPrB,IAAOsB,yBACPtB,IAAOwB,2BACPxB,IAAOuB,mCACPvB,IAAOyB,2BACPzB,IAAO0B,yCACP1B,IAAO4B,eACP5B,IAAO6B,IACP7B,IAAO8B,IACP9B,IAAO+B,qBACP/B,IAAO2B,kBACP3B,IAAOgH,WACPhH,IAAO+G,gBACP/G,IAAOgB,UACPhB,IAAOiB,sBACR,eACH+lC,EAAW6Z,qBAAsB,EAEjC,IAlGe,EAkGTwC,EAAmBvuC,mBAAS,MAC5BwuC,EAAcX,EAAaG,OAAOO,EAAkBN,iBAAO,MAAO,CACpE/iD,IAAOgD,cACPhD,IAAOkD,kBACPlD,IAAOiD,oBAtGI,EA0GmB6R,mBAAS,MA1G5B,mBA0GRyuC,EA1GQ,KA0GGC,EA1GH,KA2GTC,EAAiBV,iBAAO,MA3Gf,eA6GKJ,EAAae,UA7GlB,IA6Gf,2BAA2C,CAAC,IAAnCpgB,EAAkC,QACvCA,EAAQwc,OAAS,kBAAM0D,EAAa,SACpClgB,EAAQuc,OAAS,kBAAM2D,EAAa,UA/GzB,gCAkHfztC,qBAAU,WAEN,GAAiB,QAAbwtC,EACAC,EAAa,cAEZ,GAAiB,SAAbD,EAAsB,CAIR,MADDZ,EAAagB,mBAE3BF,EAAeG,QAAQnB,iBAEvBE,EAAagB,mBAAmBhjC,IAAIijC,QAAQnB,iBAGhDe,EAAa,SAElB,CAACD,EAAWX,EAAgBI,EAAkBE,EAAgBE,EAAiBC,IAElF,IAAM7rC,EAAoBmrC,EAAa98B,WAKvC9P,oBAAS,sBAAC,gCAAA0N,EAAA,sEAEgCqI,QAAQC,IAAI,CAC9ClW,IAAK08B,eACLoQ,EAAakB,eAJX,mCAECvR,EAFD,UAMNN,EAASM,GANH,2CAOP,IAjJY,MAmJ6Cx9B,mBAAS,MAnJtD,mBAmJRgvC,EAnJQ,KAmJgBC,EAnJhB,OAoJqDjvC,mBAAS,MApJ9D,mBAoJRkvC,EApJQ,KAoJoBC,EApJpB,KAqJTC,EAAiB,IAAI78B,GAAuB28B,EAA4BF,GAE9E/tC,qBAAU,WACN,sBAAC,kCAAA0N,EAAA,sEAC2BC,IAAUmI,WAAW,OADhD,cACOtE,EADP,OAGO48B,EAHP,UAGoB,IAAI18B,KAAYF,GAAa68B,oBAHjD,aAGoB,EAA2Cj9B,KAH/D,SAI8BzD,IAAUgO,eAAe,MAAOyyB,GAJ9D,OAIOD,EAJP,OAMGH,EAA0Bx8B,GAC1B08B,EAA8BC,GAPjC,0CAAD,KAUD,IAGH,IAAMziC,EAAM,SAACzO,GAAD,uBAAcqK,EAAUkP,OAAOvZ,UAA/B,aAAc,EAA4BuL,OAchD+Y,GAAa,SAACtkB,GAAc,IAAD,gBAc7B,MAAO,CAAE2iB,QAbM,UAAAtY,EAAUkP,OAAOvZ,UAAjB,eAA4BmjB,QAAQ5X,OAApC,UACTlB,EAAUkP,OAAOvZ,UADR,aACT,EAA4BmjB,QAAQ5X,MACpC,GAWW+U,MAVJ,UAAAjW,EAAUkP,OAAOvZ,UAAjB,eAA4BojB,OAAO7X,OAAnC,UACPlB,EAAUkP,OAAOvZ,UADV,aACP,EAA4BojB,OAAO7X,MACnC,GAQiBmV,QAPR,UAAArW,EAAUkP,OAAOvZ,UAAjB,eAA4BqkB,SAAS9Y,OAArC,UACTlB,EAAUkP,OAAOvZ,UADR,aACT,EAA4BqkB,SAAS9Y,MACrC,GAKyBqX,KAJnB,UAAAvY,EAAUkP,OAAOvZ,UAAjB,eAA4BqjB,IAAI9X,OAAhC,UACNlB,EAAUkP,OAAOvZ,UADX,aACN,EAA4BqjB,IAAI9X,MAChC,KAKJ+jB,GAAgB,SAACtvB,GAAc,IAAD,IAChC,iBAAOqK,EAAUkP,OAAOvZ,UAAxB,iBAAO,EAA4BqvB,kBAAnC,aAAO,EAAwC9jB,OAInD,OACI,cAAC,EAAD,UACI,sBAAK3S,KAAK,cAAV,UACI,qBAAKqM,UAAU,aAAf,SACI,qBAAKA,UAAU,UAAf,SACI,sBAAKA,UAAU,qBAAf,UACI,qBAAKA,UAAU,mBAAf,SACI,qBAAKG,IAAI,eAAeO,IAAI,cAEhC,qBAAKV,UAAU,6BAAf,SACI,qBAAIA,UAAU,sBAAd,sBAA6C,cAACosC,GAAD,gBAO7D,sBAAKpsC,UAAU,sBAAf,UACI,qBAAK0I,IAAKkiC,EAAUliC,IAApB,SACMkiC,EAAUvX,WAmFR,cAAC,GAAD,CACIhI,QAASuf,EACTpiC,SAAU,kBAAMoiC,EAAUyB,QAC1BhW,SAAU,kBAAMuU,EAAU0B,UArF9B,cAAClZ,GAAD,CACIvyB,MAAK,oBACLqL,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAASuf,IACnCvX,YAAY,EACZC,YAAa,kBAAMsX,EAAU4B,QAJjC,SAMI,sBAAKxsC,UAAU,uBAAf,UACI,cAAC,GAAD,CACIrM,KAAK,OACL2S,MAAOkD,EAAIzhB,IAAOC,YAAc,IAAMwhB,EAAIzhB,IAAOE,aAErD,cAAC,GAAD,CACI0L,KAAM0H,YAAStT,IAAO6G,aAAagsB,SACnCtU,MApEnB,SAACvL,GACd,IAAMmvB,EAAc9kB,EAAUkP,OAAOvZ,GACjC2hB,EAAS,GACb,IAAK,IAAM3X,KAAKmlB,EACZxN,GACIwN,EAAYnlB,GAAG6Y,UAAUtX,MACzB,IACA4jB,EAAYnlB,GAAG8Y,SAASvX,MACxB,KAER,OAAOoW,EA0DgCyN,CAASpiC,IAAO6G,eAE3B,cAAC,GAAD,CAAe+E,KAAK,YAAY2S,MAAOkD,EAAIzhB,IAAOI,aAElD,sBAAK87C,WAAS,EAACjkC,UAAU,gBAAzB,UACI,qBAAKA,UAAU,uBAAf,6BACA,cAAC,GAAD,CACIrM,KAAK,SACL2S,QACkC,IAA7BkD,EAAIzhB,IAAOS,cAAyB,SAAW,MAChB,IAA/BghB,EAAIzhB,IAAOU,gBACN,WACA,MAC4B,IAAjC+gB,EAAIzhB,IAAOW,kBACN,yBACA,MAC8B,IAAnC8gB,EAAIzhB,IAAOY,oBACN,6BACA,MAC8B,IAAnC6gB,EAAIzhB,IAAOa,oBACN,iDACA,MACyB,IAA9B4gB,EAAIzhB,IAAOc,eACN,qBACA,SAKlB,sBAAKmX,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,sBACA,cAAC,GAAD,CACIrM,KAAK,WACL2S,QACoC,IAA/BkD,EAAIzhB,IAAOyG,gBACN,eACA,MAC4B,IAAjCgb,EAAIzhB,IAAOwG,kBACN,iBACA,MAC6B,IAAlCib,EAAIzhB,IAAO0G,mBACN,oBACA,KAC2B,OAAhC+a,EAAIzhB,IAAO2G,iBACN,UAAY8a,EAAIzhB,IAAO2G,iBAAmB,KAC1C,SAKlB,sBAAKsR,UAAU,mCAAf,UACI,qBAAKA,UAAU,uBAAf,oCAGA,8BACI,cAAC,GAAD,CACIoI,eAAe,EACfzU,KAAK,kBACL2S,QACqC,SAAjCkD,EAAIzhB,IAAOoD,oBAAgCqe,EAAIzhB,IAAOoD,mBAE1Dge,UAAQ,EACR1B,MAAM,4DAgBlC,qBAAKiB,IAAKsiC,EAAYtiC,IAAK3J,GAAG,eAA9B,SACMisC,EAAY3X,WAuEV,cAAC,GAAD,CACIhI,QAAS2f,EACTxiC,SAAU,kBAAMwiC,EAAYqB,QAC5BhW,SAAU,kBAAM2U,EAAYsB,UAzEhC,cAAClZ,GAAD,CACIvyB,MAAM,sBACNqL,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAAS2f,IACnC3X,YAAY,EACZC,YAAa,kBAAM0X,EAAYwB,QAJnC,SAMI,sBAAK74C,KAAK,kBAAV,UACI,sBAAKqM,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,mBACA,cAAC,GAAD,CAAUrM,KAAK,QAAQ2S,MAAOwzB,OAGlC,sBAAK95B,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,0BACA,cAAC,GAAD,CACIrM,KAAK,cACL2S,OACKkD,EAAIzhB,IAAOQ,iBACNihB,EAAIzhB,IAAOQ,iBAAmB,cAC9B,KACLihB,EAAIzhB,IAAOK,YACNohB,EAAIzhB,IAAOK,YAAc,YACzB,SAKlB,sBAAK4X,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,+BACA,cAAC,GAAD,CACIrM,KAAK,mBACL2S,MACI,cAAC,GAAD,CACI8W,WAAW,EACXP,QAASwC,GAAWt3B,IAAOO,0BAM3C,sBAAK0X,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,6BACCqf,GAAWt3B,IAAOmD,kBACf,cAAC,GAAD,CACIyI,KAAK,iBACL2S,MACI,cAAC,GAAD,CACI8W,WAAW,EACXP,QAASwC,GAAWt3B,IAAOmD,wBAO/C,sBAAK8U,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,iCACA,cAAC,GAAD,CACIrM,KAAK,kBACL2S,MACI,cAAC,GAAD,CACI+W,WAAW,EACXN,QAAsD,OAA7C3X,EAAUkP,OAAOvsB,IAAOyD,iBAA4B4Z,EAAUkP,OAAOvsB,IAAOyD,iBAAmB,iBAiBxI,qBAAKkd,IAAKwiC,EAAUxiC,IAApB,SACMwiC,EAAU7X,WAmMR,cAAC,GAAD,CACIhI,QAAS6f,EACT1iC,SAAU,kBAAM0iC,EAAUmB,QAC1BhW,SAAU,kBAAM6U,EAAUoB,UArM9B,cAAClZ,GAAD,CACIvyB,MAAM,WACNqL,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAAS6f,IACnC7X,YAAY,EACZC,YAAa,kBAAM4X,EAAUsB,QAJjC,SAMI,sBAAK74C,KAAK,gBAAV,UACI,sBAAKqM,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,oCACA,cAAC,GAAD,CACIrM,KAAK,MACL2S,MAAOkD,EAAIzhB,IAAOwC,KAAO,YAAc,QAI/C,sBAAKyV,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,6CACA,cAAC,GAAD,CACIrM,KAAK,WACL2S,MAC6B,WAAzBkD,EAAIzhB,IAAOsD,UACL,MACyB,cAAzBme,EAAIzhB,IAAOsD,UACP,KACA,yBAKtB,sBAAK2U,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,uCACA,cAAC,GAAD,CACIrM,KAAK,YACL2S,QAC0C,IAArCkD,EAAIzhB,IAAOgC,sBACN,qCACA,MAC4B,IAAjCyf,EAAIzhB,IAAOiC,kBACN,UACA,MAC4B,IAAjCwf,EAAIzhB,IAAOkC,kBACN,8BACA,MACkC,IAAvCuf,EAAIzhB,IAAOmC,wBACN,wCACA,MAC4B,IAAjCsf,EAAIzhB,IAAOoC,kBACN,UACA,MACyB,IAA9Bqf,EAAIzhB,IAAOqC,eACN,sBACA,SAMlB,sBAAK4V,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,4BACA,cAAC,GAAD,CACIrM,KAAK,gBACL2S,MACqC,SAAjCkD,EAAIzhB,IAAOyC,oBAC0B,IAAjCgf,EAAIzhB,IAAOyC,kBACT,mBACiC,UAAjCgf,EAAIzhB,IAAOyC,oBACwB,IAAjCgf,EAAIzhB,IAAOyC,kBACT,sBACA,QAKtB,sBAAKwV,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,iEAGA,cAAC,GAAD,CACIrM,KAAK,WACL2S,MACoC,SAAhCkD,EAAIzhB,IAAO0C,mBACyB,IAAhC+e,EAAIzhB,IAAO0C,iBACT,MACgC,UAAhC+e,EAAIzhB,IAAO0C,mBACuB,IAAhC+e,EAAIzhB,IAAO0C,iBACT,KACA,QAKtB,sBAAKuV,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,wCAGA,cAAC,GAAD,CACIrM,KAAK,WACL2S,MAC2C,SAAvCkD,EAAIzhB,IAAO6K,0BACgC,IAAvC4W,EAAIzhB,IAAO6K,wBACT,MACuC,UAAvC4W,EAAIzhB,IAAO6K,0BAC8B,IAAvC4W,EAAIzhB,IAAO6K,wBACT,KACA,QAKtB,sBAAKoN,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,mCACA,cAAC,GAAD,CACIrM,KAAK,QACL2S,MACiD,IAA7CwyB,OAAOtvB,EAAIzhB,IAAOmG,uBAA+B,+BAC7C4qC,OAAOtvB,EAAIzhB,IAAOmG,uBAAyB,EAAI,2BAC3C,8BAKpB,sBAAK8R,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,kEAGA,cAAC,GAAD,CACIrM,KAAK,WACL2S,MAC6C,SAAzCkD,EAAIzhB,IAAO2K,4BACkC,IAAzC8W,EAAIzhB,IAAO2K,0BACT,MACyC,UAAzC8W,EAAIzhB,IAAO2K,4BACgC,IAAzC8W,EAAIzhB,IAAO2K,0BACT,KACA,QAKtB,sBAAKsN,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,oOAGA,cAAC,GAAD,CACIrM,KAAK,WACL2S,MACgD,SAA5CkD,EAAIzhB,IAAO4K,+BACqC,IAA5C6W,EAAIzhB,IAAO4K,6BACT,MAC4C,UAA5C6W,EAAIzhB,IAAO4K,+BACmC,IAA5C6W,EAAIzhB,IAAO4K,6BACT,KACA,QAKtB,sBAAKsxC,WAAS,EAACjkC,UAAU,gBAAzB,UACI,qBAAKA,UAAU,uBAAf,0GAGA,cAAC,GAAD,CACIrM,KAAK,eACL2S,MACgC,SAA5BkD,EAAIzhB,IAAO6C,eACqB,IAA5B4e,EAAIzhB,IAAO6C,aACT,MAC4B,UAA5B4e,EAAIzhB,IAAO6C,eACmB,IAA5B4e,EAAIzhB,IAAO6C,aACT,KACA,QAItB,sBAAKq5C,WAAS,EAACjkC,UAAU,gBAAzB,UACI,qBAAKA,UAAU,uBAAf,mHAGA,cAAC,GAAD,CACIrM,KAAK,sBACL2S,MACyC,SAArCkD,EAAIzhB,IAAO8C,wBAC8B,IAArC2e,EAAIzhB,IAAO8C,sBACT,MACqC,UAArC2e,EAAIzhB,IAAO8C,wBAC4B,IAArC2e,EAAIzhB,IAAO8C,sBACT,KACA,eA5W1C,IA2XI,qBAAK6d,IAAKqmB,EAAWrmB,IAArB,SACMqmB,EAAWsE,WA2DT,cAAC,GAAD,CACIhI,QAAS0D,EACTuT,kBAAkB,EAClB95B,SAAU,kBAAMumB,EAAWsd,QAC3BhW,SAAU,kBAAMtH,EAAWud,UA9D/B,cAAClZ,GAAD,CACIvyB,MAAM,0BACNqL,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAAS0D,IACnCsE,YAAY,EACZC,YAAa,kBAAMvE,EAAWyd,QAJlC,SAMI,sBAAK74C,KAAK,qBAAV,UACI,sBAAKqM,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,+CAGA,cAAC,GAAD,CACIrM,KAAK,iBACL2S,MACI,cAAC,GAAD,CACI2U,SAAS,SACTtL,KAAMnG,EAAIzhB,IAAO+G,iBACb0a,EAAIzhB,IAAO+G,iBACX,sCAOpB,sBAAKkR,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,yBACA,cAAC,GAAD,CACIrM,KAAK,aACL2S,MACI+jB,GAActiC,IAAOgH,YACjB,cAAC,GAAD,CACIkuB,MAAM,EACNtN,KAAM0a,GAActiC,IAAOgH,eAE/B,UAAAqW,EAAUkP,OAAOvsB,IAAOgH,mBAAxB,mBAAqC88B,oBAArC,eAAmDvlB,OAAnD,UACIlB,EAAUkP,OAAOvsB,IAAOgH,mBAD5B,iBACI,EAAqC88B,oBADzC,aACI,EAAmDvlB,MACnD,2CAKpB,sBAAKtG,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,0DAGA,cAAC,GAAD,CACIrM,KAAK,kBACL2S,MAAOkD,EAAIzhB,IAAO+B,sBACdigB,KAAOP,EAAIzhB,IAAO+B,uBAAuBqgB,OAAO,WAChD,sDAiB5B,qBAAKzB,IAAK2iC,EAAY3iC,IAAtB,SACM2iC,EAAYhY,WA6DV,cAAC,GAAD,CACIhI,QAASggB,EACT7iC,SAAU,kBAAM6iC,EAAYgB,QAC5BhW,SAAU,kBAAMgV,EAAYiB,UA/DhC,eAAClZ,GAAD,CACIvyB,MAAM,kCACNqL,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAASggB,IACnChY,YAAY,EACZC,YAAa,kBAAM+X,EAAYmB,QAJnC,UAOI,sBAAKxsC,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,kEAGA,cAAC,GAAD,CACIrM,KAAK,uBACL2S,MACI,cAAC,GAAD,CACI2U,SAAS,WACTtL,KAAMnG,EAAIzhB,IAAOgD,sBAMjC,sBAAKiV,UAAU,0BAAf,UACI,sBAAKA,UAAU,uBAAf,0BAAmD,sBAAMuD,MAAO,CAAElE,MAAO,OAAtB,kBACnD,qBAAKW,UAAU,gCAAf,SACI,sBAAKA,UAAU,SAAf,UACI,cAAC,GAAD,CAAUsG,MAAO60B,YAAcpzC,IAAOkD,mBAAoBke,UAAU,EAAOrB,UAAU,EAAML,MAAM,gKAG/B,QAAjE,UAAA4jC,EAAYlU,iBAAiBpvC,IAAOgD,sBAApC,eAAoDqjC,WACmB,IAApE,UAAAid,EAAYlU,iBAAiBpvC,IAAOkD,0BAApC,eAAwDmjC,WACxD,cAACpX,GAAA,EAAD,CAAOhL,SAAS,UAAhB,mRAOJ,qBAAIhM,UAAU,uBAAd,UACI,oBAAIA,UAAU,KAAd,wJACA,oBAAIA,UAAU,KAAd,yNACA,oBAAIA,UAAU,KAAd,wJACA,oBAAIA,UAAU,KAAd,uQACA,oBAAIA,UAAU,KAAd,qwBACA,oBAAIA,UAAU,KAAd,iZAOhB,sBAAKA,UAAU,0BAAf,UACI,sBAAKA,UAAU,uBAAf,+BAAwD,uBAAxD,gBACA,qBAAKA,UAAU,gCAAf,SACI,cAAC,GAAD,CAAUsG,MAAO60B,YAAcpzC,IAAOiD,mBAAoBme,UAAU,EAAO1B,MAAM,wMAxfzG,IAsgBI,qBAAKzH,UAAU,YAAY0I,IAAK8iC,EAAhC,SACI,sBAAKxrC,UAAU,yCAAf,UACI,cAACmqC,GAAD,CAAgBlqC,KAAK,aAAaD,UAAU,SAASmJ,UAAW5J,EAAmB6qC,KAAK,uBACxF,cAACD,GAAD,CAAgBlqC,KAAI,uCAAkCgsC,EAAe/8B,MAAQlP,UAAU,SACnFmJ,WAAY5J,IAAsB0sC,EAAe/7B,aAAe+7B,EAAer3B,eAAgBw1B,KAAK,8BACtG7qC,GACE,4HCpkBjBktC,OA/Lf,WAEE,IAAMv/B,EAAUjL,uBACV+I,EAAWC,cACXC,EAAUC,YAAQ,CACtBlF,KAAM,WALc,EAQQpJ,oBAAS,GARjB,mBAQL6vC,GARK,WAUgBxmC,GAAkCgF,EAAhE7B,OAAgE6B,EAAxD9F,UAAwD8F,EAA7C/E,UAA6C+E,EAAlChF,UAAUkF,EAAwBF,EAAxBE,aAAckrB,EAAUprB,EAAVorB,MAVxC,EAWcz5B,mBAAS,MAXvB,mBAWf8vC,EAXe,KAWHC,EAXG,KAahBrhC,EAAQ,uCAAG,WAAOvQ,EAAMyE,GAAb,eAAA+L,EAAA,sEAGXkhC,GAAU,GAENG,EAAiB,CAAC,GAAD,OAChB9kD,IAAOE,UADS,sBAEhBF,IAAOI,UAFS,sBAGhBJ,IAAOwC,IAHS,aAQI,KAArByQ,EAAKjT,IAAOwC,MAAoC,OAArByQ,EAAKjT,IAAOwC,MACvCsiD,EAAe9+B,KAAKhmB,IAAOwC,KAdpB,SAgBLob,IAAQ8wB,WAAWz7B,EAAM,GAAI6xC,EAAgBF,GAhBxC,OAiBXz/B,EAAQa,KAAK,YAjBF,gDAmBX/C,EAAS3N,aAAK,CACZ0K,QAAS,KAAEA,QACXiE,SAAU,aAEZhF,QAAQuC,MAAM,CAAE9J,EAAC,OAvBN,yBAyBXitC,GAAU,GAzBC,4EAAH,wDA6BRhW,EAAU,SAACwB,GACfltB,EAAS3N,aAAK,CACZ0K,QAAS,6EACTiE,SAAU,YAIRuqB,EAAgBD,EAAMvuC,IAAOE,WAAW,GACxCuuC,EAAgBF,EAAMvuC,IAAOI,WAAW,GACxCu1C,EAAWpH,EAAMvuC,IAAOwC,KACxBuiD,EAAaxW,EAAM,SACnByW,EAAgBzW,EAAM,YAK5Bx4B,qBAAU,YACW,IAAfgvC,GAEE5mC,EAAS,YAAY,KAG1B,CAAC4mC,IAEJhvC,qBAAU,YACc,IAAlBivC,GAEE7mC,EAAS,SAAS,KAGvB,CAAC6mC,IAEJ,IAAMnW,EAAkB,SAACtwB,EAAOuwB,GAE5B,OAAIvwB,IAAUuwB,GAGL,kBAwBb,OAhBA/4B,qBAAU,WACR,sBAAC,4BAAA0N,EAAA,sEACoBwhC,YAAoB,OADxC,cACO99B,EADP,OAEClI,QAAQwiB,IAAI,OAAQta,GACpB09B,EAAc19B,GAHf,SAIOvJ,IAAQ8L,iBAAiB,CAC7B1pB,IAAOC,WACPD,IAAOE,UACPF,IAAOI,UACPJ,IAAOwC,KACN2kB,GATJ,0CAAD,KAWC,IAKD,cAAC,EAAD,UACE,cAAC,IAAD,2BAAkBhE,GAAlB,aACE,sBAAKlL,UAAU,uBAAf,UACE,sBAAKA,UAAU,wCAAf,UACI,oBAAIA,UAAU,sBAAd,0BACA,yFACA,oBAAGC,KAAK,SAASD,UAAU,0BAA0BZ,QAAS,WAAwB,OAAhB+B,OAAO0Y,SAAgB,GAA7F,UACE,qBAAKC,QAAQ,YAAYlL,MAAM,KAAK9F,OAAO,KAA3C,SACE,sBAAMkR,KAAK,UAAUD,EAAE,wJAF3B,cAQJ,8BACE,uBAAMxO,SAAUH,EAAaG,EAAUmrB,GAAvC,UACE,6BACA,eAAC,EAAD,WACE,eAAC,EAAD,WACE,cAACpqB,EAAD,UACE,cAAC,GAAD,CAAO3Y,KAAM5L,IAAOC,WAAY0f,WAAW,mBAAmBiD,YAAY,mBAAmBD,QAAQ,WAAWrH,YAAY,MAE9H,cAACiJ,EAAD,UACE,cAAC,GAAD,CAAO3Y,KAAM5L,IAAOG,gBAAiBwf,WAAW,uBAC1CiD,YAAY,uBACZC,WAAY,CAAEie,UAAW,GACzBne,QAAQ,eAEhB,cAAC4B,EAAD,UACE,cAAC,GAAD,CAAO3Y,KAAM5L,IAAOE,UAAWyf,WAAW,kBAAkBiD,YAAY,kBAAkBD,QAAQ,WAAWrH,YAAY,MAE3H,cAACiJ,EAAD,UACE,cAAC,GAAD,CACE3Y,KAAI,UAAK5L,IAAOE,UAAZ,YACJyf,WAAW,0BACXiD,YAAY,kBACZD,QAAQ,WACRrH,YAAY,EACZiF,aAAc6yB,YAAcpzC,IAAOE,WACnC2f,MAAO,CAAEwvB,SAAU,SAAA9wB,GAAK,OAAIswB,EAAgBtwB,EAAOiwB,YAIzD,eAAC,EAAD,WACE,cAACjqB,EAAD,UACE,cAAC,GAAD,CAAkB3Y,KAAM5L,IAAOI,UAAWsf,MAAM,WAAWzH,UAAU,QAAQuD,MAAO,CAAEO,UAAW,GAAK0E,SAlE3F,SAAClC,GAC5BJ,EAASne,IAAOI,UAAWme,IAiE2HjD,YAAY,MAEpJ,cAACiJ,EAAD,UACE,cAAC,GAAD,CACEtM,UAAU,QACVrM,KAAI,UAAK5L,IAAOI,UAAZ,YACJsf,MAAM,mBACNlE,MAAO,CAAEO,UAAW,GACpBT,YAAY,EACZiF,aAAc6yB,YAAcpzC,IAAOI,WACnCyf,MAAO,CAAEwvB,SAAU,SAAA9wB,GAAK,OAAIswB,EAAgBtwB,EAAOkwB,eAI3D,cAAC,EAAD,CAAc31B,MAAM,oCAAoCwL,aAAa,EAArE,SACE,eAAC,EAAD,WACE,eAACC,EAAD,CAAWtI,GAAI,EAAf,UACE,cAAC,GAAD,CAASX,YAAa0pC,IAAkBD,EAAYn5C,KAAM5L,IAAOwC,IAAKmd,WAAW,MAAMiD,YAAY,MAAMD,QAAQ,WAAW9C,MAAO,GAAIU,aAAa,KAClJ,cAAC,GAAD,CAAU3U,KAAK,QAAQ8T,MAAM,wBAC7B,uBACA,cAAC,GAAD,CAAU9T,KAAK,WAAW8T,MAAM,iCAEpC,cAAC6E,EAAD,UACA,cAAC,GAAD,CAASjJ,YAAa0pC,IAAkBD,EAAYn5C,KAAI,UAAK5L,IAAOwC,IAAZ,YAA2Bmd,WAAW,cAAciD,YAAY,cAAcD,QAAQ,WAC5I9C,MAASmlC,GAAkBD,EAAuE,GAAzD,CAAE1V,SAAU,SAAA9wB,GAAK,OAAIswB,EAAgBtwB,EAAOo3B,KAAiBp1B,aAAa,YAKzH,cAAC,EAAD,UACE,cAAC,EAAD,UACE,wBAAQiE,KAAK,SAASvM,UAAU,SAASZ,QAASgM,EAAaG,EAAUmrB,GAAzE,oC,SCsIHuW,OApUf,WAAiC,IAAD,EAEIpwC,mBAAS,IAFb,mBAEvBqwC,EAFuB,KAEZC,EAFY,OAGJtwC,qBAHI,mBAGvBuwC,EAHuB,KAGhBC,EAHgB,OAIExwC,oBAAS,GAJX,mBAIvBywC,EAJuB,KAIbC,EAJa,KAMxBxuB,EAAY,CAChBh3B,IAAOmG,qBACPnG,IAAOC,WACPD,IAAOG,gBACPH,IAAOE,UACPF,IAAO6G,aAGTkP,qBAAU,WACR,sBAAC,8BAAA0N,EAAA,6DACC+hC,GAAY,GADb,SAE6BP,YAAoB,QAFjD,cAEOQ,EAFP,gBAGO7nC,IAAQ8L,iBAAiBsN,EAAWyuB,GAH3C,uBAIsB/hC,IAAUjC,IAAV,iBAJtB,qBAKQikC,SAAQ,SAAA9S,GACb,GAAGA,EAAEze,IAAMif,YAAcpzC,IAAOmG,sBAE9B,OADAi/C,EAAaxS,EAAEv/B,OACR,KARZ,UAWmBqQ,IAAUjC,IAAI,oDAAuDgkC,GAXxF,QAWOp4B,EAXP,OAYCpO,QAAQwiB,IAAI,MAAOpU,GACnBpO,QAAQwiB,IAAI,QAASpU,EAAI,GAAGub,OAC5B0c,EAASj4B,EAAI,GAAGub,OAChB4c,GAAY,GAfb,2CAAD,KAiBC,IAGHG,QAAKza,SAAS,CACZ0a,OAAQ,YACRC,MAAO,CACL,CAAEztC,IAAK,gFACP,CAAEA,IAAK,2EAA4E0O,WAAY,KAC/F,CAAE1O,IAAK,2EAA4E0O,WAAY,QAInG,IAAMg/B,EAASC,cAAWjD,OAAO,CAC/B3oB,KAAM,CACJvJ,gBAAiB,UACjBqI,WAAY,GACZ6B,YAAa,GACblB,WAAY,YACZ5Y,SAAS,GAEXsiB,QAAS,CACPvnB,UAAW,GACXiT,aAAc,EACdiK,WAAY,GACZ6B,YAAa,GACbnU,QAAS,GAEXq/B,OAAQ,CACNn/B,MAAO,MACP9F,OAAQ,QAEVklC,eAAgB,CACdp/B,MAAO,MACPvP,MAAO,UACP0J,SAAU,GACV8F,WAAY,IACZ4T,aAAc,GAEhBwrB,UAAW,CACTr/B,MAAO,MACP7F,SAAU,EACVgO,aAAc,IAEhBm3B,cAAe,CACbt/B,MAAO,MACP7F,SAAU,EACVgO,aAAc,GAEhBo3B,gBAAiB,CACfv/B,MAAO,MACP7F,SAAU,EACVgO,aAAc,GACdq3B,UAAW,UAEbC,KAAM,CACJx/B,WAAY,KAEdy/B,WAAY,CACVC,eAAgB,YAChBvtB,WAAY,GACZ6B,YAAa,IAEf2rB,MAAO,CACL71B,gBAAiB,UACjBlK,OAAQ,EACR3K,UAAW,EACXiT,aAAc,GACdiK,WAAY,GACZ6B,YAAa,GACb/T,aAAc,EACdiG,YAAa,GACbhR,WAAY,GACZqqC,UAAW,SACXx/B,MAAO,OAET6/B,cAAe,CACb7/B,MAAO,MACPvP,MAAO,UACP0J,SAAU,EACV8F,WAAY,IACZ4T,aAAc,EACd2rB,UAAW,UAEbM,IAAK,CACH9/B,MAAO,GACP9F,OAAQ,GACRqE,QAAS,eACTsB,OAAQ,GAEVkgC,SAAU,CACR5lC,SAAU,GAEZ6lC,cAAe,CACb7lC,SAAU,EACVqlC,UAAW,SAEbS,WAAY,CACV/lC,OAAQ,GACR8F,MAAO,UAILkgC,EAAa,kBACjB,cAAC,YAAD,UACE,eAAC,QAAD,CAAM5E,KAAK,KAAK3mC,MAAOsqC,EAAO3rB,KAA9B,UACE,cAAC,QAAD,CAAM3e,MAAOsqC,EAAOxiB,QAApB,SACE,cAAC,SAAD,CAAOlrB,IAAK,kBAAmBoD,MAAOsqC,EAAOE,WAE/C,cAAC,QAAD,CAAMxqC,MAAOsqC,EAAOxiB,QAApB,SACE,cAAC,QAAD,CAAM9nB,MAAOsqC,EAAOG,eAApB,6CAEF,eAAC,QAAD,CAAMzqC,MAAOsqC,EAAOxiB,QAApB,UACE,cAAC,QAAD,CAAM9nB,MAAOsqC,EAAOI,UAApB,oFAGA,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOI,UAApB,SACE,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOQ,KAApB,sCAEF,cAAC,QAAD,CAAM9qC,MAAOsqC,EAAOI,UAApB,mhBAOA,eAAC,QAAD,CAAM1qC,MAAOsqC,EAAOI,UAApB,UACE,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOQ,KAApB,6BADF,IACqD,eAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,yBAAoDnT,YAAcpzC,IAAOC,YAAzE,kBACnD,cAAC,QAAD,CAAMub,MAAOsqC,EAAOQ,KAApB,2BAFF,IAEqD,eAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,yBAAoDnT,YAAcpzC,IAAOG,iBAAzE,kBACnD,cAAC,QAAD,CAAMqb,MAAOsqC,EAAOQ,KAApB,gCAHF,IAG0D,eAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,yBAAoDnT,YAAcpzC,IAAOE,WAAzE,qBAE1D,eAAC,QAAD,CAAMsb,MAAOsqC,EAAOI,UAApB,UACE,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOQ,KAApB,+BADF,IACuD,eAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,yBAAoDnT,YAAcpzC,IAAO6G,aAAzE,qBAEvD,eAAC,QAAD,CAAM2U,MAAOsqC,EAAOI,UAApB,UACE,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOQ,KAApB,4BACA,cAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,kfAOA,cAAC,QAAD,CAAM/qC,MAAOsqC,EAAOQ,KAApB,uBACA,cAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,kNAMJ,eAAC,QAAD,CAAM/qC,MAAOsqC,EAAOW,MAApB,UACE,cAAC,QAAD,CAAMjrC,MAAOsqC,EAAOY,cAApB,4CAGA,cAAC,QAAD,CAAMlrC,MAAOsqC,EAAOM,gBAApB,yEAIF,cAAC,QAAD,CAAM5qC,MAAOsqC,EAAOxiB,QAApB,SACE,cAAC,QAAD,CAAM9nB,MAAOsqC,EAAOG,eAApB,wDAEF,eAAC,QAAD,CAAMzqC,MAAOsqC,EAAOxiB,QAApB,UACE,cAAC,QAAD,CAAM9nB,MAAOsqC,EAAOI,UAApB,uYAMA,eAAC,QAAD,CAAM1qC,MAAOsqC,EAAOI,UAApB,UACE,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOQ,KAApB,gCADF,IACwD,eAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,yBAAoDpB,EAApD,qBAExD,cAAC,QAAD,CAAM3pC,MAAOsqC,EAAOI,UAApB,SACE,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOQ,KAApB,kFAIF,cAAC,QAAD,CAAM9qC,MAAOsqC,EAAOI,UAApB,SACE,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOc,SAApB,qHAIF,eAAC,QAAD,CAAMprC,MAAOsqC,EAAOI,UAApB,UACE,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOQ,KAApB,0CACA,cAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,qfAQF,eAAC,QAAD,CAAM/qC,MAAOsqC,EAAOI,UAApB,UACE,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOQ,KAApB,0BACA,cAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,iZAMA,cAAC,QAAD,CAAM/qC,MAAOsqC,EAAOQ,KAApB,4BACA,cAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,kNAKF,eAAC,QAAD,CAAM/qC,MAAOsqC,EAAOI,UAApB,UACE,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOQ,KAApB,iCACA,cAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,iZAMA,cAAC,QAAD,CAAM/qC,MAAOsqC,EAAOQ,KAApB,2BACA,cAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,kNAKF,eAAC,QAAD,CAAM/qC,MAAOsqC,EAAOI,UAApB,UACE,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOQ,KAApB,+BACA,cAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,gTAKA,cAAC,QAAD,CAAM/qC,MAAOsqC,EAAOQ,KAApB,mCACA,cAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,mTAMF,cAAC,QAAD,CAAM/qC,MAAOsqC,EAAOI,UAApB,SACE,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOc,SAApB,yIAIF,eAAC,QAAD,CAAMprC,MAAOsqC,EAAOI,UAApB,UACE,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOS,WAApB,kEAGA,cAAC,QAAD,CAAM/qC,MAAOsqC,EAAOQ,KAApB,sHAEF,eAAC,QAAD,CAAM9qC,MAAOsqC,EAAOI,UAApB,UACE,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOQ,KAApB,gCACA,cAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,mTAMF,cAAC,QAAD,CAAM/qC,MAAOsqC,EAAOI,UAApB,SACE,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOQ,KAApB,kEAEF,cAAC,QAAD,CAAM9qC,MAAOsqC,EAAOI,YACpB,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOI,YACpB,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOI,YACpB,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOI,YACpB,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOI,YACpB,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOK,cAApB,SACE,cAAC,QAAD,CAAM3qC,MAAOsqC,EAAOc,SAApB,SACE,cAAC,QAAD,2GAKJ,cAAC,QAAD,CAAMprC,MAAOsqC,EAAOK,cAApB,SACE,eAAC,QAAD,CAAM3qC,MAAOsqC,EAAOc,SAApB,8EAC8D,4BAGhE,cAAC,QAAD,CAAMprC,MAAOsqC,EAAOK,cAApB,SACE,eAAC,QAAD,CAAM3qC,MAAOsqC,EAAOc,SAApB,+GAC+F,4BAGjG,cAAC,QAAD,CAAMprC,MAAOsqC,EAAOK,cAApB,SACE,eAAC,QAAD,CAAM3qC,MAAOsqC,EAAOe,cAApB,kBACOxB,gBAQjB,OACE,cAAC,mBAAD,CAAiBptC,UAAU,SAASJ,SAAU,cAACkvC,EAAD,IAAgBC,SAAS,mCAAvE,SACG,cAAGC,KAAH,EAAS50B,IAAT,IAAc/O,EAAd,EAAcA,QAAd,EAAuB9B,MAAvB,OAAoC8B,GAAWiiC,EAAW,oBAAsB,6DC/TjF2B,GAAiB,IAAIzyC,KACrB0N,GAAO+kC,GAAe5f,qBACtBtyB,GAAOkyC,GAAezvB,eAAe,QAAS,CAAE0vB,KAAM,UAAUC,OAAQ,UAAWC,QAAQ,IAOlF,SAASC,GAAT,GAAwF,IAAD,MAAzDC,EAAyD,EAAzDA,kBAAmBriC,EAAsC,EAAtCA,QAASsiC,EAA6B,EAA7BA,QAASzH,EAAoB,EAApBA,OAE1E56B,GAF8F,kEAEpFjL,wBAEV8Q,EAAW,iBAAGu8B,QAAH,IAAGA,OAAH,EAAGA,EAAmBv8B,mBAAtB,eAAqC9F,QAArC,IAAqCA,OAArC,EAAqCA,EAAS0C,KACzD6/B,EAAe,iBAAGF,QAAH,IAAGA,OAAH,EAAGA,EAAmBpgC,YAAtB,eAA8BjC,QAA9B,IAA8BA,OAA9B,EAA8BA,EAASiC,KACtDugC,EAAY,iBAAGH,QAAH,IAAGA,OAAH,EAAGA,EAAmBzuC,aAAtB,eAA+BoM,QAA/B,IAA+BA,OAA/B,EAA+BA,EAASpM,MAN0C,EAYhChE,mBAAS,MAZuB,mBAY7F6yC,EAZ6F,KAYjEC,EAZiE,KAqBpG,OAPA7xC,qBAAU,WACR,sBAAC,4BAAA0N,EAAA,sEAC0BC,IAAUjC,IAAI,wEADxC,OACWmC,EADX,OAEKgkC,EAA6B,OAAChkC,QAAD,IAACA,OAAD,EAACA,EAAQoD,SAF3C,0CAAD,KAIC,IAGD,qBAAKpb,KAAK,mBAAmBqM,UAAU,0BAAvC,SACE,sBAAKA,UAAU,mBAAf,UACE,oBAAIA,UAAU,sBAAd,iDACA,oBAAIA,UAAU,sBAAd,SAAoC,8BAAIyvC,EAAJ,IAAkC,OAAf18B,GAAwB,QAA3C,IAAqDy8B,OACzF,4BAAG,+BAAKtlC,GAAL,OAAenN,QAElB,qBAAKiD,UAAU,GAAf,SACE,sBAAKA,UAAU,iCAAf,UACE,oBAAIA,UAAU,sBAAd,kCACA,qBAAKuD,MAAO,CAACuF,OAAQ,OAAQF,WAAY,UAAWC,aAAc,MAAOsE,QAAS,OAAQE,WAAY,SAAUC,eAAgB,UAAhI,SACE,qBAAK/J,MAAO,CAAClE,MAAO,SAApB,mCAKY,SAAhB0T,GACA,qBAAK/S,UAAU,YAAf,SACE,sBAAKA,UAAU,cAAf,UACE,sBAAKuD,MAAO,CAACwT,aAAc,QAA3B,UACE,oBAAI/W,UAAU,sBAAsBuD,MAAO,CAACwT,aAAc,QAA1D,0BADF,yTAMA,cAAC,GAAD,CAAsB/b,KAAMu0C,SAKhB,QAAhBx8B,GACA,qBAAKvP,wBAAyB,CAAEC,OAAQisC,KAI1C,sBAAK1vC,UAAU,YAAf,UACGsvC,GACC,qBAAItvC,UAAU,mCAAd,UACE,qBAAIA,UAAU,KAAd,UACE,cAAC,KAAD,CAAiBuD,MAAO,CAAClE,MAAO,aADlC,aAICiwC,EAAkB7D,SAAS5mC,KAAI,SAAAwmB,GAAO,OACrC,qBAAIrrB,UAAU,KAAd,UACE,cAAC,KAAD,CAAiBuD,MAAO,CAAClE,MAAO,aAC/BgsB,EAAQxqB,eAMC,OAAhBkS,GACF,qBAAI/S,UAAU,mCAAd,UACE,qBAAIA,UAAU,KAAd,UACE,cAAC,KAAD,CAAiBuD,MAAO,CAAClE,MAAO,aADlC,aAIA,qBAAIW,UAAU,KAAd,UACE,cAAC,KAAD,CAAiBuD,MAAO,CAAClE,MAAO,aADlC,iBAIA,qBAAIW,UAAU,KAAd,UACE,cAAC,KAAD,CAAiBuD,MAAO,CAAClE,MAAO,aADlC,sBAOgB,QAAhB0T,GACF,qBAAI/S,UAAU,mCAAd,UACE,qBAAIA,UAAU,KAAd,UACE,cAAC,KAAD,CAAiBuD,MAAO,CAAClE,MAAO,aADlC,aAIA,qBAAIW,UAAU,KAAd,UACE,cAAC,KAAD,CAAiBuD,MAAO,CAAClE,MAAO,aADlC,mBAIA,qBAAIW,UAAU,KAAd,UACE,cAAC,KAAD,CAAiBuD,MAAO,CAAClE,MAAO,aADlC,wBAQgB,WAAhB0T,GACA,qBAAI/S,UAAU,mCAAd,UACE,qBAAIA,UAAU,KAAd,UACE,cAAC,KAAD,CAAiBuD,MAAO,CAAClE,MAAO,aADlC,aAIA,qBAAIW,UAAU,KAAd,UACE,cAAC,KAAD,CAAiBuD,MAAO,CAAClE,MAAO,aADlC,qBAIA,qBAAIW,UAAU,KAAd,UACE,cAAC,KAAD,CAAiBuD,MAAO,CAAClE,MAAO,aADlC,mBAIA,qBAAIW,UAAU,KAAd,UACE,cAAC,KAAD,CAAiBuD,MAAO,CAAClE,MAAO,aADlC,8BAQN,sBAAKW,UAAU,YAAf,UACE,cAAC,KAAD,CAAQZ,QA1HM,WACpB8N,EAAQa,KAAK,eAyHyBpa,KAAK,kBAAkB8T,MAAM,sBAC3D,cAAC,KAAD,CAAQrI,QAAS0oC,EAAQn0C,KAAK,OAAO8T,MAAM,mBAAmBiD,QAAQ,oBChJlF,IAAMuC,GAAU,CAEXpM,MAAO,SAGRqO,KAAM,KACNtb,YAAa,qKAcFg8C,OAXf,WAII,OAFkBlyC,aAAY,SAACC,GAAD,OAAWA,EAAMC,QAG3C,cAAC,EAAD,UACI,cAACyxC,GAAD,CAAoBpiC,QAASA,QCO1B4iC,OAnBf,YAGG,IAFC7tC,EAEF,EAFEA,SAEF,IADE8tC,eACF,SAWA,OAVEhyC,qBAAU,WAON,OALI8B,SAASmwC,gBAAgBxsC,MAAMysC,SADhCF,EAC2C,SAGA,OAEvC,kBAAMlwC,SAASmwC,gBAAgBxsC,MAAMysC,SAAW,UACzD,CAACF,IAGHA,EAAU,qBAAK9vC,UAAU,UAAf,SAA0BgC,IAAkB,MCtB3C,OAA0B,0CCoJ1BiuC,OArIf,WAEE,IAAM/iC,EAAUjL,uBACRxE,EAAeC,aAAY,SAACC,GAAD,OAAWA,EAAMC,QAA5CH,WAHsB,EAKoBZ,oBAAS,GAL7B,mBAKvBqzC,EALuB,KAKJC,EALI,KAO9BnpC,QAAQwiB,IAAI,gBAAiB/rB,GAG7B,IAAM2yC,EAAc,SAAC3wC,GACnBuH,QAAQwiB,IAAI,sBACZxiB,QAAQwiB,IAAI,qBACZ2mB,GAAqB,GACrB1wC,EAAEC,iBACF9B,IAAKyyC,SAkFP,OA/EAvyC,qBAAU,WACR,sBAAC,4CAAA0N,EAAA,yDACCxE,QAAQwiB,IAAI,0BACT/rB,EAFJ,wBAGG0yC,GAAqB,GACrBnpC,QAAQwiB,IAAI,iBAEN8mB,EAAW1yC,IAAK2yC,cACtBvpC,QAAQwiB,IAAI,WAAY8mB,GAClBxW,EAAQl8B,IAAK08B,eACnBtzB,QAAQwiB,IAAI,QAASsQ,GATxB,mBAW2BruB,IAAUjC,IAAV,WAA0B,CAC9C8mC,aAZP,QAWWE,EAXX,OAcKC,IAAqBD,EACrBxpC,QAAQwiB,IAAI,oBAfjB,kDAiBKxiB,QAAQwiB,IAAI,yBACNtd,EAlBX,sCAkBoB,KAAKD,eAlBzB,aAkBoB,EAAcC,OAlBlC,KAoBaA,EApBb,OAqBY,MArBZ,QAyBY,MAzBZ,gCAsBSlF,QAAQwiB,IAAI,kBACZtc,EAAQa,KAAK,cAvBtB,oCA0BS/G,QAAQwiB,IAAI,kBACZtc,EAAQa,KAAK,cA3BtB,oCA8BS/G,QAAQwiB,IAAI,sBACZinB,GAAmB,EA/B5B,8CAoCKzpC,QAAQwiB,IAAI,wBApCjB,wBAuCOinB,EAvCP,wBAwCKzpC,QAAQwiB,IAAI,uBAxCjB,UA0COxiB,QAAQwiB,IAAI,wBA1CnB,UA2Ca/d,IAAU4d,KAAV,WAA2B,CAC/B,SAAYinB,EACZ,MAASxW,EACT,MAAUt0B,KAAKkrC,MAAoB,KAAdlrC,KAAKmrC,YA9CnC,QAgDO3pC,QAAQwiB,IAAI,oBAhDnB,mDAkDO2mB,GAAqB,GACrBS,MAAM,uGAnDb,yBAuDSjrC,IAAQ8L,iBAAiB,CAC7B1pB,IAAOC,WACPD,IAAOE,UACPF,IAAOI,YA1DZ,QA6DSksB,EAAY8mB,YAAcpzC,IAAOC,YACjC6oD,EAAW1V,YAAcpzC,IAAOE,WAChC6oD,EAAY3V,YAAcpzC,IAAOI,WAEnC,GAAGksB,IAAaw8B,IAAYC,GAAWjqC,UAAS,IAClDG,QAAQwiB,IAAI,yBACZtc,EAAQa,KAAK,mBAGb/G,QAAQwiB,IAAI,sBACZtc,EAAQa,KAAK,eAvElB,uEAAD,KA4EA,CAACtQ,IAGD,cAAC,IAAMsF,SAAP,UACE,sBAAK/C,UAAU,iCAAf,UACE,cAAC,EAAD,IACA,cAAC,GAAD,CAAS8vC,QAASI,EAAlB,SACE,qBAAK3sC,MAAO,CAAEuF,OAAQ,QAAS8F,MAAO,OAAQzB,QAAS,OAAQE,WAAY,SAAUC,eAAgB,UAArG,SACE,sBAAK/J,MAAO,CAAE,UAAa,UAA3B,UAAsC,cAACuR,GAAA,EAAD,IAAU,qDAGpD,qBAAK9U,UAAU,kBAAf,SACE,qBAAKA,UAAU,UAAf,SACE,sBAAKA,UAAU,kBAAf,UACE,qBAAKA,UAAU,iBAAf,SAAgC,qBAAKU,IAAI,gCAAgCV,UAAU,iCAAiCG,IAAK4wC,OACzH,qBAAK/wC,UAAU,0BAAf,SACE,sBAAKA,UAAU,uBAAf,UACE,oBAAIA,UAAU,sBAAd,4BACA,qBAAIA,UAAU,sBAAd,4BAAmD,4CAAnD,iCACA,sBAAKA,UAAU,eAAf,UACE,qBAAKA,UAAU,WAAf,SACE,iEAEF,wBAAQC,KAAK,eAAeD,UAAU,oCAAoCZ,QAASgxC,EAAajnC,SAAU+mC,EAA1G,mCACA,wBAAQjwC,KAAK,eAAeD,UAAU,oCAAoCZ,QAASgxC,EAAajnC,SAAU+mC,EAA1G,+CAOZ,cAAC,EAAD,UC3DOc,OAvEf,YAA2D,IAAhCxoC,EAA+B,EAA/BA,SAAU6tB,EAAqB,EAArBA,SAAUhL,EAAW,EAAXA,QAErCngB,EAAUC,YAAQ,CAAGlF,KAAM,WACemF,GAAwBF,EAAhE7B,OAAgE6B,EAAxD9F,UAAwD8F,EAA7C/E,UAA6C+E,EAAlChF,SAAkCgF,EAAxBE,cAC1CJ,GADkEE,EAAVorB,MAC7CrrB,eAJqC,EAMxBpO,oBAAS,GANe,mBAM/CwO,EAN+C,aAOVxO,mBAAS,OAPC,mBAO/Co0C,EAP+C,KAO/BC,EAP+B,KAShDnO,EADoB,IAAI8C,GAAeoL,GACR51C,SAAStT,IAAOqD,oBATC,4CAWtD,4BAAAogB,EAAA,sEACuBC,IAAU0lC,oBAAoB,MAAO9lB,EAAQnc,KAAM,CAACnnB,IAAOqD,qBADlF,cACU4P,EADV,OAEIk2C,EAAkBl2C,GAFtB,kBAGW,IAAI6qC,GAAe7qC,GAAMK,SAAStT,IAAOqD,qBAHpD,4CAXsD,sBAkBtD,IAAMmgB,EAAQ,uCAAG,WAAOvQ,EAAMyE,GAAb,SAAA+L,EAAA,sEACP6f,EAAQuX,YAAY5nC,EAAMgQ,GADnB,OAEW,oBAAbxC,GACPA,GAAS,GAHA,2CAAH,wDAORkuB,EAAU,SAACrtB,EAAQ5J,KAIzB3B,qBAAU,YA7B4C,mCA8BlDqzC,KACD,IAEHrzC,qBAAU,WAGN,OADAqD,OAAOU,iBAAiB,eAAgB80B,GACjC,WACHx1B,OAAOW,oBAAoB,eAAgB60B,MAEhD,IACH,IAAMA,EAAY,SAAAl3B,GACdA,EAAEC,iBACFD,EAAEu3B,YAAc,IAGpB,OACI,cAAC,IAAD,2BAAkB9rB,GAAlB,aACI,sBAAMK,SAAUH,EAAaG,EAAUmrB,GAAvC,SACI,eAACtD,GAAD,CAAavyB,MAAM,qBAAqBwyB,YAAY,EAAME,YAAanoB,EAAaG,EAAUmrB,GAAUlD,cAAe6C,EAAUhrB,QAASA,EAA1I,WAEqC,KAAtB,OAAV03B,QAAU,IAAVA,OAAA,EAAAA,EAAYqD,kBACT,cAACpvB,GAAA,EAAD,CAAOhL,SAAS,QAAQhM,UAAU,qBAAlC,SACI,0IAMR,cAAC,EAAD,CAAca,MAAM,iCAAiCwL,aAAa,EAAlE,SACI,cAAC,EAAD,UACI,cAACC,EAAD,CAAWtI,GAAI,EAAf,SACI,cAAC,GAAD,CAAgBipB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOqD,oBAAqBqc,MAAM,qBAAqBiD,QAAQ,WAAWrH,YAAY,mBCQxJ+tC,OApEf,YAA0D,IAAhC5oC,EAA+B,EAA/BA,SAAU6tB,EAAqB,EAArBA,SAAUhL,EAAW,EAAXA,QAEpCngB,EAAUC,YAAQ,CACtBlF,KAAM,WAEAmF,EAAiBF,EAAjBE,aAL6C,EAOvBvO,oBAAS,GAPc,mBAO9CwO,EAP8C,KAOrCC,EAPqC,KAQ/CN,EAAWC,cAEXM,EAAQ,uCAAG,WAAOvQ,GAAP,SAAAwQ,EAAA,sEAEbF,GAAW,GAFE,SAGQ3F,IAAQ8wB,WAAWz7B,EAAK,GAAG,IAHnC,cAIU,oBAAbwN,GACRA,GAAS,GALE,gDASbwC,EAAS3N,aAAK,CACZ0K,QAAS,KAAEA,QACXiE,SAAU,aAXC,yBAcbV,GAAW,GAdE,4EAAH,sDAkBRorB,EAAU,aAIhB54B,qBAAU,WAER,OADAqD,OAAOU,iBAAiB,eAAgB80B,GACjC,WACLx1B,OAAOW,oBAAoB,eAAgB60B,MAE5C,IACH,IAAMA,EAAY,SAAAl3B,GAChBA,EAAEC,iBACFD,EAAEu3B,YAAc,IAGlB,OACE,cAAC,IAAD,2BAAkB9rB,GAAlB,aACE,sBAAMK,SAAUH,EAAaG,EAAUmrB,GAAvC,SACE,cAACtD,GAAD,CAAavyB,MAAM,wBAAwBwyB,YAAY,EAAME,YAAanoB,EAAaG,EAAUmrB,GAAUlD,cAAe6C,EAAUhrB,QAASA,EAA7I,SAEE,cAAC,EAAD,CAAcxK,MAAM,2DAA2DwL,aAAa,EAA5F,SACE,eAAC,EAAD,WACE,cAACC,EAAD,UACE,cAAC,GAAD,CAAgBjJ,YAAU,EAAC4pB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO+D,iBAAkB2b,MAAM,eAE7F,cAAC6E,EAAD,UACE,cAAC,GAAD,CAAgBjJ,YAAU,EAAC4pB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOgE,iBAAkB0b,MAAM,eAE7F,cAAC6E,EAAD,UACI,cAAC,GAAD,CAAejJ,YAAU,EAAC4pB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOiE,qBAAsByb,MAAM,yDC3DnG4pC,OAVf,YAA4C,IAA7BrvC,EAA4B,EAA5BA,SAAUuB,EAAkB,EAAlBA,MAAUlB,EAAQ,oCAGzC,OACE,6CAAKrC,UAAU,oBAAoBuD,MAAOA,GAHvB,CAAEkH,OAAQ,SAAUkO,gBAAiB,UAAWjK,QAAS,WAGPrM,GAArE,aACGL,M,sBC8EQsvC,OAvEf,YAAkF,IAApDjmB,EAAmD,EAAnDA,QAAS13B,EAA0C,EAA1CA,KAAM49C,EAAoC,EAApCA,aAAcvvC,EAAsB,EAAtBA,SAEjDwvC,GAFuE,4DAErDnmB,EAAQ2c,qBAAqBr0C,EAAM49C,GAAc7rC,QAAO,SAAAiO,GAAC,OAAKA,EAAE4wB,kBAFX,EAGrC1nC,mBAAS,IAH4B,mBAGtE40C,EAHsE,KAGxDC,EAHwD,OAIjC70C,mBAAS,IAJwB,mBAItE80C,EAJsE,KAItDC,EAJsD,KAKvE/hB,EAAU,sBAAI2hB,GAAJ,YAAwBC,IAAc/rC,QAAO,SAAAiO,GAAC,OAAKg+B,EAAe77B,MAAK,SAAAtK,GAAC,OAAIA,EAAE0Q,IAAMvI,EAAEuI,SAEhG1X,EAAQqrB,EAAQjtB,OAPuD,EASjC/F,mBAAS,IATwB,mBAStE6H,EATsE,KAStDC,EATsD,OAU7B9H,mBAAS,YAAI,IAAI+H,MAAMJ,IAAQK,KAAI,SAACC,EAAGC,GAAJ,OAAUA,MAVhB,mBAUtEC,EAVsE,KAUpDC,EAVoD,OAabpI,mBAAS,IAbI,mBAatEqI,EAbsE,KAa5CC,EAb4C,KAgBvEC,EAAY1H,aAAY,SAAAC,GAAK,OAAIA,EAAMwE,QACvCkD,EAAsBC,IAAKF,EAAD,iBAAsBzR,EAAtB,WAAqC,GAkDrE,OAhDAmK,qBAAU,WACFuH,EAAsB,GACtBJ,EAAoB,YAAI,IAAIL,MAAMS,IAAsBR,KAAI,SAACC,EAAGC,GAAJ,OAAUA,QAE3E,CAACM,IA4CGrD,EAAS6tB,GApCE,SAACgiB,GAAD,OAAoB,WAClC,IAAIC,GAPR,WACI,IAAIC,EAAO,IAEX,OAAOvsC,KAAKwsC,MAAM,IAAAxsC,KAAKmrC,UAAgCoB,EAI1CE,GACT1sC,EAAW,EAEXb,EAAe9B,QAEf2C,EAAWC,KAAKC,IAAL,MAAAD,KAAI,YAAQd,IACvBC,EAAkBD,EAAegB,QAAO,SAAAX,GAAC,OAAIA,IAAMQ,OAGnDA,EAAWf,EAEfS,EAAoB,GAAD,mBAAKD,GAAL,CAAuBO,KAG1CssC,EAAe31B,GAAK41B,EACpBD,EAAezd,SAAWzgC,EAC1Bk+C,EAAevK,MAAQ/hC,EAEvBssC,EAAetzB,OAAQ,EAEvBmzB,EAAgB,GAAD,mBAAKD,GAAL,CAAmBI,SAEjB,SAAC5kB,GAAD,OAAY,WAC7B,IAAM9oB,EAAQ8oB,EAAOqa,MACrBsK,EAAkB,GAAD,mBAAKD,GAAL,CAAqB1kB,MAElC,OAACA,QAAD,IAACA,OAAD,EAACA,EAAQ1O,QACT5Y,IAAQC,4BAA4B,CAAEjS,OAAMoL,GAAKkuB,EAAO/Q,KAG5DvX,EAAkB,GAAD,mBAAKD,GAAL,CAAqBP,KACtCc,EAAoBD,EAAiBU,QAAO,SAAAX,GAAC,OAAIA,IAAMZ,MACvDgB,EAA4B,2BAAID,GAAL,kBAAgCf,EAAQ,QAGrBe,I,qBCtEzCgtC,GACH,OADGA,GAEO,iBAML,eAA+D,EAA5DxqB,UAA6D,IAAD,IAAjDyqB,oBAAiD,MAAlCD,GAAkC,EAAX7vC,EAAW,8CAEjDxF,mBAAS,IAFwC,mBAEnEslB,EAFmE,KAE7D2Z,EAF6D,KAgB1E,OAZAh+B,qBAAU,WACN,sBAAC,gCAAA0N,EAAA,sEACyBC,IAAUjC,IAAV,mCADzB,OACSwS,EADT,OAESo2B,EAAgBC,KAAOr2B,GAAS,SAAArI,GAAC,OAAIA,EAAE2+B,aACvCC,EAAcH,EAAcvtC,KAAI,SAAA81B,GAAC,MAAK,CACxClzB,MAAM,GAAD,OAAKkzB,EAAEv/B,KAAP,aAAgBu/B,EAAEhB,aAAlB,KACLrzB,MAAO6rC,IAAiBD,GAA+BvX,EAAEhB,aAAegB,EAAEze,OAE9E4f,EAASyW,GAPZ,0CAAD,KASF,IAEK,cAAC,GAAD,yBAAgBhoC,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,mBAAyB2C,GAArF,IAA4FsI,YAAY,SAAS+c,UAAWvF,MC8HxHqwB,OA3If,YAAsE,IA2BnDl0B,EAAOgW,EAAMC,EA3BAtH,EAAqC,EAArCA,OAAQ9jB,EAA6B,EAA7BA,SAA6B,IAAnBspC,eAAmB,SAE3DvnC,EAAUlF,YAAe,CAAEC,KAAM,WAC/BE,EAA+B+E,EAA/B/E,UAAWmwB,EAAoBprB,EAApBorB,MAEbvxB,GAFiCmG,EAAbhF,SAEhB+mB,EAAOqa,OACX3zC,EAAOs5B,EAAOmH,SACdse,EAAczuC,GAAoBtQ,EAAMoR,EAAG1P,IAAuBV,IAClEg+C,EAA6B1uC,GAAoBtQ,EAAMoR,EAAI1P,IAAuBQ,MAClF+8C,EAAmC3uC,GAAoBtQ,EAAMoR,EAAG1P,IAAuBU,eACvF88C,EAA4B5uC,GAAoBtQ,EAAMoR,EAAG1P,IAAuBE,YAChFu9C,EAA4B7uC,GAAoBtQ,EAAMoR,EAAG1P,IAAuBG,YAChFu9C,EAA2B9uC,GAAoBtQ,EAAMoR,EAAG1P,IAAuBI,UAC/Eu9C,EAA2B/uC,GAAoBtQ,EAAMoR,EAAG1P,IAAuBK,UAC/Eu9C,EAAyBhvC,GAAoBtQ,EAAMoR,EAAG1P,IAAuBO,QAC7Es9C,EAA0BjvC,GAAoBtQ,EAAMoR,EAAG1P,IAAuBM,SAE9Ew9C,EAAc7c,EAAMqc,GACpBS,GAAuC,OAAXD,QAAW,IAAXA,OAAA,EAAAA,EAAa7sC,SAAUlR,IAEnDi+C,EAAc,CAChB,CAAE5rC,MAAO,OAAQnB,MAAO,QACxB,CAAEmB,MAAO,SAAUnB,MAAO,UAC1B,CAAEmB,MAAO,SAAUnB,MAAO,UAC1B,CAAEmB,MAAO,SAAUnB,MAAO,WAExByuB,GAAe,IAAIv4B,MAAQmE,cAE3Bq0B,GADS1W,EACWyW,EAAc,EADlBT,EACqBS,EAAc,IAD7BR,GACmC,EAD1B3vB,MAAMqJ,KAAK,CAAErL,QAAS0xB,EAAOhW,GAASiW,EAAO,IAAK,SAACzvB,EAAGC,GAAJ,OAAUuZ,EAASvZ,EAAIwvB,MAC5C1vB,KAAI,SAACqK,GACnE,MAAO,CACHzH,MAAOyH,EACP5I,MAAO4I,MA/BkD,EAmCnCrS,mBAAS,IAnC0B,mBAmC5DivB,EAnC4D,KAmClDwnB,EAnCkD,KAoCjEx1C,qBAAU,WACDmvB,EAAOlc,MAGZ,sBAAC,4BAAAvF,EAAA,sEACyBC,IAAUswB,sBAAsB9O,EAAOvyB,YAAauyB,EAAOlc,MADpF,OACS5I,EADT,OAEGmrC,EAAYnrC,GAFf,0CAAD,KAKD,CAAC8kB,EAAOlc,OAEX,IAAMojB,EAAahrB,GAAY8jB,EAAO4G,SAStC,OACI,cAAC,WAAD,UACI,qBAAK7zB,UAAU,SAAf,SACI,eAAC,EAAD,WACI,eAACsM,EAAD,WACI,cAAC,GAAD,CAAa3Y,KAAM++C,EAAapsC,MAAO2mB,EAAO/Q,KAC9C,cAAC,GAAD,CAAgB7Y,YAAa+vC,EACzBzoC,YAAY,UACZhX,KAAMg/C,EACNjrB,UAAWoE,EACXkM,iBAAiB,EACjBtwB,WAAY,gEAA0B,cAAC,GAAD,CAAYulB,OAAQA,IAA9C,OACZviB,QAAQ,gBAEf0oC,GACG,cAAC9mC,EAAD,UACI,cAAC,GAAD,CAAOnD,SAAUgrB,EAAYxgC,KAAMi/C,EAC/BtqC,aAAcnC,EAAUysC,GAExBlrC,WAAW,mCACXgD,QAAQ,WACRC,YAAY,0BACZtH,YAAY,GAJPuvC,KASjB,cAACtmC,EAAD,UACI,eAAC,EAAD,WACI,eAACA,EAAD,WACI,8CAAgB,sBAAM/I,MAAO,CAAElE,MAAO,OAAtB,sBAChB,gCACI,cAAC,GAAD,CAAgBgE,YAAY,EACxBsH,YAAY,OACZhX,KAAMk/C,EACNnrB,UAAW2rB,IAEf,cAAC,GAAD,CAAgBhwC,YAAY,EACxBsH,YAAY,OACZhX,KAAMm/C,EACNprB,UAAWsN,UAKtByd,GACG,eAACnmC,EAAD,WACI,4CACA,gCACI,cAAC,GAAD,CAAgBjJ,YAAY,EACxBsH,YAAY,OACZhX,KAAMo/C,EACNrrB,UAAW2rB,IAEf,cAAC,GAAD,CAAgBhwC,YAAY,EACxBsH,YAAY,OACZhX,KAAMq/C,EACNtrB,UAAWsN,eAQnC,cAAC1oB,EAAD,UACI,eAAC,EAAD,WACI,cAACA,EAAD,UACI,cAACinC,GAAD,CAAgBpqC,SAAUgrB,EAAY5pB,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC9E/L,KAAMs/C,EAAqD3qC,aAAcnC,EAAU8sC,GACnFvrC,WAAW,gBAAgBgD,QAAQ,WAAWynC,aAAcD,IADzBe,KAG3C,cAAC3mC,EAAD,UACI,cAAC,GAAD,CAAOnD,SAAUgrB,EAAYxgC,KAAMu/C,EAAyB5qC,aAAcnC,EAAU+sC,GAAwDxrC,WAAW,iBAAiBgD,QAAQ,YAA7DwoC,gBAxE5HjmB,EAAO/Q,KCefs3B,OA9Ef,YAA4D,IAAnCC,EAAkC,EAAlCA,sBAAuBpoB,EAAW,EAAXA,QAExCwO,EAAiBn8B,aAAY,SAACC,GAAD,OAAWA,EAAMwE,QAC9C+I,EAAUlF,YAAe,CAAEC,KAAM,WACpBqwB,GAAUprB,EAArB/E,UAAqB+E,EAAVorB,OAGbod,EAAepd,EAAMvuC,IAAOiH,iBAC5B2kD,EAAYrd,EAAMvuC,IAAOkH,cAE/B,SAAS2kD,EAAiBpoC,GACxB,OAAqB,MAAdA,EAAE4gB,SAGX,IAAMynB,EAAyB,CAC7B,CACEjoB,MAAO7jC,IAAOiH,gBACd0W,OAAQ,SAAA8F,GAAC,OAAIooC,EAAiBpoC,IAC9B3K,MAAO,iCACP4xC,SAAS,GAEX,CACE7mB,MAAO7jC,IAAOkH,aACdyW,OAAQ,SAAA8F,GAAC,OAAKooC,EAAiBpoC,IAC/B3K,MAAO,iCACP4xC,SAAS,IAUb,OANA30C,qBAAU,WAER21C,GAAyBA,EAAsBC,EAAcC,KAE5D,CAACD,EAAcC,EAAWE,IAG3B,mCACGA,EAAuBhvC,KAAI,SAAAivC,GAAS,OACnC,cAAC,EAAD,CAAcjzC,MAAOizC,EAAUjzC,MAAOwL,aAAa,EAAnD,SACE,cAAC,GAAD,CAAoBgf,QAASA,EAAS13B,KAAMmgD,EAAUloB,MAAO2lB,aAAcuC,EAAUpuC,OAArF,SACG,SAACmqB,EAASkkB,EAAWC,GACpB,OAAO,qCACJnkB,EAAQhrB,KAAI,SAACooB,GAEZ,OACE,cAAC,WAAD,UACE,eAAC,GAAD,CAAM1pB,MAAO,CAAEO,UAAW,SAAU4K,QAAS,QAA7C,UACE,cAACulC,GAAA,EAAD,CAAa1wC,MAAO,CAAEkH,OAAQ,oBAA9B,SACE,cAAC,GAAD,CAAsBwiB,OAAQA,EAAQwlB,QAASqB,EAAUrB,YAE3D,cAACyB,GAAA,EAAD,CAAa3wC,MAAO,CAAE+J,eAAgB,YAAtC,SACE,cAAC,IAAD,CAAgB48B,KAAK,QAAQ7qC,MAAM,YACjC8J,SAAU8jB,EAAO4G,SACjBtwB,MAAO,CAAEud,SAAU,WAAYqzB,OAAQ,SACvC/0C,QAAS40C,EAAa/mB,GAHxB,0BANSA,EAAO/Q,QAeyB,oBAA1C2d,EAAevlB,OAAOw/B,EAAUloB,QAAyBiO,EAAevlB,OAAOw/B,EAAUloB,OAAOhpB,OAAS,KAChH,cAAC,EAAD,CAAUW,MAAO,CAAEO,UAAW,UAA9B,SACE,cAACwI,EAAD,UACE,cAAC,KAAD,CAAQC,KAAK,SAAS5Y,KAAK,aAAa8T,MAAM,2BAA2BiD,QAAQ,OAAOnH,MAAO,CAAEunB,cAAe,cAC9G1rB,QAAS20C,EAAU1oB,EAAQ0e,aAAa,oBAAoB5uC,2BCwKrEi5C,OAjOf,YAAkE,IAAhC5rC,EAA+B,EAA/BA,SAAU6tB,EAAqB,EAArBA,SAAUhL,EAAW,EAAXA,QAE5Cnc,EAAOmc,EAAQnc,KACfmlC,EAAkBnlC,EAClBolC,EAAeplC,EAEfhE,EAAUC,YAAQ,CACpBlF,KAAM,WAEFmF,EAAuDF,EAAvDE,aAAckrB,EAAyCprB,EAAzCorB,MAAOnwB,EAAkC+E,EAAlC/E,UATgC,GASE+E,EAAvBhF,SAAuBgF,EAAb+nB,SAEpBp2B,oBAAS,IAXsB,mBAWtDwO,EAXsD,aAYjBxO,mBAAS,OAZQ,mBAYtDo0C,EAZsD,KAYtCC,EAZsC,KAavDlmC,EAAWC,cACXy3B,EAAsBpM,EAAM,kBAC5Bie,EAAkBje,EAAMvuC,IAAOsG,uBAC/BmmD,EAAkBle,EAAMvuC,IAAOuG,2BAC/BmmD,EAAoBne,EAAMvuC,IAAOoG,eACjCumD,EAAmBpe,EAAMvuC,IAAOqG,cAEhCumD,EADoB,IAAI9O,GAAeoL,GACD51C,SAAStT,IAAOkH,cApBC,SA0B9CkiD,IA1B8C,2EA0B7D,4BAAA3lC,EAAA,sEAC6BC,IAAU0lC,oBAAoB,MAAO9lB,EAAQnc,KAAM,CAACnnB,IAAOkH,eADxF,cACU8zC,EADV,OAEImO,EAAkBnO,GAFtB,kBAGW,IAAI8C,GAAe9C,IAH9B,4CA1B6D,+BAoC9C6R,EApC8C,8EAoC7D,WAA6B55C,GAA7B,eAAAwQ,EAAA,6DAEgC,IAAxBk3B,IACA1nC,EAAKjT,IAAOoG,eAAiB,QAHrC,SAMUk9B,EAAQuX,YAAY5nC,EAAMgQ,GANpC,uBAOiCmmC,IAPjC,cAOQ0D,EAPR,yBAQWA,GARX,4CApC6D,sBA+C7D,IAAMtpC,EAAQ,uCAAG,WAAOvQ,GAAP,eAAAwQ,EAAA,sEAEkBopC,EAAc55C,GAFhC,OAEP65C,EAFO,OAGaA,EAAiBx5C,SAAStT,IAAOkH,cAGnC,oBAAbuZ,GACPA,GAAS,GAPA,2CAAH,sDAWRkuB,EAAU,SAACj3B,GAEbm1C,EADazuC,MAIjBrI,qBAAU,WAEN,OADAqD,OAAOU,iBAAiB,eAAgB80B,GACjC,WACHx1B,OAAOW,oBAAoB,eAAgB60B,MAEhD,IAEH,IAAMA,EAAY,SAAAl3B,GACdA,EAAEC,iBACFD,EAAEu3B,YAAc,IAxEyC,EA2EjBn6B,qBA3EiB,mBA2EtDi4C,EA3EsD,KA2EtCC,EA3EsC,OA4EvBl4C,qBA5EuB,mBA4EtDm4C,EA5EsD,KA4EzCC,EA5EyC,OAoFbp4C,mBAAS,MApFI,oBAoFtDq4C,GApFsD,MAoFpCC,GApFoC,SAqFLt4C,oBAAS,GArFJ,qBAqFtDu4C,GArFsD,MAqFhCC,GArFgC,MA+F7D,SAASC,KACLH,IAAoBD,IAAmB,MAqB3C,OA9BAp3C,qBAAU,WACN,IAAIy3C,EAAkBlqB,EAAQ8L,iBAAiBpvC,IAAO4D,0BAA0ByiC,SAChF+mB,KAAoBI,GAAyB,MAE7CpE,MAED,IAMHrzC,qBAAU,YACmB,IAArBo3C,KACIJ,GACGE,GACoB,SAApBT,GACoB,SAApBC,GACAC,GACAC,IACPS,IAAoB,GACpBE,IAAwB,IAGxBA,IAAwB,KAE7B,CAACP,EAAgBE,EAAaT,EAAiBC,EAAiBC,EAAmBC,IAKlF,cAAC,IAAD,2BAAkBxpC,GAAlB,aACI,sBAAMK,SAAUH,EAAaG,EAAUmrB,GAAvC,SACI,eAACtD,GAAD,CAAavyB,MAAM,kBAAkBwyB,YAAY,EAAME,YAAanoB,EAAaG,EAAUmrB,GAAUlD,cAAe6C,EAAUhrB,QAASA,EAAvI,UACI,cAAC,GAAD,CACI1X,KAAM5L,IAAO4D,yBACb2a,MAAO4uC,KAETE,GAWI,KAVF,cAAC,EAAD,UACI,cAAC9oC,EAAD,UACI,cAAC,GAAD,CACIlE,eAAe,EACfI,SAAU8sC,GACVhvC,MAAO4uC,GACPztC,MAAO,mCAMrBytC,GAmEI,KAlEF,eAAC,WAAD,WACI,cAAC,EAAD,UACI,cAAC,EAAD,UACI,eAACl+B,GAAA,EAAD,CAAOhL,SAAS,OAAhB,0TAG6C,6CAH7C,8CAG2G,2CAH3G,YAQ6B,KAAnB,OAAjB2oC,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBtO,eAChB,qBAAKl3B,MAAI,EAAT,SACI,cAAC6H,GAAA,EAAD,CAAOhL,SAAS,QAAQhM,UAAU,qBAAlC,SACI,gPAOZ,qBAAKA,UAAU,SAAf,SACI,cAAC,GAAD,CAAeyzC,sBAnF3C,SAA+B9H,EAAS6J,GACpCP,GAAmB,OAAJO,QAAI,IAAJA,OAAA,EAAAA,EAAM5yC,QAAS,GAC9BmyC,GAAyB,OAAPpJ,QAAO,IAAPA,OAAA,EAAAA,EAAS/oC,QAAS,IAiFiDyoB,QAASA,MAG1E,qBAAKrrB,UAAU,YAEf,cAAC,EAAD,CAAcqD,YAAU,EAACxC,MAAO,6GAA+GwzC,EAAkB,IAAjK,SACI,cAAC,EAAD,UACI,cAAC/nC,EAAD,UACI,cAAC,GAAD,CAAe2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOsG,uBAAwBiY,MAAOiuC,EAAiBlxC,YAAY,UAK/H,cAAC,EAAD,CAAcA,YAAU,EAACxC,MAAO,4DAAyDyzC,EAAe,IAAxG,SACI,cAAC,EAAD,UACI,cAAChoC,EAAD,UACI,cAAC,GAAD,CAAe2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOuG,2BAA4BgY,MAAOkuC,EAAiBnxC,YAAY,UAKnI,cAAC,EAAD,CAAcxC,MAAM,+BAA+BwL,aAAa,EAAMhJ,WAAYyxC,GAAkBE,EAApG,SACI,eAAC,EAAD,WACI,cAAC1oC,EAAD,UACI,cAAC,GAAD,CAAenD,SAAUu5B,EACrBzV,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOoG,eACxCkV,WAAYyxC,GAAkBE,EAC9BttC,WAAW,wBAEnB,cAAC4E,EAAD,CAAW23B,WAAS,EAAC52B,WAAW,WAAhC,SACI,8BACI,cAAC,GAAD,CAAU1Z,KAAK,iBAAiB8T,MAAM,+CAKtD,cAAC,EAAD,CAAc5G,MAAM,0BAA0BwL,aAAa,EAA3D,SACI,cAAC,EAAD,UACI,cAACC,EAAD,UACI,cAAC,GAAD,CAAenD,SAAUu5B,EAAqBzV,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOqG,cAAesZ,WAAW,0BAOnIwtC,GACG,cAAC,WAAD,UACI,eAAC,EAAD,iEAEI,cAAC5oC,EAAD,UACI,cAAC,KAAD,CAAQ7E,MAAM,0BAA0BrI,QAASk2C,YAK3D,cCvOX,eAA4B,EAAzB5tB,UAA0B,IAAZrlB,EAAW,+BAEdxF,mBAAS,IAFK,mBAEhCslB,EAFgC,KAE1B2Z,EAF0B,OAGTj/B,oBAAS,GAHA,mBAGhCwO,EAHgC,KAGvBC,EAHuB,KAkBvC,OAbAxN,qBAAU,WACN,sBAAC,4BAAA0N,EAAA,6DACGF,GAAW,GADd,SAEwBG,IAAUjC,IAAV,iBAFxB,OAESisC,EAFT,OAGG3Z,EAAS2Z,EAAO5wC,KAAI,SAAA81B,GAAC,kCACdA,GADc,IAEjBlzB,MAAOkzB,EAAEhgC,MACT2L,MAAOq0B,EAAEze,SAEb5Q,GAAW,GARd,0CAAD,KAUF,IAGF,gCACKD,GACC,0EAEI,cAAC0kB,GAAA,EAAD,QAGJ1kB,GACE,cAAC,GAAD,2BAAoBhJ,GAApB,IAA2BsI,YAAY,QAAQ+c,UAAWvF,SCoEvDuzB,OA/Ef,YAA6C,IAArBzoB,EAAoB,EAApBA,OAAQ9jB,EAAY,EAAZA,SAEtB+B,EAAUC,YAAQ,CAAElF,KAAM,WACxBE,EAA4B+E,EAA5B/E,UAEFpB,GAF8BmG,EAAjBE,aAET6hB,EAAOqa,OACX3zC,EAAOs5B,EAAOmH,SACduhB,EAAkB1xC,GAAoBtQ,EAAMoR,EAAGtN,IAAsB7B,QACrEggD,EAAwB3xC,GAAoBtQ,EAAMoR,EAAGtN,IAAsBC,eAC3Em+C,EAA0B5xC,GAAoBtQ,EAAMoR,EAAGtN,IAAsBE,iBAC7Em+C,EAA0B7xC,GAAoBtQ,EAAMoR,EAAGtN,IAAsBG,0BAC7E86C,EAAczuC,GAAoBtQ,EAAMoR,EAAGtN,IAAsB9C,IAEjEw/B,EAAahrB,GAAY8jB,EAAO4G,SAEtC,OACI,cAAC,WAAD,UACA,eAAC,EAAD,CAAcxnB,aAAa,EAA3B,UACI,cAAC,EAAD,UACI,eAACC,EAAD,CAAWtI,GAAI,GAAf,UACI,cAAC,GAAD,CAAarQ,KAAM++C,EAAapsC,MAAO2mB,EAAO/Q,KAC9C,cAACq3B,GAAD,CACI5/C,KAAMgiD,EAENrtC,aAAcnC,EAAUwvC,GACxBjuC,WAAY,wDAAkB,cAAC,GAAD,CAAYulB,OAAQA,OAClDviB,QAAQ,WACRrH,YAAY,EACZ0yC,QAAS5hB,GALJwhB,QASjB,eAAC,EAAD,WACI,cAACrpC,EAAD,CAAWtI,GAAI,EAAf,SACI,cAACgyC,GAAD,CACIzrC,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5C/L,KAAMiiD,EAENttC,aAAcnC,EACVyvC,GAEJluC,WAAW,QACXgD,QAAQ,WACRrH,YAAY,EACZ0yC,QAAS5hB,GAPJyhB,KAUb,cAACtpC,EAAD,CAAWtI,GAAI,EAAf,SACI,cAACgyC,GAAD,CACIzrC,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5C/L,KAAMkiD,EAENvtC,aAAcnC,EACV0vC,GAEJnuC,WAAW,oCACXgD,QAAQ,WACRqrC,QAAS5hB,GANJ0hB,QAUjB,cAAC,EAAD,UACI,cAACvpC,EAAD,CAAWtI,GAAI,EAAf,SACI,cAAC,GAAD,CACIuG,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5CuJ,QAAS,IAAIzM,KAAK,cAClB0M,eAAe,EACfvV,KAAMmiD,EACNruC,MAAM,2BACNpE,YAAY,EACZ0yC,QAAS5hB,YAtDVlH,EAAO/Q,KCuBf+5B,OA9Cf,YAAoC,IAAV5qB,EAAS,EAATA,QAEtB,OACI,cAAC,GAAD,CAAoBA,QAASA,EAAS13B,KAAM5L,IAAOmH,QAAnD,SACC,SAAC2gC,EAASkkB,EAAWC,GACpB,OACE,qCACGnkB,EAAQhrB,KAAI,SAACooB,GAAD,OACX,cAAC,WAAD,UACE,eAAC,GAAD,WACE,cAACgnB,GAAA,EAAD,CAAa1wC,MAAO,CAAEkH,OAAQ,oBAA9B,SACE,cAAC,GAAD,CAAcwiB,OAAQA,MAExB,cAACinB,GAAA,EAAD,CAAa3wC,MAAO,CAAE+J,eAAgB,YAAtC,SACE,cAAC,IAAD,CACE48B,KAAK,QACL7qC,MAAM,YACN8J,SAAU8jB,EAAO4G,SACjBtwB,MAAO,CAAEud,SAAU,WAAYqzB,OAAQ,SACvC/0C,QAAS40C,EAAa/mB,GALxB,0BANSA,EAAO/Q,OAmBxB,cAAC,EAAD,UACE,cAAC5P,EAAD,CAAWtI,GAAI,EAAGhE,UAAU,OAA5B,SACE,cAAC,KAAD,CACErM,KAAK,gBACL4Y,KAAK,SACL9E,MAAM,oBACNiD,QAAQ,OACRnH,MAAO,CAAEunB,cAAe,cACxB1rB,QAAS20C,EAAU,CAAE73B,GAAI,EAAG3iB,WAAY,wBCqC7C28C,OAnEf,YAAmE,IAAxC7f,EAAuC,EAAvCA,SAAU7tB,EAA6B,EAA7BA,SAAU0D,EAAmB,EAAnBA,OAAQmf,EAAW,EAAXA,QAC/CngB,EAAUC,YAAQ,CAAElF,KAAM,WACbmF,GAAiBF,EAA5B/E,UAA4B+E,EAAjBE,cAF6C,EAGlCvO,oBAAS,GAHyB,mBAGzDwO,EAHyD,KAI1DL,GAJ0D,KAI/CC,eAEXM,EAAQ,uCAAG,WAAOvQ,GAAP,SAAAwQ,EAAA,sEACT6f,EAAQuX,YAAY5nC,EAAMgQ,GADjB,OAGS,oBAAbxC,GACPA,GAAS,GAJE,2CAAH,sDAQRkuB,EAAU,aAIhB54B,qBAAU,WAER,OADAqD,OAAOU,iBAAiB,eAAgB80B,GACjC,WACLx1B,OAAOW,oBAAoB,eAAgB60B,MAE5C,IAEH,IAAMA,EAAY,SAACl3B,GACjBA,EAAEC,iBACFD,EAAEu3B,YAAc,IAGlB,OACE,cAAC,IAAD,2BAAkB9rB,GAAlB,aACE,sBAAMK,SAAUH,EAAaG,EAAUmrB,GAAvC,SACE,eAACtD,GAAD,CACEvyB,MAAM,gBACNwyB,YAAY,EACZE,YAAanoB,EAAaG,EAAUmrB,GACpClD,cAAe6C,EACfhrB,QAASA,EACTa,OAAQA,EANV,UASE,cAAC,EAAD,CAAcrL,MAAM,cAAcwC,YAAU,EAA5C,SACE,cAAC,GAAD,CAAiBgoB,QAASA,MAG5B,cAAC,EAAD,CAAchf,aAAa,EAA3B,SACE,cAAC,EAAD,UACE,cAACC,EAAD,CAAWtI,GAAI,EAAf,SACE,cAAC,GAAD,CACEipB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO4G,aACxC+Y,WAAYrM,YAAStT,IAAO4G,aAAaisB,SAEzClQ,QAAQ,WACRrH,YAAY,EACZuH,WAAY,CAAEie,UAAW,KAHpB9gC,IAAO4G,4BCnEf,eAAsC,EAAnC+4B,UAAoC,IAAzBzM,EAAwB,EAAxBA,SAAa5Y,EAAW,0CACxBxF,mBAAS,IADe,mBAC1CslB,EAD0C,KACpC2Z,EADoC,KAejD,OAZAh+B,qBAAU,WACN,sBAAC,4BAAA0N,EAAA,sEAEuBC,IAAUjC,IAAV,+BAAsCyR,IAF7D,OAESk7B,EAFT,OAGGra,EAASqa,EAAMtxC,KAAI,SAAA81B,GAAC,kCACbA,GADa,IAEhBlzB,MAAOkzB,EAAE5rB,QACTzI,MAAOq0B,EAAE7sB,WANhB,0CAAD,KASF,IAEK,cAACwb,GAAD,2BAAcjnB,GAAd,IAAqBqlB,UAAWvF,MCgI5Bi0B,OApIf,YAAyD,IAA/BnpB,EAA8B,EAA9BA,OAAQ9jB,EAAsB,EAAtBA,SAExB+B,GAF8C,qCAEpClF,YAAe,CAAEC,KAAM,YACpBqwB,GAAUprB,EAArB/E,UAAqB+E,EAAVorB,OAEbv3B,EAAKkuB,EAAO/Q,GACZvoB,EAAOs5B,EAAOmH,SACdjwB,EAAQ8oB,EAAOqa,MACf/6B,EAAO0gB,EAAOopB,iBACdC,EAAsBryC,GAAoBtQ,EAAMwQ,EAAOlN,IAAwBtC,IAC/E4hD,EAAwBtyC,GAAoBtQ,EAAMwQ,EAAOlN,IAAwBjB,MACjFwgD,EAAiBvyC,GAAoBtQ,EAAMwQ,EAAOlN,IAAwBC,OAC1Eu/C,EAAqBxyC,GAAoBtQ,EAAMwQ,EAAOlN,IAAwBE,YAC9Eu/C,EAAmBzyC,GAAoBtQ,EAAMwQ,EAAOlN,IAAwBG,UAC5Eu/C,EAAgB1yC,GAAoBtQ,EAAMwQ,EAAOlN,IAAwBI,WACzEu/C,EAAqB3yC,GAAoBtQ,EAAMwQ,EAAOlN,IAAwBM,gBAC9Es/C,EAAoB5yC,GAAoBtQ,EAAMwQ,EAAOlN,IAAwBO,aAC7Es/C,EAA4B7yC,GAAoBtQ,EAAMwQ,EAAOlN,IAAwBK,iBAErF68B,EAAahrB,GAAY8jB,EAAO4G,SAEtC,OAEI,cADA,CACC,WAAD,WAEI,cAAC,GAAD,CAAalgC,KAAM2iD,EAAqBhwC,MAAO2mB,EAAO1O,MAAO,EAAI0O,EAAO/Q,KACxE,cAAC,GAAD,CAAavoB,KAAM4iD,EAAuBjuC,aAAciE,IACxD,cAAC,EAAD,UACI,cAACD,EAAD,UACI,cAAC,GAAD,CACInD,SAAUgrB,EACVxgC,KAAM6iD,EAENluC,aAAc2kB,EAAOtyB,MACrB+M,WAAY,8CAAQ,cAAC,GAAD,CAAYulB,OAAQA,OACxCriB,WAAY,CAAEie,UAAW,IACzBle,YAAY,8BACZtH,YAAY,GALPmzC,OAUjB,8BACI,cAAC,GAAD,CACIrtC,SAAUgrB,EACVxgC,KAAI,UAAK4Y,GAAL,OAAYxN,GAAZ,OAAiBoF,GACrBmE,cAAc2kB,EAAO8pB,WAAoB9pB,EAAO1O,MAChD9W,MAAM,+CAGd,eAAC,EAAD,WACI,cAAC6E,EAAD,UACI,cAAC+nB,GAAD,CACI1gC,KAAM8iD,EAENnuC,aAAc2kB,EAAO+pB,UACrBvvC,MAAM,aACNpE,YAAY,EACZ8wB,WAAYA,GAJPsiB,KAOb,cAACnqC,EAAD,UACKgqB,EAAM,GAAD,OAAI/pB,GAAJ,OAAWxN,GAAX,OAAgBoF,IAClB,qBAAKZ,MAAO,CAAEQ,WAAY,QAA1B,uBAEA,cAACswB,GAAD,CACI1gC,KAAM+iD,EAENpuC,aAAc2kB,EAAO8pB,SACrBtvC,MAAM,WACNpE,YAAY,EACZ8wB,WAAYA,GAJPuiB,QASrB,eAAC,EAAD,WACI,cAACpqC,EAAD,CAAWtI,GAAI,EAAf,SACI,cAACizC,GAAD,CACIh8B,SAAS,oBACTtnB,KAAMgjD,EAENruC,aAAc2kB,EAAOiqB,cACrBzvC,MAAM,YACNpE,YAAY,EACZ8F,SAAUgrB,GAJLwiB,KAOb,cAACrqC,EAAD,CAAWtI,GAAI,EAAf,SACI,cAACo+B,GAAD,CACIR,UAAW,EACXC,MAAO,EACPG,eAAe,EACfruC,KAAMijD,EAENtuC,aAAc2kB,EAAOkqB,aACrBzvC,WAAW,yBACXrE,YAAY,EACZ8F,SAAUgrB,GAJLyiB,KAOb,cAACtqC,EAAD,CAAWtI,GAAI,EAAf,SACI,cAACo+B,GAAD,CACIR,UAAW,GACXC,MAAO,EACPG,eAAe,EACfruC,KAAMkjD,EAENvuC,aAAc2kB,EAAOmqB,WACrB1vC,WAAW,wBACXrE,YAAY,EACZ8F,SAAUgrB,GAJL0iB,QAQjB,cAAC,EAAD,UACI,cAACvqC,EAAD,CAAWtI,GAAI,GAAf,SACI,cAAC,GAAD,CACIrQ,KAAMmjD,EACNpvC,WAAW,mBACXkD,WAAY,CAAEie,UAAW,KACzBle,YAAY,+BACZtH,YAAY,EACZ8F,SAAUgrB,EACV7rB,aAAc2kB,EAAOoqB,wBArGtBt4C,I,qBCoCRu4C,OA3Df,YAUI,IATFjsB,EASC,EATDA,QAGA9e,GAMC,EARD9E,MAQC,EAPD8vC,cAOC,EANDhrC,MACA5Y,EAKC,EALDA,KAMMuX,GADL,EAJDtD,MAIC,EAHDvE,WAGC,EAFDzP,YAEC,oGACeoS,YAAe,CAC7BC,KAAM,YAIR,OAF6BiF,EAArB/E,UAAqB+E,EAAVorB,MAGjB,cAAC,EAAD,CAAcjqB,aAAa,EAA3B,SACE,cAAC,GAAD,CAAoBgf,QAASA,EAAS13B,KAAMA,EAAM49C,aAAc,SAACtkB,GAAD,OAAYA,EAAOopB,mBAAqB9pC,GAAxG,SACG,SAACsjB,EAASkkB,EAAWC,GACpB,OACE,eAAC,WAAD,WACGnkB,EAAQhrB,KAAI,SAACooB,GAAD,OACX,cAAC,WAAD,UACA,eAAC,GAAD,WACE,cAACinB,GAAA,EAAD,CAAa3wC,MAAO,CAAEwT,aAAa,QAASjT,UAAU,QAASwJ,eAAgB,YAA/E,SACA,cAACgU,GAAA,EAAD,CAAYxW,aAAW,SAASo/B,KAAK,QAAQ9qC,QAAS40C,EAAa/mB,GAAnE,SACA,cAACvf,GAAA,EAAD,CAAS7M,MAAM,kBAAf,SACE,cAAC,KAAD,CAAe0C,MAAO,CAAEwF,SAAU,OAAQ1J,MAAO,eAInD,cAAC40C,GAAA,EAAD,UACE,cAAC,GAAD,CAAgBhnB,OAAQA,UAVbA,EAAO/Q,OAgBxB,cAAC,EAAD,UACE,cAAC5P,EAAD,CAAWtI,GAAI,EAAGT,MAAO,CAAEO,UAAW,UAAtC,SACE,cAAC,KAAD,CACEyI,KAAK,SACL5Y,KAAK,UACL8T,MAAM,iBACNiD,QAAQ,OACRnH,MAAO,CAAEunB,cAAe,cACxB1rB,QAAS20C,EAAU,CAAC73B,GAAI,EAAGm6B,iBAAmB9pC,EAAMhT,WAAY,qBA1BxE,UAAkB5F,UC2Jf6jD,OAjLf,YAA+D,IAAtCnsB,EAAqC,EAArCA,QAAS7iB,EAA4B,EAA5BA,SAAU6tB,EAAkB,EAAlBA,SAElC1C,GAFoD,EAARzkB,KAC3BxR,aAAY,SAACC,GAAD,OAAWA,EAAMwE,QACdgP,WAChCjG,EAAUC,YAAQ,CACtBlF,KAAM,WAGAmF,EAAkCF,EAAlCE,aAAckrB,EAAoBprB,EAApBorB,MAAOpwB,EAAagF,EAAbhF,SAP6B,EAQ5BrJ,oBAAS,GARmB,mBAQnDwO,EARmD,KAQ1CC,EAR0C,KASpDN,EAAWC,cAkBXM,GAdJxjB,IAAO8I,gBACP9I,IAAO+I,mBACP/I,IAAO6I,cACP7I,IAAOmJ,oBACPnJ,IAAOgJ,yBACPhJ,IAAOiJ,4BACPjJ,IAAOkJ,uBAQK,uCAAG,WAAO+J,EAAMyE,GAAb,eAAA+L,EAAA,6DACVisC,EAAc,GACbvxC,EAASne,IAAOgJ,0BAA0B,GAE3C2mD,EAAY,GACXxxC,EAASne,IAAOkJ,wBAAwB,GAEzC0mD,EAAiB,GAChBzxC,EAASne,IAAOiJ,6BAA6B,GAGjDsa,GAAW,GAXE,SAYS+f,EAAQusB,kBAAkB58C,EAAMgQ,EAAU,CAAC,oBAZpD,OAYPoZ,EAZO,OAab9Y,GAAW,GAEI,OAAZ8Y,GAAwC,oBAAb5b,GAC1BA,GAAS,GAhBA,2CAAH,yDAoBRkuB,EAAU,SAACrtB,EAAQ5J,IACpB4J,EAAOxY,iBAAmBwY,EAAOvY,oBAAsBuY,EAAOzY,gBAC/Doa,EAAS3N,aAAK,CACZ0K,QAAS,6EACTiE,SAAU,cAnD0C,EAwDpBnP,mBAAS,GAxDW,mBAwDnD46C,EAxDmD,KAwDtCI,EAxDsC,OAyDdh7C,mBAAS,GAzDK,mBAyDnD86C,EAzDmD,KAyDnCG,EAzDmC,OA0DxBj7C,mBAAS,GA1De,mBA0DnD66C,EA1DmD,KA0DxCK,EA1DwC,KA6DpDC,EAA4BP,EAAcE,EAAiBD,EAAa,GAExEO,EAAsB3hB,EAAMvuC,IAAO8I,iBACnCqnD,EAAwB5hB,EAAMvuC,IAAO+I,oBACrCqnD,EAAoB7hB,EAAMvuC,IAAO6I,eAEvCkN,qBAAU,WACR+5C,OAA+C5tC,KAAb,OAAnBguC,QAAmB,IAAnBA,OAAA,EAAAA,EAAqBr1C,QAArB,OAA4Cq1C,QAA5C,IAA4CA,OAA5C,EAA4CA,EAAqBr1C,OAAS,GACzFk1C,OAAqD7tC,KAAb,OAAtBiuC,QAAsB,IAAtBA,OAAA,EAAAA,EAAwBt1C,QAAxB,OAA+Cs1C,QAA/C,IAA+CA,OAA/C,EAA+CA,EAAwBt1C,OAAS,GAClGm1C,OAA2C9tC,KAAb,OAAjBkuC,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBv1C,QAAnB,OAA0Cu1C,QAA1C,IAA0CA,OAA1C,EAA0CA,EAAmBv1C,OAAS,KACnF,QAACq1C,QAAD,IAACA,OAAD,EAACA,EAAqBr1C,OAAtB,OAA6Bs1C,QAA7B,IAA6BA,OAA7B,EAA6BA,EAAwBt1C,OAArD,OAA4Du1C,QAA5D,IAA4DA,OAA5D,EAA4DA,EAAmBv1C,SAEjF9E,qBAAU,WAER,OADAqD,OAAOU,iBAAiB,eAAgB80B,GACjC,WACLx1B,OAAOW,oBAAoB,eAAgB60B,MAE5C,IACH,IAAMA,EAAY,SAAAl3B,GAChBA,EAAEC,iBACFD,EAAEu3B,YAAc,IAjFwC,EAoFFn6B,mBAAS,MApFP,mBAoFnDu7C,EApFmD,KAoF7BC,EApF6B,OAqFhBx7C,mBAAS,IArFO,mBAqFnDy7C,EArFmD,KAqFpCC,EArFoC,KAuF1Dz6C,qBAAU,WACR,sBAAC,0CAAA0N,EAAA,sEACgDqI,QAAQC,IAAI,CAACrI,IAAU+sC,YAAY,4BAA6B,kBACtG/sC,IAAUjC,IAAI,6CAFxB,mCACYivC,EADZ,KACiCtC,EADjC,KAIKkC,EAAuB,OAACI,QAAD,IAACA,OAAD,EAACA,EAAqB1pC,SAEvC2pC,EAAa,CACfC,KAAI,UAAExC,EAAMx6C,MAAK,SAAAgY,GAAC,OAAIA,EAAE7F,OAAS7U,IAAkBC,eAA/C,aAAE,EAAoD6V,QAC1DuyB,OAAM,UAAE6U,EAAMx6C,MAAK,SAAAgY,GAAC,OAAIA,EAAE7F,OAAS7U,IAAkBE,iBAA/C,aAAE,EAAsD4V,QAC9D6pC,UAAS,UAAEzC,EAAMx6C,MAAK,SAAAgY,GAAC,OAAIA,EAAE7F,OAAS7U,IAAkBG,oBAA/C,aAAE,EAAyD2V,SAExEwpC,EAAiBG,GAXtB,0CAAD,KAaC,IAmDH,IAAMG,EAjDe,CACnB,CACEh4C,MAAO,oBACP4G,MAAM,8BACNrE,SAAUk1C,EAAchX,OACxBwX,UAAW/wD,IAAO8I,gBAClBkoD,aAAc9/C,IAAkBE,OAChC6/C,MAAOvB,EACPwB,aAAclxD,IAAOgJ,0BAEvB,CACE8P,MAAO,uBACP4G,MAAM,iCACNrE,SAAUk1C,EAAcM,UACxBE,UAAW/wD,IAAO+I,mBAClBioD,aAAc9/C,IAAkBG,UAChC4/C,MAAOrB,EACPsB,aAAclxD,IAAOiJ,6BAEvB,CACE6P,MAAO,uBACP4G,MAAM,4BACNrE,SAAUk1C,EAAcK,KACxBG,UAAW/wD,IAAO6I,cAClBmoD,aAAc9/C,IAAkBC,KAChC8/C,MAAOtB,EACPuB,aAAclxD,IAAOkJ,yBAuBe4T,KAnBxC,SAA4Bq0C,GAAU,IAC7Br4C,EAA0Dq4C,EAA1Dr4C,MAAO4G,EAAmDyxC,EAAnDzxC,MAAOrE,EAA4C81C,EAA5C91C,SAAU01C,EAAkCI,EAAlCJ,UAAWC,EAAuBG,EAAvBH,aAAcC,EAASE,EAATF,MACxD,OACE,cAAC,WAAD,UACE,eAAC,EAAD,CAAcn4C,MAAOA,EAAOuC,SAAUA,EAAU+1C,UAAU,EAA1D,UACE,cAAC,GAAD,CAAgB9tB,QAASA,EAAS13B,KAAMmlD,EAAWvsC,KAAMwsC,IACzD,8BACc,IAAVC,GACA,cAAC,GAAD,CAAe/rB,OAAQ5B,EAAQ8L,iBAAiB+hB,EAASD,cAAexxC,MAAOA,EACrE0B,SAAU6vC,EAAQ,MAGhC,qBAAKh5C,UAAU,gBAAf,SACE,cAAC,KAAD,CAAQmJ,SAAUwqB,GAAkBtoB,EAAS1X,KAAK,gBAAgByL,QAASgM,EAAaG,EAAUmrB,GAAUjvB,MAAM,OAAO4D,QAASA,UAVxI,UAAkB6tC,EAASr4C,OAA3B,OAAmCi4C,OAkBvC,OACE,cAAC,IAAD,2BAAkB5tC,GAAlB,aACE,sBAAMK,SAAUH,EAAaG,EAAUmrB,GAAvC,SAEE,eAACtD,GAAD,CAAavyB,MAAM,aAAawyB,YAAY,EAAME,YAAanoB,EAAaG,EAAUmrB,GAAUlD,cAAe6C,EAAUhrB,QAASA,EAAlI,UACE,cAAC,EAAD,UACE,qBAAK7H,wBAAyB,CAAEC,OAAQ20C,OAEzCS,EACAb,GACC,cAAC,EAAD,UACE,qBAAKh4C,UAAW,WAAhB,gIC/KhB,SAASo5C,GAAuB/2C,GAAQ,IAAD,QAI7Bg3C,EAAc37C,aAAY,SAACC,GAAD,OAAWA,EAAMwE,KAAKmS,UAC/CglC,EAAyBj3C,EAAzBi3C,gBAAiBr8B,EAAQ5a,EAAR4a,KAClB5I,EAAS,UAAGglC,EAAYrxD,kBAAf,aAAG,EAAwBse,MACpCuqC,EAAQ,UAAGwI,EAAYpxD,iBAAf,aAAG,EAAuBqe,MAClCizC,EAAe,UAAGF,EAAYtqD,kBAAf,iBAAG,EAAwB88B,oBAA3B,aAAG,EAAsCvlB,MAR3B,EAUHzJ,oBAAS,GAVN,mBAU5BywC,EAV4B,KAUlBC,EAVkB,OAWC1wC,qBAXD,mBAW5Bke,EAX4B,KAWhBy+B,EAXgB,OAYT38C,qBAZS,mBAY5BuwC,EAZ4B,KAYrBC,EAZqB,KAc7B4B,EAAiB,IAAIzyC,KACrB0N,EAAO+kC,EAAe5f,qBACtBtyB,EAAOkyC,EAAezvB,eAAe,QAAS,CAAE0vB,KAAM,UAAUC,OAAQ,UAAWC,QAAQ,IAInGtxC,qBAAU,WACR,sBAAC,gCAAA0N,EAAA,yDACC+hC,GAAY,IACWtwB,EAFxB,gCAEqCxR,IAAUqjB,cAAV,OAAwBwqB,QAAxB,IAAwBA,OAAxB,EAAwBA,EAAiBlvB,YAF9E,0DAEkG3e,IAAU0K,WAAV,OAAqBmjC,QAArB,IAAqBA,OAArB,EAAqBA,EAAiBlvB,YAFxI,kCAEKqvB,EAFL,KAGCD,EAAcC,GAHf,UAImBhuC,IAAUjC,IAAI,2DAAsD8vC,QAAtD,IAAsDA,OAAtD,EAAsDA,EAAiBvoC,OAJxG,SAIOqE,EAJP,SAMWA,EAAI,IACZi4B,EAAQ,UAACj4B,EAAI,UAAL,aAAC,EAAQub,OAGnB4c,GAAY,GAVb,2CAAD,KAYC,CAAC8L,IAIJ3L,QAAKza,SAAS,CACZ0a,OAAQ,YACRC,MAAO,CACL,CAAEztC,IAAK,gFACP,CAAEA,IAAK,2EAA4E0O,WAAY,KAC/F,CAAE1O,IAAK,2EAA4E0O,WAAY,QAInG,IAAMg/B,EAASC,cAAWjD,OAAO,CAC/B3oB,KAAM,CACFw3B,aAAa,SACf/gC,gBAAiB,UACjBqI,WAAY,GACZ6B,YAAa,GACblB,WAAY,YACZ5Y,SAAS,GAEXsiB,QAAS,CACPvnB,UAAW,GACXiT,aAAc,EACdiK,WAAY,GACZ6B,YAAa,GACbnU,QAAS,GAEXs/B,eAAgB,CACdp/B,MAAO,MACPvP,MAAO,UACP0J,SAAU,GACV8F,WAAY,IACZu/B,UAAW,UAEbH,UAAW,CACTr/B,MAAO,MACP7F,SAAU,EACVgO,aAAc,IAEhB4iC,gBAAiB,CACb/qC,MAAO,MACP7F,SAAU,GAEd6wC,kBAAmB,CACfhrC,MAAO,MACPmI,aAAc,IAElBs3B,KAAM,CACJx/B,WAAY,KAEd2/B,MAAO,CACL//B,OAAQ,EACR3K,UAAW,EACXiT,aAAc,GACdiK,WAAY,GACZ6B,YAAa,GACb/T,aAAc,EACdiG,YAAa,GACbhR,WAAY,GACZ2iB,cAAe,GACf9X,MAAO,OAETrS,SAAU,CACNwM,SAAU,GAEd8wC,SAAU,CACN9wC,SAAU,GAEd+wC,WAAY,CACR/wC,SAAU,EACVqlC,UAAW,QACXvrB,YAAa,MAMbisB,EAAa,kBACjB,cAAC,YAAD,UACE,eAAC,QAAD,CAAM5E,KAAK,KAAK3mC,MAAOsqC,EAAO3rB,KAA9B,UACE,eAAC,QAAD,CAAM3e,MAAOsqC,EAAOxiB,QAApB,UACI,cAAC,QAAD,CAAM9nB,MAAOsqC,EAAO+L,kBAApB,SACI,cAAC,QAAD,CAAMr2C,MAAOsqC,EAAOtxC,SAApB,mBAAkC2N,EAAlC,aAA2CnN,OAE/C,eAAC,QAAD,CAAMwG,MAAOsqC,EAAO8L,gBAApB,uQAII,cAAC,QAAD,CAAMp2C,MAAOsqC,EAAOG,eAApB,0BAAwCsL,QAAxC,IAAwCA,OAAxC,EAAwCA,EAAiBvoC,KAAzD,aAAgF,OAAfuoC,QAAe,IAAfA,OAAA,EAAAA,EAAiBvoC,MAAK,EAAvF,gCAJJ,4KAOI,cAAC,QAAD,CAAMxN,MAAOsqC,EAAOgM,SAApB,+BAEA,cAAC,QAAD,CAAMt2C,MAAOsqC,EAAOiM,WAApB,mBAAoC1M,QAG5C,eAAC,QAAD,CAAM7pC,MAAOsqC,EAAOxiB,QAApB,UACE,cAAC,QAAD,CAAM9nB,MAAOsqC,EAAOI,UAApB,2HAGA,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOI,UAApB,2GAGA,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOI,UAApB,gJAIA,eAAC,QAAD,CAAM1qC,MAAOsqC,EAAOI,UAApB,UACE,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOQ,KAApB,uIACA,cAAC,QAAD,qBAAkB,OAARwC,QAAQ,IAARA,OAAA,EAAAA,EAAUkJ,OAAO,GAAG7sB,gBAApB,OAAkC2jB,QAAlC,IAAkCA,OAAlC,EAAkCA,EAAUnkB,MAAM,IAA5D,aAA2E,OAATrY,QAAS,IAATA,OAAA,EAAAA,EAAW0lC,OAAO,GAAG7sB,gBAArB,OAAmC7Y,QAAnC,IAAmCA,OAAnC,EAAmCA,EAAWqY,MAAM,UAExH,eAAC,QAAD,CAAMnpB,MAAOsqC,EAAOI,UAApB,UACE,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOQ,KAApB,oEACA,cAAC,QAAD,2BAAUiL,QAAV,IAAUA,OAAV,EAAUA,EAAiBU,kBAI/B,cAAC,QAAD,CAAMz2C,MAAOsqC,EAAOW,MAApB,SACE,cAAC,QAAD,CAAMjrC,MAAOsqC,EAAOI,UAApB,mBACMlzB,EAAWA,EAAW3f,KAAKm+C,EADjC,mBACoDD,QADpD,IACoDA,OADpD,EACoDA,EAAiB//C,sBAU7E,OACE+zC,EACE,cAACx4B,GAAA,EAAD,IACF,cAAC,mBAAD,CAAiB9U,UAAU,SAASJ,SAAU,cAACkvC,EAAD,IAAgBC,SAAS,4BAAvE,SACG,cAAGC,KAAH,EAAS50B,IAAT,IAAc/O,EAAd,EAAcA,QAAd,EAAuB9B,MAAvB,OAAoC8B,GAAWiiC,EAAW,oBAAsB,4CAMxE2M,sBAAKb,IC8LLc,OArVf,YAAkJ,IAAD,EAArH/wC,EAAqH,EAArHA,SAAUgxC,EAA2G,EAA3GA,cAAev/B,EAA4F,EAA5FA,SAAUvX,EAAkF,EAAlFA,WAAYc,EAAsE,EAAtEA,MAAsE,IAA/Di2C,kBAA+D,SAA5CC,EAA4C,EAA5CA,SAAUC,EAAkC,EAAlCA,YAAaC,EAAqB,EAArBA,kBAElHC,EAAwB,CAAC,OAEzBC,EAAeD,EAAsB31C,KAAI,SAAC61C,GAAD,OAASC,cAAkBC,QAAQF,MAC5EG,EAAkC,eAAnBjgC,EAAS5mB,MAExBkX,EAAUC,YAAQ,CAAElF,KAAM,WAP6G,GAQzFiF,EAA5ChF,SAA4CgF,EAAlCE,aAAkCF,EAApB+nB,SAAoB/nB,EAAVorB,MAEJz5B,mBAAS,OAV8F,mBAUtIi+C,EAVsI,KAUzHC,EAVyH,KAWvIC,EAAkBlQ,mBAGlBmQ,EAAed,EAAcx+C,MAAK,SAAAgY,GAAC,OAAIA,EAAEyZ,cAAgBv0B,IAAwBC,UACvFmiD,EAAa7mB,SAAWxZ,EAAS9mB,YACjCmnD,EAAaC,UAAY,+BAEzB,IAAMC,EAAahB,EAAcx+C,MAAK,SAAAgY,GAAC,OAAIA,EAAEyZ,cAAgBv0B,IAAwBE,QACrFoiD,EAAW/mB,SAAWxZ,EAAS/mB,UAC/BsnD,EAAWD,UAAY,6CAGvB,IAAME,EAAkBjB,EAAcx+C,MAAK,SAAAgY,GAAC,OAAIA,EAAEyZ,cAAgBv0B,IAAwBG,aACpFqiD,EAAoB,OAAGd,QAAH,IAAGA,IAAqB,oEAC9Ca,IACAA,EAAgBhnB,SAAWxZ,EAASrmB,eACpC6mD,EAAgBF,UAAYG,EAAuB,kBAGvD,IAAMC,EAAuB,UAAGnB,EAAcx+C,MAAK,SAAAgY,GAAC,OAAIA,EAAE4nC,qBAA7B,QAA4C,KAEnEC,EAAgBrB,EAAct1C,KAAI,SAAC8O,GACrC,MAAO,CACHrN,MAAOqN,EAAEyZ,aACT3lB,MAAOkM,EAAEunC,eAGZE,GAAmBxgC,EAASrmB,gBAC7BinD,EAAcztC,KAAK,CACfzH,MAAOzN,IAAwBG,UAC/ByO,MAAO8yC,EAAoB,6BAC3BpxC,UAAU,IAKlB,IAAMsyC,EAAoBx3C,GAAoB,kBAAmBE,GAEjE,SAASu3C,EAAa9vB,EAAO+vB,GACzB,OAAId,EACOvhB,YAAmB1N,EAAO+vB,GAE1B13C,GAAoB2nB,EAAOznB,EAAOw3C,GAGjD,IAAMC,EAAoBF,EAAa9gC,EAAS9mB,YAAauE,IAA0B1D,IACjFknD,EAAwBH,EAAa9gC,EAAS9mB,YAAauE,IAA0BG,eACrFsjD,EAAkCJ,EAAa9gC,EAAS9mB,YAAauE,IAA0BC,aAC/FyjD,EAAmCL,EAAa9gC,EAAS9mB,YAAauE,IAA0BM,cAChGqjD,EAAgBN,EAAa9gC,EAAS9mB,YAAauE,IAA0BD,OAK7E6jD,EAAkBP,EAAa9gC,EAAS/mB,UAAWwE,IAA0B1D,IAC7EunD,EAAqBR,EAAa9gC,EAAS/mB,UAAWwE,IAA0BG,eAChF2jD,EAA+BT,EAAa9gC,EAAS/mB,UAAWwE,IAA0BC,aAC1F8jD,EAAgCV,EAAa9gC,EAAS/mB,UAAWwE,IAA0BM,cAE3F0jD,EAAuBX,EAAa9gC,EAASrmB,eAAgB8D,IAA0B1D,IACvF2nD,EAA0BZ,EAAa9gC,EAASrmB,eAAgB8D,IAA0BG,eAC1F+jD,EAAoCb,EAAa9gC,EAASrmB,eAAgB8D,IAA0BC,aACpGkkD,EAAqCd,EAAa9gC,EAASrmB,eAAgB8D,IAA0BM,cAzEkC,EA2EzGkE,mBAAS,MA3EgG,mBA2EtI+xB,GA3EsI,KA2E1HC,GA3E0H,KA+E7I/wB,oBAAS,sBAAC,8BAAA0N,EAAA,0DAEFyvC,EAAaptC,YAFX,uBAGFghB,GAAcosB,EAAaptC,aAHzB,6BAODotC,EAAa7wB,WAPZ,gBAQFyE,GAAc,YARZ,2BAUGgsB,EAVH,kCAWmBpvC,IAAUqjB,cAAcmsB,EAAawB,WAXxD,QAWInb,EAXJ,OAYFzS,GAAcyS,EAAOlmC,MAZnB,yCAemBqQ,IAAU0K,WAAW8kC,EAAawB,WAfrD,QAeInb,EAfJ,OAgBFzS,GAAcyS,EAAOlmC,MAhBnB,4CAkBP,CAAC6/C,EAAa7wB,aAjG4H,OAmG7GvtB,mBAAS,MAnGoG,qBAmGtI6/C,GAnGsI,MAmG5HC,GAnG4H,MAuG7I7+C,oBAAS,sBAAC,8BAAA0N,EAAA,kEACFyvC,QADE,IACFA,OADE,EACFA,EAAc2B,iBADZ,gCAEiBnxC,IAAUoxC,uBAAuB,CAChDthD,YAAa0/C,EAAavgD,YAC1BqE,GAAIk8C,EAAa/+B,GACjBhN,KAAM+rC,EAAalqC,OALrB,QAEIi+B,EAFJ,QAOO9E,OACC4S,EAAO,IAAIC,KAAK,CAAC/N,GAAV,UAAoBiM,EAAavgD,YAAjC,SACbiiD,GAAYG,IATd,2CAYP,QAAC7B,QAAD,IAACA,OAAD,EAACA,EAAc/+B,KAelB,IAAM8gC,GAAiB,SAACv9C,GACpBA,EAAEC,iBAdN,SAAkBu9C,EAAUjO,GACxB,GAAI7tC,OAAO+7C,UAAUC,iBACjBh8C,OAAO+7C,UAAUE,WAAWpO,EAAMiO,OAC/B,CACH,IAAII,EAAOl8C,OAAOvB,SAAS09C,cAAc,KACzCD,EAAKp9C,KAAOkB,OAAOo8C,IAAIC,gBAAgBxO,GACvCqO,EAAKI,SAAWR,EAChBr9C,SAASE,KAAK49C,YAAYL,GAC1BA,EAAKM,QACL/9C,SAASE,KAAK89C,YAAYP,IAM9BI,CAASf,GAAS/oD,KAAM+oD,KAGtB1I,GAAe,SAACv0C,GAClBA,EAAEC,iBACFi9C,GAAY,OAkBVkB,GAAgB,SAACp+C,GACnBA,EAAEC,iBACFq7C,EAAe,MACfC,EAAgBrP,QAAQgS,SA9JiH,GAkKrF9gD,mBAAQ,OAACy+C,QAAD,IAACA,OAAD,EAACA,EAAyBluB,cAlKmD,qBAkKtI0wB,GAlKsI,MAkKhHC,GAlKgH,MAsKvIC,GAAiB7D,EAAcx+C,MAAK,SAAAgY,GAAC,OAAIA,EAAEyZ,eAAiB0wB,MAE5D3pB,GAAahrB,GAAYgxC,EAAcrkC,MAAK,SAAAnC,GAAC,OAAIA,EAAEkgB,YACnDoqB,GAAoD,aAA9BhD,EAAarjC,cAA6D,cAA9BqjC,EAAarjC,cAA8D,OAA9BqjC,EAAarjC,aAAwB,CAAEvY,MAAO,WAAc,GAE3K49C,GAAQ,OAAGP,SAAH,IAAGA,QAAH,EAAGA,GAAU/oD,KAE3B,OACI,sBAAKqM,UAAU,cAAf,UAEI,uBAAO8H,SAAUzE,EAAYkJ,KAAK,OAC9B7D,IAAKsyC,EACLxyC,SAtCS,SAACub,GAClB,GAAI,YAAIA,EAAM7jB,OAAOg+C,OAAOt7C,OAAQ,CAChC,IAAMu7C,EAAep6B,EAAM7jB,OAAOg+C,MAAM,GAClCE,EAAWD,EAAajU,KAAO,KAAO,KAAO,SAC7CmU,EAAOF,EAAa5xC,KACtB6xC,EA9IY,GA+IZrD,EAAe,gCAAD,OA/IF,GA+IE,QACNN,EAAa5zC,SAASw3C,GAG9B1B,GAAYwB,GAFZpD,EAAe,oCAAD,OAAqCP,EAAsBn2C,KAAK,UA+B9Ed,MAAO,CAAE4J,QAAS,UAItB,cAAC,GAAD,CAAaxZ,KAAMioD,EAAmBt1C,MAAO20C,EAAa/+B,KAC1D,cAAC,GAAD,CAAavoB,KAAMqoD,EAAe11C,MAAOo2C,KACzC,cAAC,GAAD,CAAa/oD,KAAMkoD,EAAuBv1C,MAAO20C,EAAa7tB,eAC9D,cAAC,GAAD,CAAaz5B,KAAMmoD,EAAiCx1C,QAAUw3C,KAAyBjlD,IAAwBC,UAC/G,cAAC,GAAD,CAAanF,KAAMooD,EAAkCz1C,QAAUw3C,KAAyBjlD,IAAwBC,UAGhH,cAAC,GAAD,CAAanF,KAAMsoD,EAAiB31C,MAAO60C,EAAWj/B,KACtD,cAAC,GAAD,CAAavoB,KAAMuoD,EAAoB51C,MAAO60C,EAAW/tB,eACzD,cAAC,GAAD,CAAaz5B,KAAMwoD,EAA8B71C,QAAUw3C,KAAyBjlD,IAAwBE,QAC5G,cAAC,GAAD,CAAapF,KAAMyoD,EAA+B91C,QAAUw3C,KAAyBjlD,IAAwBE,QAG5GqiD,GACG,qCACI,cAAC,GAAD,CAAaznD,KAAM0oD,EAAsB/1C,MAAO80C,EAAgBl/B,KAChE,cAAC,GAAD,CAAavoB,KAAM2oD,EAAyBh2C,MAAO80C,EAAgBhuB,eACnE,cAAC,GAAD,CAAaz5B,KAAM4oD,EAAmCj2C,QAAUw3C,KAAyBjlD,IAAwBG,aACjH,cAAC,GAAD,CAAarF,KAAM6oD,EAAoCl2C,QAAUw3C,KAAyBjlD,IAAwBG,gBAI1H,gCACI,uBAAMuK,MAAO,CAAEsL,WAAY,QAA3B,UAAsC+f,GAAtC,KAAoD0rB,EAAc,IAAKA,EAAc,IAAM,GAA3F,QACA,cAAC,GAAD,CAAYrtB,OAAQ+wB,QAExB,8BACK5D,GACG,qCACI,mBAAGp6C,UAAU,cAAcuD,MAAO,CAAE6qC,UAAW,QAA/C,SACI,qBAAK5qC,wBAAyB,CAAEC,OAAM,OAAEu6C,SAAF,IAAEA,QAAF,EAAEA,GAAgB5Z,yBAA2B7gC,MAAO06C,OAE9F,mBAAGj+C,UAAU,cAAcuD,MAAO,CAAE6qC,UAAW,QAA/C,SACI,qBAAK5qC,wBAAyB,CAAEC,OAAM,OAAEu6C,SAAF,IAAEA,QAAF,EAAEA,GAAgB3Z,oBAAsB9gC,MAAO06C,YAKrG,8BACI,cAAC,GAAD,CACI90C,SAAUgrB,GACVxgC,KAAM8nD,EAENjzC,SA/DW,SAACub,GACxBg6B,GAAwBh6B,EAAM7jB,OAAOoG,QA+DzBgC,aAAY,OAAEgzC,QAAF,IAAEA,OAAF,EAAEA,EAAyBluB,aACvC9mB,MAAOw3C,GACPv6C,MAAO,CACHwF,SAAU,OACV+X,SAAU,WACVzhB,MAAO,WAEXqoB,UAAW8zB,GATNC,KAab,qBAAKl4C,MAAO,CAAEO,UAAW,MAAOkd,WAAY,OAAShhB,UAAU,SAA/D,SAGM,WACE,OAAQ89C,IACJ,KAAKjlD,IAAwBC,OACzB,OACI,iCACMmkD,IACE,gCACI,cAAC,KAAD,CACI15C,MAAO,CAAE4J,QAAS,gBAClBhE,SAAUgrB,GACVzpB,QAAQ,OACRjD,MAAM,cACNrI,QAASy+C,KAGb,qBAAKt6C,MAAO,CAAEwF,SAAU,SAAU1J,MAAO,OAAzC,SAAmDy7C,OAG1DmC,IACG,qCACI,mBACI15C,MAAO,CACH+6C,SAAU,OACVj/C,MAAO,UACPkvC,eAAgB,aAEpBtuC,KAAK,IACLb,QAAS49C,GAPb,SASKC,MAEH9oB,IACE,mBACI5wB,MAAO,CACH+6C,SAAU,OACVx9B,SAAU,WACVy9B,KAAM,UAEVt+C,KAAK,IACLb,QAAS40C,GAPb,SASI,cAACrc,GAAA,EAAD,CAAQ33B,UAAU,UAAUuD,MAAO,CAAElE,MAAO,kCAQxE,KAAKxG,IAAwBG,UACzB,OACI,gCACKoiD,EAAgBwB,iBAAmB,+CAClCxB,EAAgBwB,iBACdvC,KAIhB,KAAKxhD,IAAwBE,KACzB,OACI,sBAAKwK,MAAO,CAAE6qC,UAAW,QAAzB,UACK+M,EAAWyB,iBAAmB,+CAC7BzB,EAAWyB,iBACT,gCACKhiC,IAAannB,IAAqBe,cAAgB,cAAC,GAAD,CAAwB8kD,gBAAiB6B,EAAYl+B,KAAMrC,EAAS/mB,UAAUgT,SAAS,8BAC1I,qOAMA,2EAEI,0BAAStD,MAAO,CAAEyd,WAAY,OAA9B,UACI,uBADJ,iDAGI,uBAHJ,sBAKI,uBALJ,8BAgBxB,QACI,OAAO,MA1FjB,SC3OHw9B,OAvBf,YAA2H,IAAD,EAA5FnzB,EAA4F,EAA5FA,QAASliB,EAAmF,EAAnFA,SAAUs1C,EAAyE,EAAzEA,gBAAiBp7C,EAAwD,EAAxDA,WAAYg3C,EAA4C,EAA5CA,SAAUC,EAAkC,EAAlCA,YAAaC,EAAqB,EAArBA,kBAE3F1qB,EAAO,UAAGxE,EAAQwE,eAAX,aAAG,EAAiBK,OAAOuuB,EAAgB9qD,MAClD+qD,EAAkBjjD,OAAOC,OAAOijD,mBAAQ9uB,GAAS,SAAAlc,GAAC,cAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAGirC,mBAG/D,OACI,8BACKF,EAAgB75C,KAAI,SAACg6C,EAAa95C,GAAd,OACjB,cAAC,GAAD,CAAkBo1C,cAAe0E,EAC7BxE,SAAUA,EACVlxC,SAAUA,EACVhF,MAAOY,EACP6V,SAAU6jC,EACVp7C,WAAYA,EACZk3C,kBAAmBA,EACnBD,YAAaA,UC5BlB,OAA0B,oDCoR1BwE,OAhQf,YAAwK,IAA7IC,EAA4I,EAA5IA,oBAAqB1zB,EAAuH,EAAvHA,QAAS7iB,EAA8G,EAA9GA,SAAU6tB,EAAoG,EAApGA,SAAoG,KAA1FoG,UAA0F,EAAxEuiB,+BAAwE,MAA/C,KAA+C,MAAzCC,iBAAyC,MAA/B,KAA+B,MAAzBC,wBAAyB,MAAR,KAAQ,EAE/Jh0C,EAAUC,YAAQ,CAAElF,KAAM,WACxBC,EAAkCgF,EAAlChF,SAAUkF,EAAwBF,EAAxBE,aACZyuB,GADoC3uB,EAAVorB,MACT54B,aAAY,SAACC,GAAD,OAAWA,EAAMwE,SA2C9Cg9C,EAA4B,SAACvkC,GACjC,IAAMwkC,EAAeJ,EAAuBx1C,IAAIoR,EAASjnB,MAEzD,OAAmB,OAAZyrD,QAAY,IAAZA,OAAA,EAAAA,EAAc/7C,YAAa,YAClB,OAAZ+7C,QAAY,IAAZA,OAAA,EAAAA,EAAcC,YAAa,YACb,OAAZD,QAAY,IAAZA,OAAA,EAAAA,EAAcE,YAAa,+BAjCL,WAC5B,IAAMvkC,EAAazV,IAAKu0B,EAAD,iBAA2B9xC,IAAOgH,aACzD,IAAKgsB,EACH,MAAO,6BAGT,OAFuBzV,IAAKyV,EAAY,eAGtC,IAAK,cACH,MAAO,yCACT,IAAK,cACH,MAAO,qBACT,IAAK,mBACH,MAAO,oBACT,IAAK,MACL,IAAK,gBACH,MAAO,MACT,IAAK,aACH,MAAO,cACT,IAAK,WACL,QACE,MAAO,6BAauDwkC,GAA0B,wBACpF,IAQJC,EAAqB,SAAC5kC,GAE1B,OAAOA,EAAShnB,YAAc,OAASurD,EAA0BvkC,IAGnE9c,qBAAU,WACR,sBAAC,sCAAA0N,EAAA,sDACOi0C,EAAqB,CACzBn6C,IACEu0B,EADE,iBAEQ9xC,IAAOuJ,mCAEnBgU,IAAKu0B,EAAD,iBAA2B9xC,IAAOwJ,iCAElCmuD,EAAwBD,EAAmBzuB,QAC/C,SAAC2uB,EAAWC,GAMV,OALCA,GAAe,IAAI/6C,KAAI,SAACg7C,IACU,IAA7BA,EAAGjD,gBAAgBt2C,OACrBq5C,EAAU5xC,KAAK8xC,MAGZF,IAET,IAGO56C,EAAI,EApBd,YAoBiBA,EAAI26C,EAAsB98C,QApB3C,wBAqBSk9C,EAAoBJ,EAAsB36C,GAC1Cs8B,EAAa/7B,IAAKw6C,EAAmB,oBAtB9C,kBAwB2Br0C,IAAU0K,WAAWkrB,GAxBhD,OAwBW7rB,EAxBX,OAyBKsqC,EAAiB,MAAYtqC,GAAWA,EAAQpa,KAzBrD,0DAoBmD2J,IApBnD,wEAAD,KA8BC,CAAC80B,IAjGiK,MAmGvIh9B,oBAAS,GAnG8H,mBAmG9JwO,EAnG8J,KAmGrJC,EAnGqJ,KAoG/JN,EAAWC,cAEXM,EAAQ,uCAAG,WAAOvQ,EAAMyE,GAAb,SAAA+L,EAAA,sEAGbF,GAAW,GAHE,SAIQ3F,IAAQ8wB,WAC3Bz7B,EACA,GACA,CAAC,+BAAgC,oBAPtB,cASW,oBAAbwN,GACTA,GAAS,GAVE,gDAabwC,EACE3N,aAAK,CACH0K,QAAS,KAAEA,QACXiE,SAAU,aAhBD,yBAoBbV,GAAW,GApBE,4EAAH,wDAwBRorB,EAAU,SAACrtB,GACfrC,QAAQwiB,IAAI,MAAOngB,IAGrBvL,qBAAU,WAER,OADAqD,OAAOU,iBAAiB,eAAgB80B,GACjC,WACLx1B,OAAOW,oBAAoB,eAAgB60B,MAE5C,IAEH,IAAMA,EAAY,SAACl3B,GACjBA,EAAEC,iBACFD,EAAEu3B,YAAc,IAGZmE,EAAgB,SAACpgC,GACrB,OAAOuK,IAAKu0B,EAAD,iBAA2B9+B,EAA3B,YAGPglD,EAAoB5kB,EACxB7B,YACEvxC,IAAOoJ,4BACPkH,IAA0BC,cAGxB0nD,EAAiB7kB,EACrB7B,YACEvxC,IAAOqJ,yBACPiH,IAA0BC,cAGxB2nD,EAAsB9kB,EAC1B7B,YACEvxC,IAAOsJ,8BACPgH,IAA0BC,cAI9BwF,qBAAU,WAENoI,EAAS,+BADP65C,EACuClnD,IAAwBC,OACxDknD,EACgCnnD,IAAwBE,KAI/DF,IAAwBG,aAG3B,CAAC+mD,EAAmBC,EAAgBC,IAEvC,IAAMC,EAA6B,CACjCzsD,IAAqBU,oBACrBV,IAAqBW,mBACrBX,IAAqBY,uBACrBZ,IAAqBa,SAGvB,OACE,cAAC,IAAD,2BAAkB4W,GAAlB,aACE,sBAAMK,SAAUH,EAAaG,EAAUmrB,GAAvC,SACE,eAACtD,GAAD,CACEvyB,MAAM,cACNwyB,YAAY,EACZE,YAAanoB,EAAaG,EAAUmrB,GACpClD,cAAe6C,EACfhrB,QAASA,EALX,UAQG0zC,GAGS,OAATE,QAAS,IAATA,OAAA,EAAAA,EAAWx+B,cAAe,cAACnU,EAAD,CAAWtI,GAAI,GAAf,SACzB,sBAAKhE,UAAU,OAAf,UACA,4EACU,OAATi/C,QAAS,IAATA,OAAA,EAAAA,EAAWx+B,cAAgB,WAC1B,OAAQw+B,EAAUrnC,cACd,IAAK,QACH,OAAO,qBAAK5X,UAAU,SAAf,0BACT,IAAK,SACH,OACE,sBAAKA,UAAU,SAASuD,MAAO,CAAElE,MAAO,WAAxC,UACE,wEAA0C,4BAAI6/C,IAA9C,yCACA,qBAAK17C,wBAAyB,CAACC,OAAQw7C,EAAU5a,yBAEvD,IAAK,UACL,IAAK,sBACL,IAAK,qBACL,IAAK,UACL,IAAK,UACH,OAAO,qBAAKrkC,UAAU,SAAf,6BACT,QACE,OAAO,8BAjBa,QAwB9B,cAAC,EAAD,UACE,cAAC,EAAD,UACE,cAACsM,EAAD,CAAWtI,GAAI,GAAf,SACE,qBAAKjF,GAAG,oBAAoBiB,UAAU,QAAtC,SACGkgD,EAA2Bx6C,QAAO,SAAAiO,GAAC,OA5NvB5Y,EA4N+C4Y,EAAE7f,cA3NvEwR,IAAKu0B,EAAD,iBAA2B9+B,IADV,IAACA,KA4N+D8J,KAAI,SAAA+V,GAAQ,OAClF,cAAC,GAAD,CACE0/B,YAAakF,EAAmB5kC,GAChCyQ,QAASA,EACTozB,gBAAiB7jC,EACjBvX,WAAY27C,EAAuB37C,WAAWuX,EAASjnB,MACvD0mD,SACE,oDAEI,mBAAGr6C,UAAU,SAASC,KAAMkgD,GAAyB1C,SAAS,8BAA9D,qCAFJ,0ECnOb2C,GA5BgB,SAAC,GAAwB,IAAtBC,EAAqB,EAArBA,eAChC,OACE,qBAAKrgD,UAAU,gBAAf,SACE,wBAAOA,UAAU,QAAjB,UACE,qBAAIA,UAAU,gBAAd,UACE,uCACA,2CACA,uCACA,4CACA,2CACA,qDAGDqgD,EAAex7C,KAAI,SAACsK,EAAMpK,GAAP,OAClB,qBAAI/E,UAAU,aAAqBikC,WAAS,EAA5C,UACE,6BAAK90B,EAAKtO,QACV,6BAAKsO,EAAKmxC,YACV,uCAAQnxC,EAAKoc,MAAMjN,MAAnB,cAA8BnP,EAAKoc,MAAMC,OACzC,6BAAKrc,EAAKoxC,WACV,6BAAKpxC,EAAKqxC,UACV,6BAAKrxC,EAAKsxC,qBANoB17C,YCwB3BglB,GAnCE,SAAC,GAAoB,IAAlB2uB,EAAiB,EAAjBA,WAAiB,EACS77C,mBAAS,IADlB,mBAC5BwjD,EAD4B,KACZK,EADY,KA8BnC,OA3BA5iD,qBAAU,WACR,sBAAC,kEAAA0N,EAAA,sDACOm1C,EAAc,GADrB,OAAAn1C,EAAA,KAEiBktC,GAFjB,qDAEY3zC,EAFZ,oBAG2BiW,GACtB,oBAD6B,UAE7B09B,EAAW3zC,UAFkB,iBAE7B,EAAemyC,qBAFc,aAE7B,EAA8B5wC,OALnC,OAGSg6C,EAHT,OAOSpH,EAAW,CACfr4C,MAAK,UAAE63C,EAAW3zC,UAAb,iBAAE,EAAepK,aAAjB,aAAE,EAAsB2L,MAC7Bg6C,YACA/0B,MAAO,CACLjN,MAAOvU,KAAM,UAAC2uC,EAAW3zC,UAAZ,iBAAC,EAAeiyC,iBAAhB,aAAC,EAA0B1wC,OAAO6D,OAAO,aACtDqhB,KAAK,UAAAktB,EAAW3zC,UAAX,mBAAegyC,gBAAf,eAAyBzwC,OAC1ByD,KAAM,UAAC2uC,EAAW3zC,UAAZ,iBAAC,EAAegyC,gBAAhB,aAAC,EAAyBzwC,OAAO6D,OAAO,aAC9C,YAENo2C,SAAQ,UAAE7H,EAAW3zC,UAAb,iBAAE,EAAeoyC,oBAAjB,aAAE,EAA6B7wC,MACvCk6C,QAAO,UAAE9H,EAAW3zC,UAAb,iBAAE,EAAeqyC,kBAAjB,aAAE,EAA2B9wC,MACpCm6C,iBAAgB,UAAE/H,EAAW3zC,UAAb,iBAAE,EAAesyC,uBAAjB,aAAE,EAAgC/wC,OAEpDq6C,EAAY5yC,KAAKmrC,GApBpB,uBAsBCwH,EAAkBC,GAtBnB,2CAAD,KAwBC,CAACjI,IAGF,cAACkI,GAAD,CAAiBP,eAAgBA,EAAe3zB,MAAM,EAArB,OAAwBgsB,QAAxB,IAAwBA,OAAxB,EAAwBA,EAAY91C,WCvB1Di+C,OAbf,YAAoC,IAAbC,EAAY,EAAZA,SAErB,OACE,qBAAK9gD,UAAU,sBAAf,SACE,qBAAKuD,MAAO,CAACuF,OAAQ,OAAQF,WAAY,0BAA2BC,aAAc,OAAlF,SACE,qBAAKtF,MAAO,CAACqL,MAAM,GAAD,OAAKkyC,EAAL,KAAkBh4C,OAAQ,OAAQF,WAAY,UAAWC,aAAc,eAAzF,SACE,sBAAKyZ,MAAM,OAAO/e,MAAO,CAACuF,OAAQ,OAAQqiB,WAAY,OAAQpW,YAAa,OAAQ1V,MAAO,UAAWwP,WAAY,QAAjH,UAA2HiyC,EAA3H,wBCwGKC,OAjGf,YAAkE,IAAhC11B,EAA+B,EAA/BA,QAAS7iB,EAAsB,EAAtBA,SAAU6tB,EAAY,EAAZA,SAE7CnrB,EAAUC,YAAQ,CACtBlF,KAAM,WAEwCmF,GAAiBF,EAAzD7B,OAAyD6B,EAAjD9F,UAAiD8F,EAAtC/E,UAAsC+E,EAA3BhF,SAA2BgF,EAAjBE,cALe,GAMxC1N,aAAY,SAACC,GAAD,OAAWA,EAAMwE,QACdgP,UAERtU,oBAAS,IATwB,mBASxDwO,EATwD,KAS/CC,EAT+C,KAUzDN,EAAWC,cAEXM,EAAQ,uCAAG,WAAOvQ,EAAMyE,GAAb,SAAA+L,EAAA,sEAEbF,GAAW,GAFE,SAGQ3F,IAAQ8wB,WAAWz7B,GAH3B,cAKW,oBAAbwN,GACTA,GAAS,GANE,gDASbwC,EAAS3N,aAAK,CACZ0K,QAAS,KAAEA,QACXiE,SAAU,aAXC,yBAcbV,GAAW,GAdE,4EAAH,wDAmBRorB,EAAU,SAACrtB,EAAQ5J,KAIzB3B,qBAAU,WAER,OADAqD,OAAOU,iBAAiB,eAAgB80B,GACjC,WACLx1B,OAAOW,oBAAoB,eAAgB60B,MAE5C,IAEH,IAAMA,EAAY,SAAAl3B,GAChBA,EAAEC,iBACFD,EAAEu3B,YAAc,IAIlB,OACE,cAAC,IAAD,2BAAkB9rB,GAAlB,aACE,sBAAMK,SAAUH,EAAaG,EAAUmrB,GAAvC,SACE,eAACtD,GAAD,CAAavyB,MAAM,sBAAsBwyB,YAAY,EAAME,YAAanoB,EAAaG,EAAUmrB,GAAUlD,cAAe6C,EAAUhrB,QAASA,EAA3I,UAEI,eAAC2L,GAAA,EAAD,CAAOhL,SAAS,OAAhB,UACI,kUAIA,mBAAGzI,MAAO,CAACO,UAAW,OAAtB,0NAMN,cAAC,EAAD,CAAcuI,aAAa,EAA3B,SACE,cAAC,EAAD,UACE,eAACC,EAAD,CAAWtI,GAAI,GAAf,UACE,uBACA,cAAC,GAAD,CAAYipB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO+J,SAAU4Y,QAASwrB,GACrExuB,WAAW,yGACXrE,YAAY,EACZsH,YAAY,GAAG3K,UAAU,OAAOooB,eAAe,SAEjD,uBACA,cAAC,GAAD,CAAY6E,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOgK,SAAU2Y,QAASwrB,GACrExuB,WAAW,iGACXiD,YAAY,GAAG3K,UAAU,OAAOooB,eAAe,SAEjD,uBACA,cAAC,GAAD,CAAY6E,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOiK,SAAU0Y,QAASwrB,GACrExuB,WAAW,+LACXiD,YAAY,GAAG3K,UAAU,OAAOooB,eAAe,SAEjD,uBACA,cAAC,GAAD,CAAY6E,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOkK,SAAUyY,QAASwrB,GACrExuB,WAAYrM,YAAStT,IAAOkK,SAAS2oB,SAAUjQ,YAAY,GAAG3K,UAAU,OAAOooB,eAAe,yBCOjG44B,OA5Ff,YAAkE,IAAhCx4C,EAA+B,EAA/BA,SAAU6tB,EAAqB,EAArBA,SAAUhL,EAAW,EAAXA,QAE5Cnc,EAAOmc,EAAQnc,KAIfhE,GAHiBxN,aAAY,SAACC,GAAD,OAAUA,EAAMwE,QACbgP,UAEtBhG,YAAQ,CACtBlF,KAAM,YAEwCmF,GAAwBF,EAAhE7B,OAAgE6B,EAAxD9F,UAAwD8F,EAA7C/E,UAA6C+E,EAAlChF,SAAkCgF,EAAxBE,cAAckrB,EAAUprB,EAAVorB,MAExD2qB,EAAsB3qB,EAAMvuC,IAAO2C,kBACnCw2D,EAAuB5qB,EAAMvuC,IAAO4C,oBAZmB,EAc/BkS,oBAAS,GAdsB,mBActDwO,EAdsD,KAc7CC,EAd6C,KAevDN,EAAWC,cAEXM,EAAQ,uCAAG,WAAOvQ,EAAMyE,GAAb,SAAA+L,EAAA,sEAEbF,GAAW,GAFE,SAGQ3F,IAAQ8wB,WAAWz7B,EAAK,GAAG,IAHnC,cAIU,oBAAbwN,GACRA,GAAS,GALE,gDASbwC,EAAS3N,aAAK,CACZ0K,QAAS,KAAEA,QACXiE,SAAU,aAXC,yBAcbV,GAAW,GAdE,4EAAH,wDAkBVorB,EAAU,SAACrtB,EAAQ5J,KAIvB3B,qBAAU,WAER,OADAqD,OAAOU,iBAAiB,eAAgB80B,GACjC,WACLx1B,OAAOW,oBAAoB,eAAgB60B,MAE5C,IACH,IAAMA,EAAY,SAAAl3B,GAChBA,EAAEC,iBACFD,EAAEu3B,YAAc,IAGlB,OACE,cAAC,IAAD,2BAAkB9rB,GAAlB,aACE,sBAAMK,SAAUH,EAAaG,EAAUmrB,GAAvC,SACE,cAACtD,GAAD,CAAavyB,MAAM,4BAA4BwyB,YAAY,EAAME,YAAanoB,EAAaG,EAAUmrB,GAAUlD,cAAe6C,EAAUhrB,QAASA,EAAjJ,SAEE,cAAC,EAAD,UACE,cAAC,EAAD,UACE,eAACiB,EAAD,WACE,eAAC,EAAD,WACE,oFAAuD4C,EAAK,EAA5D,MAAkEA,EAAlE,kBAAsF,sBAAMlP,UAAU,WAAhB,kBACtF,cAAC,EAAD,UACE,cAACsM,EAAD,UACE,cAAC,GAAD,CACE2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO2C,kBACxC4b,MAAO26C,EACP59C,YAAY,WAMpB,eAAC,EAAD,WACE,0GAA6E6L,EAA7E,MAAsFA,EAAK,EAA3F,IAA8F,sBAAMlP,UAAU,WAAhB,kBAC9F,cAAC,EAAD,UACE,cAACsM,EAAD,UACE,cAAC,GAAD,CACE2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO4C,oBACxC2b,MAAO46C,EACP79C,YAAY,0BCnEvB89C,OAff,YAAiE,IAAzCl0B,EAAwC,EAAxCA,OAAQ9jB,EAAgC,EAAhCA,SAAUzB,EAAsB,EAAtBA,WAAerF,EAAO,kDAG5D,OAAO,cAAC+/B,GAAD,aACC16B,WAAY,qCAAGA,EAAH,IAAe,cAAC,GAAD,CAAYulB,OAAQA,OAC/CtiB,YAAajD,EACbk6B,UAAW,EACXz4B,SAAUA,GAAY8jB,EAAO4G,SAC7BmO,eAAe,EACfruC,KAAMs5B,EAAOmH,UACT/xB,KC+OD++C,OAxOf,YAAgF,IAAlD/1B,EAAiD,EAAjDA,QAA2B7iB,GAAsB,EAAxC64C,SAAwC,EAAtB74C,UAAU6tB,EAAY,EAAZA,SAM3DnrB,GAHiBxN,aAAY,SAACC,GAAD,OAAWA,EAAMwE,QACdgP,UAEtBhG,YAAQ,CACtBlF,KAAM,YAGmBE,GAA6C+E,EAAhE7B,OAAgE6B,EAAxD9F,UAAwD8F,EAA7C/E,WAAWD,EAAkCgF,EAAlChF,SAAUkF,EAAwBF,EAAxBE,aAAckrB,EAAUprB,EAAVorB,MAVe,EAY/Cz5B,oBAAS,GAZsC,mBAYtEwO,EAZsE,KAY7DC,EAZ6D,KAavEN,EAAWC,cACXy3B,EAAsBpM,EAAM,kBAE5B/qB,EAAQ,uCAAG,WAAOvQ,EAAMyE,GAAb,eAAA+L,EAAA,sEAIbF,GAAW,IACiB,IAAxBo3B,IACF1nC,EAAKjT,IAAO4B,gBAAkB,QAG1B23D,EAAiB,CAAC,kBACHtmD,EAAI,YAEvBsmD,EAAevzC,KAAKurB,YAAmBvxC,IAAOgH,WAAY+H,IAA0BxB,cAZzE,SAeQqQ,IAAQ8wB,WAAWz7B,EAAM,GAAIsmD,GAfrC,cAgBW,oBAAb94C,GACTA,GAAS,GAjBE,kDAoBbwC,EAAS3N,aAAK,CACZ0K,QAAS,KAAEA,QACXiE,SAAU,aAtBC,yBAyBbV,GAAW,GAzBE,6EAAH,wDA6BRorB,EAAU,SAACrtB,EAAQ5J,KAIzB3B,qBAAU,WAER,OADAqD,OAAOU,iBAAiB,eAAgB80B,GACjC,WACLx1B,OAAOW,oBAAoB,eAAgB60B,MAE5C,IAEH,IAAMA,EAAY,SAAAl3B,GAChBA,EAAEC,iBACFD,EAAEu3B,YAAc,IAGZiM,EAAsB3M,EAAMvuC,IAAO+G,iBA7DoC,EA8DjD+N,mBAAS,MA9DwC,mBA8DtE0kD,EA9DsE,KA8D9DC,EA9D8D,KA+D7E1jD,qBAAU,WACR,IAAMyO,EAAOpG,EAAUpe,IAAO+G,iBAE9B0yD,EAAUj1C,KACT,CAAC02B,IAnEyE,MAuEzBpmC,oBAAS,GAvEgB,mBAuEtEqmC,EAvEsE,KAuElDue,EAvEkD,KAwE7E3jD,qBAAU,WAEN2jD,EADa,QAAXF,GAA+B,UAAXA,KAKvB,CAACA,IA9EyE,MAgF7B1kD,oBAAS,GAhFoB,mBAgFtEymC,EAhFsE,KAgFpDoe,EAhFoD,KAiFvEre,EAAoB/M,EAAMvuC,IAAOiB,sBACvC8U,qBAAU,YAEkB,IAAtBulC,GAAoD,SAAtBA,GAChCqe,GAAoB,GACpBx7C,EAASne,IAAOgB,UAAW,KAE3B24D,GAAoB,KAErB,CAACre,IAIJ,IAQMO,EAAavY,EAAQnc,KAE3B,OACE,cAAC,IAAD,2BAAkBhE,GAAlB,aACE,sBAAMK,SAAUH,EAAaG,EAAUmrB,GAAvC,SACE,eAACtD,GAAD,CAAavyB,MAAM,wBAAwBwyB,YAAY,EAAME,YAAanoB,EAAaG,EAAUmrB,GAAUlD,cAAe6C,EAAUhrB,QAASA,EAA7I,UACE,eAAC,EAAD,WACE,wDADF,sEAEqE,mBAAGpL,KAAK,WAAR,qBAFrE,gBAIA,cAAC,EAAD,CAAcY,MAAM,kCAApB,SACE,cAAC,EAAD,UACE,cAAC,EAAD,CAAcA,MAAM,uBAAuBwL,aAAa,EAAxD,SACE,eAAC,EAAD,WACE,cAACC,EAAD,UACE,cAAC,GAAD,CAAgB2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO+G,iBACtDqa,UAAU,EACV9F,YAAY,EACZkH,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5C+H,MAAM,wCAIV,cAAC,GAAD,CAAkB0B,UAAU,EAAM8jB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOgH,YAAa8wC,OAAQoD,IAE/F,cAAC32B,EAAD,UACE,cAAC,GAAD,CACEnD,UAAU,EACV8jB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO+B,sBACxCygB,WAAY,SAAC9K,GAAkB,UAAVA,EAAE+K,KAAmB/K,EAAEC,kBAC5C2D,YAAY,EACZoE,MAAM,iCACNsuB,WAAW,sBASC,IAAvBmN,GACC,eAAC,EAAD,CAAcriC,MAAM,gBAApB,UACE,cAAC,EAAD,UACE,cAACyL,EAAD,UACE,cAAC,GAAD,CAAenD,UAAU,EAAM8jB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOgB,WAAY2e,WAAW,gBAC5FrE,WAAYigC,EAAkB34B,YAAY,sBAGhD,cAAC,EAAD,UACE,cAAC2B,EAAD,UACE,cAAC,GAAD,CAAenD,UAAU,EAAM8jB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOiB,sBAAuBye,MAAM,oGAMnF,QAAxBw7B,GAAyD,UAAxBA,GAChC,cAAC,EAAD,CAAcpiC,MAAM,uBAApB,SACE,cAAC,GAAD,CAAeosB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO2B,mBAAoB+d,MAAO,+GAA0Em8B,EAA1E,YAI9D,IAAvBV,EACC,cAAC,EAAD,CAAcriC,MAAOxF,YAAStT,IAAO4B,gBAAgBixB,SAArD,SACE,eAAC,EAAD,WACE,cAACtO,EAAD,UACE,cAAC,GAAD,CAAenD,UAAU,EAAM9F,YAAaq/B,EAC1CzV,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO4B,gBAAiB+d,WAAW,kBAAkBiD,YAAY,kBAAkBi3B,UAAW,IAAMI,eAAe,MAExJ,cAAC11B,EAAD,CAAW23B,WAAS,EAAC52B,WAAW,WAAhC,SACE,8BACE,cAAC,GAAD,CAAUlE,UAAU,EAAMxV,KAAK,iBAAiB8T,MAAM,0DAK5D,GAGJ,cAAC,EAAD,CAAc5G,MAAM,4BAApB,SACE,cAAC,EAAD,UACE,cAACyL,EAAD,UACE,cAAC,GAAD,CACE2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO8B,KACxC6d,WAAW,YACXk6B,UAAW,IACXtoB,IAAK,UAMb,cAAC,EAAD,CAAczY,MAAM,4BAApB,SACE,cAAC,EAAD,UACE,cAACyL,EAAD,UACE,cAAC,GAAD,CACE2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO6B,KACxC8d,WAAW,YACX4R,IAAK,UAMb,cAAC,EAAD,CAAczY,MAAM,uDAApB,SACE,cAAC,EAAD,UACE,cAACyL,EAAD,UACE,cAAC,GAAD,CAAe2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOkB,wBAK7D,cAAC,EAAD,CAAcojB,aAAa,EAA3B,SACE,eAAC,EAAD,WACE,cAACC,EAAD,CAAWpJ,GAAI,GAAf,SACE,cAAC,GAAD,CAAY+pB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOmB,iBAAkBwe,WAAW,4BAAuBiD,YAAY,gCAEtH,cAAC2B,EAAD,CAAWpJ,GAAI,GAAf,SACE,cAAC,GAAD,CAAY+pB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOoB,cAAeue,WAAW,mBAAmBiD,YAAY,qCCjPhHg3C,GACK,eAIH,eAA+G,EAA5Gj6B,UAA4G,EAAjGzM,SAAkG,IAAD,IAAvF2mC,kBAAuF,MAA1ED,GAA0E,MAA1CE,qBAA0C,MAA1B,kBAAK,GAAqB,EAAXx/C,EAAW,uEAEjGxF,mBAAS,IAFwF,mBAEnHslB,EAFmH,KAE7G2Z,EAF6G,KAoB1H,OAhBAh+B,qBAAU,WACN,sBAAC,4BAAA0N,EAAA,sEACwBC,IAAUjC,IAAV,+CADxB,OACSqvB,EADT,OAEGiD,EAASjD,EAAO7H,QAAO,SAAC8wB,EAAQnkD,GAQ5B,OAPIkkD,EAAclkD,IACdmkD,EAAQ/zC,KAAR,2BACOpQ,GADP,IAEI8J,MAAO9J,EAAMvC,KACbkL,MAAO3I,EAAMikD,MAGdE,IACT,KAXL,0CAAD,KAaF,IAEK,cAACx4B,GAAD,yBAAU3e,YAAY,SAAYtI,GAAlC,IAAyCqlB,UAAWvF,MC4GhD4/B,OAjHf,YAA0C,IAAX90B,EAAU,EAAVA,OAErB/d,EAAO+d,EAAOlc,KAGd7F,EAAUlF,YAAe,CAC3BC,KAAM,WAEFC,EAAoBgF,EAApBhF,SAAUowB,EAAUprB,EAAVorB,MARmB,EAUPz5B,mBAAS,IAVF,mBAUhCivB,EAVgC,KAUtBwnB,EAVsB,KAWrCx1C,qBAAU,WACDmvB,EAAOlc,MAGZ,sBAAC,4BAAAvF,EAAA,sEACyBC,IAAUswB,sBAAsB9O,EAAOvyB,YAAauyB,EAAOlc,MADpF,OACS5I,EADT,OAEGmrC,EAAYnrC,GAFf,0CAAD,KAID,CAAC8kB,EAAOlc,OAEX,IAAMixC,EAA+B1oB,YAAmBvxC,IAAOwD,eAAgB8J,IAAuBS,eAChGmsD,EAAoB3rB,EAAM,iBAE1B6c,EAAc7c,EAAMgD,YAAmBvxC,IAAOwD,eAAgB8J,IAAuBQ,OACrFu9C,GAAuC,OAAXD,QAAW,IAAXA,OAAA,EAAAA,EAAa7sC,SAAUlR,IAEzD0I,qBAAU,WACFmvB,EAAOgJ,WAGPgsB,GACA/7C,EAAS87C,EAzCY,SA2C1B,CAACC,IAEJ,IACMC,EAD6B,OAAXj1B,GAAmBA,EAAOgJ,UACT,WAAH,UAAmB/mB,EAAnB,aAA4BA,EAAO,GAAGzS,WAAWi1B,QAAQ,IACzF7wB,EAAK,sDAAkDqhD,EAAlD,iBAEX,GAAe,OAAXj1B,GAAmBA,EAAOgJ,UAC1B,OACI,cAAC,EAAD,CAAcp1B,MAAOA,IAM7B,IAAMshD,EAzDuB,QAyDIl1B,EAAOqY,aAGxC,OAEI,eAAC,EAAD,CAAczkC,MAAOA,EAArB,UACI,cAAC,EAAD,UACI,eAACyL,EAAD,WACI,cAAC,GAAD,CAAa3Y,KAAM2lC,YAAmBvxC,IAAOwD,eAAgB8J,IAAuBW,MAAOsS,aAAa,YAExG,cAAC,GAAD,CAAgBjF,YAAY,EACxBsH,YAAY,UACZhX,KAAM2lC,YAAmBvxC,IAAOwD,eAAgB8J,IAAuBQ,MACvE6xB,UAAWoE,EACXkM,iBAAiB,EACjBtwB,WAAW,6BACXgD,QAAQ,kBAGnB0oC,GACG,qCACI,eAAC,EAAD,WACI,cAAC9mC,EAAD,UACI,cAAC,GAAD,CAAOjJ,YAAa4+C,EAAmBtuD,KAAMquD,EAA8B74C,SAAU84C,EAAmBv6C,WAAW,mBAEvH,cAAC4E,EAAD,UACI,8BACI,cAAC,GAAD,CAAU3Y,KAAK,gBAAgB8T,MAAM,4DAA4Da,aAAc65C,QAGvH,cAACnrC,GAAA,EAAD,CAAOhL,SAAS,UAAUhM,UAAU,qBAApC,SACI,gMAGR,cAAC,EAAD,UACI,cAACsM,EAAD,UACI,cAAC,GAAD,CAAOjJ,YAAY,EAAM1P,KAAM2lC,YAAmBvxC,IAAOwD,eAAgB8J,IAAuBU,eAAgB2R,WAAW,qBAGnI,eAAC,EAAD,WACI,cAAC4E,EAAD,UACI,cAAC81C,GAAD,CAAa/+C,YAAY,EAAM1P,KAAM2lC,YAAmBvxC,IAAOwD,eAAgB8J,IAAuBH,qBAAsByV,YAAY,QAAQlD,MAAM,QAAQiD,QAAQ,eAE1K,cAAC4B,EAAD,UACI,cAAC,GAAD,CAAOjJ,YAAY,EAAM1P,KAAM2lC,YAAmBvxC,IAAOwD,eAAgB8J,IAAuBF,oBAAqBuS,WAAW,OAAOiD,YAAY,OAAOD,QAAQ,kBAG1K,cAAC,EAAD,CAAU1K,UAAU,SAApB,SACI,cAACsM,EAAD,CAAWtM,UAAU,sBAArB,SACI,sBAAKA,UAAU,SAAf,UACI,sEAAwC,mBAAGC,KAAK,8CAA8CC,OAAO,SAA7D,8BAAxC,6IACA,kNCtGjBmiD,OAbf,YAAiC,IAATp1B,EAAQ,EAARA,OAEpB,OACI,cAAC,EAAD,CAAcpsB,MAAK,2CAAsCosB,EAAOlc,MAAQ1E,aAAa,EAArF,SACI,cAAC,EAAD,UACI,cAACC,EAAD,UACI,cAAC,GAAD,CAAgBjJ,YAAY,EAAM4pB,OAAQA,EAAQxlB,MAAM,mBAAmB66C,WAAW,4BCmE3FC,OAjEf,YAAyG,EAA1ErzC,KAA2E,IAAD,IAAhEszC,wBAAgE,SAAvCh6C,EAAuC,EAAvCA,SAAU6tB,EAA6B,EAA7BA,SAAUnqB,EAAmB,EAAnBA,OAAQmf,EAAW,EAAXA,QAKpFngB,GAFiBxN,aAAY,SAACC,GAAD,OAAWA,EAAMwE,QAEpCgJ,YAAQ,CACpBlF,KAAM,YAEQmF,GAAwBF,EAAlChF,SAAkCgF,EAAxBE,cARmF,GAQ3DF,EAAVorB,MAEFz5B,oBAAS,IAV8D,mBAU9FwO,EAV8F,KAW/FL,GAX+F,KAWpFC,eAEXM,EAAQ,uCAAG,WAAOvQ,EAAMyE,GAAb,SAAA+L,EAAA,6DACbxQ,EAAKjT,IAAO+C,uBAAgE,QAAtCkQ,EAAKjT,IAAO+C,wBAA0E,GAAtCkQ,EAAKjT,IAAO+C,uBADrF,SAGPugC,EAAQuX,YAAY5nC,EAAMgQ,GAHnB,OAIW,oBAAbxC,GACPA,GAAS,GALA,2CAAH,wDAURkuB,EAAU,aAIhB54B,qBAAU,WAEN,OADAqD,OAAOU,iBAAiB,eAAgB80B,GACjC,WACHx1B,OAAOW,oBAAoB,eAAgB60B,MAEhD,IACH,IAAMA,EAAY,SAAAl3B,GACdA,EAAEC,iBACFD,EAAEu3B,YAAc,IAIpB,OACI,cAAC,IAAD,2BAAkB9rB,GAAlB,aACI,sBAAMK,SAAUH,EAAaG,EAAUmrB,GAAvC,SAEI,eAACtD,GAAD,CAAavyB,MAAM,iBAAiBwyB,YAAY,EAAME,YAAanoB,EAAaG,EAAUmrB,GAAUlD,cAAe6C,EAAUhrB,QAASA,EAASa,OAAQA,EAAvJ,UAEI,cAAC,GAAD,CAAqB+gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOwD,mBAG3Di3D,GACE,cAAC,EAAD,UACI,cAAC,EAAD,UACI,cAACl2C,EAAD,UACI,cAAC,GAAD,CAAU3Y,KAAM5L,IAAO+C,sBAAuB2c,MAAM,mFAMpE,cAAC,GAAD,CAAewlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOuD,6B,WC3C5Dm3D,OApBf,YAA2E,IAAzCrtC,EAAwC,EAAxCA,IAAKq2B,EAAmC,EAAnCA,SAAUrsC,EAAyB,EAAzBA,QAASiM,EAAgB,EAAhBA,QAAS9H,EAAO,EAAPA,MAGzDm/C,EAAgBttC,EAAIlF,cAAwC,KAAjB,OAARu7B,QAAQ,IAARA,OAAA,EAAAA,EAAU79B,aAAwBwH,EAAI9E,iBAE/E,OAAI8E,EAAIjE,WAGJiE,EAAIlF,YAFI,6BAKRkF,EAAI9E,iBACI,sBAAM/M,MAAO,CAACwR,YAAc,OAA5B,iCAGR,cAAC,KAAD,CAAQ1J,QAASA,EAAS1X,KAAK,SAAS8T,MAAM,SAASiD,QAAQ,UAAUvB,SAAUu5C,EAAetjD,QAASA,EAASmE,MAAOA,KC6FpHo/C,OA9Gf,YAAyD,IAAxBt3B,EAAuB,EAAvBA,QAAS+zB,EAAc,EAAdA,aA0EhCwD,EAbN,WACI,GAAIv3B,EAAQw3B,gBACR,MAAO,GAEX,IAAMjD,EAAcv0B,EAAQy3B,gBAAgBjzB,QAC5C,GAA2B,IAAvB+vB,EAAYh9C,OACZ,MAAO,CAAC,iBAEZ,IAAMmgD,EAAQnD,EAAY/6C,KAAI,SAAAooB,GAAM,OA5DxC,SAA4BA,GACxB,IAAMrS,EAAWqS,EAAOvyB,YAClBsoD,EAAc5D,EAAa51C,IAAIyjB,EAAOvyB,aAC5C,GAAIsoD,EAAY9c,UACZ,OAAO,KAEX,GAAItrB,EAASsS,gBAAkBz5B,IAAqBU,oBAAoBR,KAAKu5B,cAAc,CACvF,IAAM1X,EAAU6V,EAAQ4c,cAAchb,EAAO2xB,gBAC7C,OAAI,OAACppC,QAAD,IAACA,OAAD,EAACA,EAAS6W,UAGP,gBAFI,kBAKf,GAAIzR,EAASsS,gBAAkBz5B,IAAqBW,mBAAmBT,KAAKu5B,cACxE,MAAO,eAGX,GAAItS,EAASsS,gBAAkBz5B,IAAqBa,QAAQX,KAAKu5B,cAAc,CAAC,IAAD,EACrEnS,EAAasQ,EAAQ8L,iBAAiBpvC,IAAOgH,YAC7CwyD,EAAM,OAAGxmC,QAAH,IAAGA,OAAH,EAAGA,EAAYwS,KAC3B,GAAe,QAAXg0B,GAA8B,iBAAVA,EACpB,MAAO,MAEX,GAAe,eAAXA,EAEA,OAAoB,KADAxmC,EAAWkqB,QAEpB,uBAEJ,mBAGX,IAAMge,EAAgB,UAAG53B,EAAQ8L,iBAAiBpvC,IAAO+B,6BAAnC,aAAG,EAAuDskC,SAChF,OAAI60B,GAAoBl5C,KAAOk5C,GAAkBC,QAAzB,UAAoC73B,EAAQnc,KAAK,EAAjD,WACT,oBAEX8zC,EAAY3D,WACL,KAEJ,kBAGX,OAAIzkC,EAASsS,cAAkBz5B,IAAqBY,uBAAuBV,KAAKu5B,cACrE,KAiB6Bi2B,CAAmBl2B,MAASvnB,QAAO,SAAA25B,GAAC,OAAU,OAANA,KAEhF,OADiB,YAAO,IAAI5rB,IAAIsvC,IAIDK,GA1EiB,EA2EQvmD,mBAAS,IA3EjB,mBA2E7CwmD,EA3E6C,KA2ErBC,EA3EqB,KAgGpD,OAlBAxlD,qBAAU,WAEN,sBAAC,4BAAA0N,EAAA,+EAEkCqI,QAAQC,IAAI8uC,EAA2B/9C,KAAI,SAAAw6B,GAAC,OAAI5zB,IAAU+sC,YAAY,sBAAuBnZ,OAF/H,OAEakkB,EAFb,OAIOD,EAA0BC,GAJjC,gDAOOv8C,QAAQwiB,IAAR,MAPP,wDAAD,KAWD,CAACg6B,KAAKC,UAAUb,KAMf,gCACI,oBAAI5iD,UAAU,sBAAd,qCACA,oBAAIA,UAAU,OAAd,SACKqjD,EAAuBx+C,KAAI,SAAC6+C,EAAav/C,GAAd,OACxB,6BACI,qBAAKX,wBAAyB,CAACC,OAAQigD,EAAY30C,YAD9C5K,YCtG7B,SAASw/C,GAAT,GAA6B,IAAT12B,EAAQ,EAARA,OAEhB,OACI,+BACI,6BAAKA,EAAOpf,cACZ,6BAAKof,EAAOmX,0BACZ,6BAAKnX,EAAOoX,wBAwCTuf,OArBf,YAAsC,IAAVv4B,EAAS,EAATA,QAExB,GAAIA,EAAQw3B,gBACR,OAAO,oDAGX,IACMgB,EArBV,SAAkCh0B,GAE9B,IAFsC,EAElClkB,EAAS,GAFyB,eAGnBkkB,GAHmB,IAGtC,2BAA2B,CAAC,IAAnB5C,EAAkB,QAClBthB,EAAOmK,MAAK,SAAAnC,GAAC,OAAIA,EAAEirC,iBAAmB3xB,EAAO2xB,mBAC9CjzC,EAAOoC,KAAKkf,IALkB,8BAOtC,OAAOthB,EAcUm4C,CADDz4B,EAAQy3B,gBAAgBjzB,SAGxC,OACI,kCACI,+BACI,uDACA,+CACA,wDAEHg0B,EAASh/C,KAAI,SAAAw6B,GAAC,OAAI,cAACskB,GAAD,CAAW12B,OAAQoS,WCA5C0kB,GAAe,MA8xCNC,OAxxCf,WAAsC,IAAD,cACzB90C,EAAS+0C,sBAAT/0C,KACFy9B,EAAa1wB,SAAS/M,GAEtBhE,EAAUC,YAAQ,CACpBlF,KAAM,WAEFC,EAAkCgF,EAAlChF,SAAUkF,EAAwBF,EAAxBE,aAGZ+L,GAHoCjM,EAAVorB,MAEflf,wBACOC,MACxBvZ,qBAAU,WACN,GAAIqZ,EAAQ,CACR,IAAMmzB,EAAU1qC,SAAS2qC,cAAcpzB,GACnCmzB,GACAA,EAAQE,eAAe,CAAEC,SAAU,cAG5C,CAACtzB,IAlB6B,MAoBSta,mBAAS,IApBlB,mBAoB1By7C,EApB0B,KAoBXC,EApBW,KAqBjCz6C,qBAAU,WACN,sBAAC,oCAAA0N,EAAA,sEACuBC,IAAUjC,IAAI,2CADrC,OACS2sC,EADT,OAES+N,EAAS,CACXvL,KAAI,UAAExC,EAAMx6C,MAAK,SAAAgY,GAAC,OAAIA,EAAE7F,OAAS7U,IAAkBC,eAA/C,aAAE,EAAoD6V,QAC1DuyB,OAAM,UAAE6U,EAAMx6C,MAAK,SAAAgY,GAAC,OAAIA,EAAE7F,OAAS7U,IAAkBE,iBAA/C,aAAE,EAAsD4V,QAC9D6pC,UAAS,UAAEzC,EAAMx6C,MAAK,SAAAgY,GAAC,OAAIA,EAAE7F,OAAS7U,IAAkBG,oBAA/C,aAAE,EAAyD2V,SAExEwpC,EAAiB2L,GAPpB,0CAAD,KAUD,IAEH,IAAMxZ,EAAe,IAAIpE,GAAkBzpC,mBAAS,MAAOknD,IAOrDI,GALczZ,EAAaG,OAAOhuC,mBAAS,MAAO,KAAM,CAC1D9U,IAAOC,WACPD,IAAOE,YAGWyiD,EAAaG,OAAOhuC,mBAAS,MAAO,KAAM,CAC5D9U,IAAO+D,gBACP/D,IAAOgE,gBACPhE,IAAOiE,uBAELo4D,EAAiB1Z,EAAaG,OAAOhuC,mBAAS,MAAO,KAAM,CAC7D9U,IAAOqD,qBAELi5D,EAAiB3Z,EAAaG,OAAOhuC,mBAAS,MAAO,KAAM,CAC7D9U,IAAO2C,iBACP3C,IAAO4C,qBAEL25D,EAAoB5Z,EAAaG,OAAOhuC,mBAAS,MAAO,KAAM,CAChE9U,IAAO+B,qBACP/B,IAAOgH,WACPhH,IAAO+G,gBACP/G,IAAOkB,eACPlB,IAAOmB,gBACPnB,IAAOoB,aACPpB,IAAOqB,yBACPrB,IAAO4B,eACP5B,IAAO6B,IACP7B,IAAO8B,IACP9B,IAAO2B,kBACP3B,IAAOgB,UACPhB,IAAOiB,uBAELu7D,EAAuB7Z,EAAaG,OAAOhuC,mBAAS,MAAO,KAAM,CACnE9U,IAAOwD,eACPxD,IAAOuD,mBAELk5D,EAAgB9Z,EAAaG,OAAOhuC,mBAAS,MAAO,KAAM,CAC5D9U,IAAOmH,QACPnH,IAAO4G,cAEL81D,EAAwB/Z,EAAaG,OAAOhuC,mBAAS,MAAO,KAAM,CACpE9U,IAAOkH,aACPlH,IAAOiH,gBACPjH,IAAO4D,yBACP5D,IAAOsG,sBACPtG,IAAOuG,0BACPvG,IAAOoG,cACPpG,IAAOqG,eAGLs2D,EAAWha,EAAaG,OAAOhuC,mBAAS,MAAO,KAAM6tC,EAAa3rB,WACxE2lC,EAAS1d,gBAAiB,EAG1B,IAAM2d,EAAaja,EAAaG,OAAOhuC,mBAAS,MAAOiuC,mBAAU,CAC7D/iD,IAAOoJ,4BACPpJ,IAAO6J,2CACP7J,IAAO2J,wCACP3J,IAAOyJ,uCAGPzJ,IAAOwJ,8BACPxJ,IAAOuJ,mCAGLszD,EAAYla,EAAaG,OAAOhuC,mBAAS,MAAOiuC,mBAAU,CAC5D/iD,IAAO6I,cACP7I,IAAOkJ,uBACPlJ,IAAOgJ,yBACPhJ,IAAOiJ,4BACPjJ,IAAOmJ,sBAGL2zD,EAAYna,EAAaG,OAAOhuC,mBAAS,MAAOiuC,mBAAU,CAC5D/iD,IAAO+J,QACP/J,IAAOgK,QACPhK,IAAOiK,QACPjK,IAAOkK,UAjHsB,EAuHC4K,mBAAS,IAvHV,mBAuH1BoiD,EAvH0B,KAuHf6F,EAvHe,KAwH3B1vC,EAAM,IAAI1F,KAAgBuvC,GAxHC,EA0HKpiD,mBAAS,MA1Hd,oBA0H1ByS,GA1H0B,MA0Hby1C,GA1Ha,MA4H3BC,GADU,IAAIx1C,KAAYF,IACFU,UAAU28B,GAElCsY,GAAe,CACjBC,cAAa,OAAEF,SAAF,IAAEA,QAAF,EAAEA,GAAex0C,QAAQ,OACtC20C,gBAAe,OAAEH,SAAF,IAAEA,QAAF,EAAEA,GAAex0C,QAAQ,gBACxC40C,iBAAgB,OAAEJ,SAAF,IAAEA,QAAF,EAAEA,GAAex0C,QAAQ,kBACzC60C,cAAa,OAAEL,SAAF,IAAEA,QAAF,EAAEA,GAAex0C,QAAQ,eAlIT,GAqImB3T,mBAAS,IArI5B,qBAqI1ByoD,GArI0B,MAqINC,GArIM,MAsI3BpgC,GAAsBmgC,GAEtBE,GAAiB,SAACzqD,GAEpB,IAAIkyB,EAASyd,EAAavT,iBAAiBp8B,GACvCuL,EAAK,OAAG2mB,QAAH,IAAGA,OAAH,EAAGA,EAAQmB,SAEpB,OAAc,IAAV9nB,GAA4B,SAAVA,GAA8B,SAAVA,EAC/B,OACG,IAAVA,GAA6B,UAAVA,GAA+B,UAAVA,EACjC,KACJ,IAjJsB,GAoJ6BzJ,mBAAS,MApJtC,qBAoJ1B4oD,GApJ0B,MAoJDC,GApJC,MAqJjC5nD,qBAAU,WACN,sBAAC,4BAAA0N,EAAA,sEACsBC,IAAU+sC,YAAY,iBAAkB,gCAD9D,OACS7oC,EADT,OAEG+1C,GAA0B,OAAC/1C,QAAD,IAACA,OAAD,EAACA,EAAMZ,SAFpC,0CAAD,KAID,IAKHjR,oBAAS,sBAEL,0CAAA0N,EAAA,sEACgCC,IAAUmI,WAAW,OADrD,UACU+xC,EADV,OAEIZ,GAAeY,GACT1wC,EAAU,IAAIzF,KAAYm2C,GACV1wC,EAAQjF,UAAU28B,GAJ5C,wBAMQ3hC,GACI3N,aAAK,CACD0K,QAAS,0CACTiE,SAAU,aAGlBkB,GAAQa,KAAK,CACTC,SAAU,aAAcrQ,MAAO,CAC3BsQ,KAAMf,GAAQ9L,SAAS4M,YAdvC,kCAoBI08B,EAAakB,WAAWe,GACxBiZ,KArBJ,UAuBqD/xC,QAAQC,IAAI,CACzDrI,IAAUgO,eAAe,MAAOkzB,GAChClhC,IAAUjC,IAAI,sBAAuB,CAAE0F,KAAMy9B,EAAYkZ,WAAY,UAzB7E,2CAuBWC,EAvBX,KAuB4B9xC,EAvB5B,KA2BI8wC,EAAagB,GACRA,EAAgBplC,WACjBjV,IAAUs6C,iBAAiB,MAAOpZ,GA7B1C,UAgC2B94B,QAAQC,IAAIE,EAAgBnP,KAAI,SAAA8O,GAAC,OAAIlI,IAAUmI,WAAWD,EAAErB,iBAhCvF,QAgCUyB,EAhCV,OAiCU1B,EAAa2B,EAAgBnP,KAAI,SAAAuQ,GACnC,IAAMH,EAAUlB,EAASpY,MAAK,SAAAiV,GAAC,OAAIA,EAAE9C,MAAQsH,EAAI9C,eACjD,OAAO7B,YAAqBwE,EAASG,MAEzCmwC,GAAsBlzC,GArC1B,4CAsCG,IAEP,IAAMwnB,GAAiBn8B,aAAY,SAACC,GAAD,OAAWA,EAAMwE,QAzMnB,GA0M+BtF,mBAAS,MA1MxC,qBA0M1BmpD,GA1M0B,MA0MAC,GA1MA,MA2M3BjH,GAAyB,IAAInZ,GAAemgB,IAC5CE,GAA0BlH,GAAuBx1C,IAAI/V,IAAqBa,QAAQX,MAClFwyD,GAA2BnH,GAAuB3jD,SAAStT,IAAOkH,cA7MvC,GA+Ma4N,mBAAS,MA/MtB,qBA+M1B+oB,GA/M0B,MA+MTC,GA/MS,MAoN3BugC,GAAkB,uCAAG,4BAAA56C,EAAA,yDACC,OAApBoa,GADmB,yCAEZ,CAAEI,WAAY,MAAOJ,qBAFT,uBAIWna,IAAUjC,IAAI,4BAA6B,CAAE0F,KAAMy9B,IAJ9D,cAIjB0Z,EAJiB,OAKvBxgC,GAAmBwgC,GALI,kBAMhB,CAAErgC,WAAY,MAAOJ,gBAAiBygC,IANtB,2CAAH,qDApNS,SAuOlBT,KAvOkB,8EAuOjC,8BAAAp6C,EAAA,6DACQuT,EADR,sBACwB4lC,EAAW5lC,WADnC,CAC8C,qBAD9C,SAEuCtT,IAAU0lC,oBAAoB4S,GAAcpX,EAAY5tB,GAF/F,OAEUunC,EAFV,OAGIL,GAA4BK,GAHhC,4CAvOiC,sBA6OjC,IAAMlhD,GAAY1H,aAAY,SAACC,GAAD,OAAWA,EAAMwE,QA7Od,GA0PCtF,mBAZE,CAChC0pD,YAAY,EACZC,mBAAmB,EACnBC,oBAAoB,EACpBC,sBAAsB,EACtBC,kBAAkB,EAClBC,iBAAiB,EACjBvzC,cAAc,EACdusC,aAAa,EACblH,YAAY,EACZmO,oBAAoB,IAxPS,qBA0P1BC,GA1P0B,MA0PfC,GA1Pe,MA2P3B75C,GAAUjL,uBAQV+kD,GAAqB7hC,GAAoBviB,OAAS,EAElDqkD,GAAkBvc,EAAa98B,YAAco5C,GAAqB,IAAMxhD,KAAKkrC,MAAM,GAAK,GAAKhG,EAAauc,gBAAkB,KAAOD,GAAqB,GAAK,IAC7JtE,IAAiBhY,EAAa98B,WAGpC9P,qBAAU,WACD4kD,KAAiB,OAACttC,QAAD,IAACA,OAAD,EAACA,EAAKlF,cACxBlF,GACI3N,aAAK,CACD0K,QAAS,6DACTiE,SAAU,eAIvB,CAAC02C,KAEJ,IAAMwE,GAAa,uCAAG,WAAOC,GAAP,SAAA37C,EAAA,sEACZk/B,EAAakB,WAAWe,GADZ,OAElBiZ,KACA//B,GAAmB,MACnBlgB,IAAQ8iC,iCACRse,GAAaI,GALK,2CAAH,sDAOb39C,GAAM,SAACzO,EAAUqsD,GAAe,IAAD,EAC3B9gD,GAAQ,UAAAlB,GAAUkP,OAAOvZ,UAAjB,eAA4BuL,QAAS,GACnD,OAAI8gD,GAAa9gD,EAAM1D,OAASwkD,EACrB9gD,EAAMomB,MAAM,EAAG06B,GAAa,MAE5B9gD,GAIT+jB,GAAgB,SAACtvB,GAAc,IAAD,IAChC,iBAAOqK,GAAUkP,OAAOvZ,UAAxB,iBAAO,EAA4BqvB,kBAAnC,aAAO,EAAwC9jB,OAc7C+gD,GAAe,SAACF,GAClBJ,GAAaI,IAGXG,GAAkBliD,GAAUkP,OAAOvsB,IAAOiH,iBAC1Cu4D,GAAeniD,GAAUkP,OAAOvsB,IAAOkH,cAxTZ,GA4TP4N,mBAAS,MA5TF,qBA4T1B2qD,GA5T0B,MA4TnBC,GA5TmB,MA8TjC3pD,qBAAU,WACN,IAAMid,EAAa2vB,EAAavT,iBAAiBpvC,IAAOgH,YACnDgsB,IAGmB,QAApBA,EAAWwS,MAAsC,kBAApBxS,EAAWwS,KACxCk6B,IAAS,GAETA,IAAS,MAEd,IAxU8B,OA6UH5qD,mBAAS,IA7UN,qBA6U1B6qD,GA7U0B,MA6UjBC,GA7UiB,MA8UjC7pD,qBAAU,WACN,sBAAC,sCAAA0N,EAAA,sDACSo8C,EAAwB,CAC1BtiD,IAAKu0B,GAAD,iBAA2B9xC,IAAOoJ,8BACtCmU,IAAKu0B,GAAD,iBAA2B9xC,IAAOqJ,2BACtCkU,IAAKu0B,GAAD,iBAA2B9xC,IAAOsJ,iCAGpCw2D,EAAuBD,EAAsBliD,QAC/C,SAACoiD,GAAD,OAAgD,IAAvCxiD,IAAKwiD,EAAK,4BAGd/iD,EAAI,EAXhB,YAWmBA,EAAI8iD,EAAqBjlD,QAX5C,wBAYamlD,EAAuBF,EAAqB9iD,GAC5Cs8B,EAAa/7B,IAAKyiD,EAAsB,oBAbrD,kBAeoCt8C,IAAUqjB,cAAcuS,GAf5D,OAeiBtmB,EAfjB,OAgBWgtC,EAAoB,MAAYhtC,GAAcA,EAAW3f,KAhBpE,0DAWoD2J,IAXpD,uBAoBG4iD,GAAWE,GApBd,yDAAD,KAsBD,CAAChuB,KAGJ,IAAMsB,GAAgB,SAACpgC,GACnB,OAAOuK,IAAKu0B,GAAD,iBAA2B9+B,EAA3B,YAGTglD,GAAoB5kB,GACtB7B,YACIvxC,IAAOoJ,4BACPkH,IAA0BC,cAG5B0nD,GAAiB7kB,GACnB7B,YACIvxC,IAAOqJ,yBACPiH,IAA0BC,cAG5B2nD,GAAsB9kB,GACxB7B,YACIvxC,IAAOsJ,8BACPgH,IAA0BC,cAIlCwF,qBAAU,WAEFoI,EAAS,+BADT65C,GACyClnD,IAAwBC,OAC1DknD,GACkCnnD,IAAwBE,KAI7DF,IAAwBG,aAGjC,CAAC+mD,GAAmBC,GAAgBC,KAIvCniD,qBAAU,WACN,IAAMid,EAAazV,IAAKu0B,GAAD,iBAA2B9xC,IAAOgH,aACzD,GAAIgsB,EAAY,CACZ,IAAMitC,EAAiB1iD,IAAKyV,EAAY,cACxC,GAAuB,QAAnBitC,EAEA,YADAP,IAAS,GAKb,GAAuB,kBAAnBO,EAEA,YADAP,IAAS,MAMlB,CAAC5tB,KA/Z6B,OAma2Bh9B,mBAAS,MAnapC,qBAma1BorD,GAna0B,MAmaDC,GAnaC,MAoajCpqD,qBAAU,WAAO,IAAD,IAENujC,EAAahX,GAActiC,IAAOwD,gBAClC48D,GAAqC,OAAf9mB,GAAuBA,GAAcjsC,OAAtC,UAA+DgQ,GAAUkP,OAAOvsB,IAAOwD,uBAAvF,iBAA+D,EAAyCsgC,oBAAxG,aAA+D,EAAuDvlB,OACjJ4hD,GAAyBC,KAE1B,CAACtuB,KAEJ,IAAMnD,GAAU,SAACrtB,EAAQ5J,GACrBuL,GACI3N,aAAK,CACD0K,QAAS,sGACTiE,SAAU,aAGlBhF,QAAQwiB,IAAI,QAASngB,EAAQ5J,IAG3BuL,GAAWC,cAtbgB,GAybepO,oBAAS,GAzbxB,qBAyb1BurD,GAzb0B,MAybRC,GAzbQ,MA8b3BC,GAAY,uCAAG,8BAAA98C,EAAA,6DACX+8C,EADW,+BAAA/8C,EAAA,MACQ,WAAOxQ,EAAMyE,GAAb,eAAA+L,EAAA,sEACf7F,IAAQ8wB,WAAWz7B,GADJ,uBAEfyQ,IAAU+8C,kBAAkB,MAAO7b,GAFpB,cAGrB0b,IAAoB,GAHC,SAIU58C,IAAUgO,eAAesqC,GAAcpX,GAJjD,OAIf8b,EAJe,OAKrB3D,EAAa2D,GALQ,2CADR,iEASPC,EAAiBt9C,EAAam9C,EAAkB7xB,IATzC,SAUPgyB,IAVO,OAWb19C,GACI3N,aAAK,CACD0K,QAAS,yBACTiE,SAAU,aAdL,gDAkBbhF,QAAQuC,MAAR,MACAyB,GACI3N,aAAK,CACD0K,QAAS,KAAEA,QACXiE,SAAU,aAtBL,yDAAH,qDA9be,GAmeenP,mBAAS,IAnexB,qBAme1B8rD,GAne0B,MAmeRC,GAneQ,MAqejC9qD,oBAAS,sBAEL,4BAAA0N,EAAA,sEACwBC,IAAUjC,IAAI,gCADtC,OACU2sC,EADV,OAEIyS,GAAoBzS,GAFxB,2CAGG,IAIP,IAtMoBvpB,GAAWC,GA5CXg8B,GAkPdC,GAAyBrE,EAAsBttB,iBAAiBpvC,IAAO4D,0BAA0ByiC,SAEvG,OACI,cAAC,IAAD,2BAAkBljB,GAAlB,aACI,cAAC,EAAD,UACI,sBAAKvX,KAAK,cAAV,UACI,qBAAKqM,UAAU,aAAf,SACI,qBAAKA,UAAU,UAAf,SACI,sBAAKA,UAAU,qBAAf,UACI,qBAAKA,UAAU,mBAAf,SACI,qBAAKG,IAAI,eAAeO,IAAI,mBAEhC,sBAAKV,UAAU,6BAAf,UACI,qBAAIA,UAAU,sBAAd,0CACkC2sC,EADlC,MACiDA,EAAa,EAC1D,cAACP,GAAD,OAEJ,wLACA,8EAAiD6Y,GAAaC,cAC1D,uBADJ,mCAC8CD,GAAaE,gBACvD,uBAFJ,0CAEqDF,GAAaG,iBAC9D,uBAHJ,qBAGgCH,GAAaI,iBAC7C,mBAAGplD,KAAK,IAAIb,SAxQxBypD,GAwQ4C,WAxQlC,SAACppD,GAC3BA,EAAEC,iBACFwN,GAAQa,KAAK86C,MAsQe,yCAMfT,GACG,cAAC/Y,GAAD,CAAoBvH,OA9CzB,WACXugB,IAAoB,IA6CgCp7C,QAAS,CACzC0C,KAAMo0C,GACN70C,KAAMy9B,EACN9rC,MAAO,kCAIX,sBAAKb,UAAU,0BAAf,UACI,qBAAKuD,MAAO,CAAEO,UAAW,QAAzB,SACI,cAAC,GAAD,CAAag9C,SAAUmG,OAG3B,sBAAK1jD,MAAO,CAAEkL,OAAQ,iBAAkBC,QAAS,OAAQ5K,UAAW,QAApE,UACI,sBAAKP,MAAO,CAAE,WAAc,OAAQwF,SAAU,QAA9C,sBAEI,cAACwjC,GAAD,CAAkBlhB,QAASq5B,OAE7BoC,GAAUP,WAkBR,cAAC,GAAD,CACIl7B,QAAS84B,EACT37C,SAAU,kBACN0+C,GAAc,2BAAKJ,IAAN,IAAiBP,YAAY,MAC9ClwB,SAAU,kBACNgxB,GAAa,2BAAKP,IAAN,IAAiBP,YAAY,QAtBjD,eAACnzB,GAAD,CACIvyB,MAAM,wBACNqL,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAAS84B,IACnC9wB,YAAY,EACZC,YAAa,kBAAMyzB,GAAa,2BAAKD,IAAN,IAAiBP,YAAY,MAJhE,UAMI,sBAAKvmD,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,mEACA,cAAC,GAAD,CAAUrM,KAAK,mBAAmB2S,MAAO,cAAC,GAAD,CAAa6W,WAAW,EAAML,SA7P3F8P,GA6P+G7kC,IAAO+D,gBA7P3G+gC,GA6P4H9kC,IAAOgE,gBA1PvJ,CAAEyxB,QAFOhU,GAAIojB,IAEFnP,QADFjU,GAAIqjB,aA6PY,sBAAK7sB,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,wCACA,cAAC,GAAD,CAAUrM,KAAK,uBACX2S,MAAOk/C,GAAez9D,IAAOiE,6BAc3C86D,GAAUN,kBAkBR,cAAC,GAAD,CACIn7B,QAAS+4B,EACT57C,SAAU,kBACN0+C,GAAc,2BAAKJ,IAAN,IAAiBN,mBAAmB,MAErDnwB,SAAU,kBACNgxB,GAAa,2BAAKP,IAAN,IAAiBN,mBAAmB,QAvBxD,cAACpzB,GAAD,CACIvyB,MAAM,qBACNqL,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAAS+4B,IACnC/wB,YAAY,EACZC,YAAa,kBACTyzB,GAAa,2BAAKD,IAAN,IAAiBN,mBAAmB,MALxD,SAQI,sBAAKxmD,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,gCACA,cAAC,GAAD,CACIrM,KAAK,qBACL2S,MAvRjB,SAACkE,GACxB,IAAIu+C,EAASJ,GAAiBhtD,MAAK,SAACwT,GAAD,OAAUA,EAAKrB,MAAQtD,KAC1D,OAAOu+C,EAASA,EAAOh6C,QAAU,KAqRci6C,CAAmBx/C,GAAIzhB,IAAOqD,4BAgBpD,GAEC07D,GAAUJ,qBAqBR,cAAC,GAAD,CACIr7B,QAASg5B,EACT77C,SAAU,kBACN0+C,GAAc,2BAAKJ,IAAN,IAAiBJ,sBAAsB,MAExDrwB,SAAU,kBACNgxB,GAAa,2BAAKP,IAAN,IAAiBJ,sBAAsB,MAEvDx3C,KAAMy9B,IA5BV,eAACvZ,GAAD,CACIvyB,MAAM,yBACNqL,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAASg5B,IACnChxB,YAAY,EACZC,YAAa,kBACTyzB,GAAa,2BAAKD,IAAN,IAAiBJ,sBAAsB,MAL3D,UAQI,sBAAK1mD,UAAU,gBAAf,UACI,sBAAKA,UAAU,uBAAf,4DAAsF2sC,EAAa,EAAnG,MAAyGA,EAAzG,sBACA,cAAC,GAAD,CAAUh5C,KAAK,uBACX2S,MAAOk/C,GAAez9D,IAAO2C,uBAErC,sBAAKsV,UAAU,gBAAf,UACI,sBAAKA,UAAU,uBAAf,kFAA4G2sC,EAA5G,MAA2HA,EAAa,EAAxI,WACA,cAAC,GAAD,CAAUh5C,KAAK,uBACX2S,MAAOk/C,GAAez9D,IAAO4C,4BAgB3Cm8D,GAAUH,iBAsJR,cAACsC,GAAD,CACI59B,QAASi5B,EACT4E,YAAY,EACZ5mB,kBAAkB,EAClB95B,SAAU,kBACN0+C,GAAc,2BAAKJ,IAAN,IAAiBH,kBAAkB,MAEpDtwB,SAAU,kBACNgxB,GAAa,2BAAKP,IAAN,IAAiBH,kBAAkB,QA7JvD,cAACvzB,GAAD,CACIvyB,MAAM,0BACNqL,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAASi5B,IACnCjxB,YAAY,EACZC,YAAa,kBAAMyzB,GAAa,2BAAKD,IAAN,IAAiBH,kBAAkB,MAJtE,SAMI,qBAAK3mD,UAAU,wBAAf,SACI,sBAAKrM,KAAK,qBAAV,UACI,sBAAKqM,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,+CAGA,cAAC,GAAD,CACIrM,KAAK,iBACL2S,MACI,cAAC,GAAD,CACI2U,SAAS,SACTtL,KAAMnG,GAAIzhB,IAAO+G,wBAMjC,sBAAKkR,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,yBACA,cAAC,GAAD,CACIrM,KAAK,aACL2S,MACI+jB,GAActiC,IAAOgH,YACjB,cAAC,GAAD,CACIkuB,MAAM,EACNtN,KAAM0a,GAActiC,IAAOgH,eAE/B,UAAAqW,GAAUkP,OAAOvsB,IAAOgH,mBAAxB,mBAAqC88B,oBAArC,eAAmDvlB,OAAnD,UACIlB,GAAUkP,OAAOvsB,IAAOgH,mBAD5B,iBACI,EAAqC88B,oBADzC,aACI,EAAmDvlB,MACnD,2CAKpB,sBAAKtG,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,0DAGA,cAAC,GAAD,CACIrM,KAAK,kBACLqM,UAAU,OACVsG,MAAK,UAAEkD,GAAIzhB,IAAO+B,6BAAb,aAAE,EAAkC4nC,OAAO,EAAG,QAI3D,sBAAK1xB,UAAU,gBAAf,UACI,sBAAKA,UAAU,uBAAf,6EACqE2sC,EADrE,OAGA,cAAC,GAAD,CACIh5C,KAAK,gBACLqM,UAAU,OACVsG,MAAOk/C,GAAez9D,IAAO2B,yBAI1B,IAAV89D,IAA6B,OAAVA,GAChB,mCACI,sBAAKxnD,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,iEAGA,cAAC,GAAD,CACIrM,KAAK,iBACLqM,UAAU,OACVsG,MAAOkD,GAAIzhB,IAAO4B,uBAK9B,mCACI,sBAAKqW,UAAU,gBAAf,UACI,sBAAKA,UAAU,uBAAf,gBAAyC,qBAAKuD,MAAO,CAAE4lD,cAAe,QAASpgD,SAAU,SAAhD,kBAAzC,YAEA,cAAC,GAAD,CACIpV,KAAK,YACLqM,UAAU,OACVsG,MAAOkD,GAAIzhB,IAAOgB,kBAMlC,sBAAKiX,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,6BACA,cAAC,GAAD,CACIrM,KAAK,MACLqM,UAAU,OACVsG,MAAOkD,GAAIzhB,IAAO8B,UAI1B,sBAAKmW,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,6BACA,cAAC,GAAD,CACIrM,KAAK,MACLqM,UAAU,OACVsG,MAAOkD,GAAIzhB,IAAO6B,UAI1B,sBAAKoW,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,kEAGA,cAAC,GAAD,CACIrM,KAAK,wBACLqM,UAAU,OACVsG,OACmC,IAA/BkD,GAAIzhB,IAAOkB,iBACwB,SAA/BugB,GAAIzhB,IAAOkB,gBACT,OAC+B,IAA/BugB,GAAIzhB,IAAOkB,iBACsB,UAA/BugB,GAAIzhB,IAAOkB,gBACT,KACA,QAKtB,sBAAK+W,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,uCAGA,cAAC,GAAD,CACIrM,KAAK,mBACLqM,UAAU,OACVsG,MAAOkD,GAAIzhB,IAAOmB,sBAI1B,sBAAK8W,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,8BACA,cAAC,GAAD,CACIrM,KAAK,iBACLqM,UAAU,OACVsG,MAAOkD,GAAIzhB,IAAOoB,0BAoBxC29D,GAAUsC,gBA+CR,cAAC,GAAD,CACI/9B,QAASk5B,EACT/7C,SAAU,kBACN0+C,GAAc,2BAAKJ,IAAN,IAAiBsC,iBAAiB,MAEnD/yB,SAAU,kBACNgxB,GAAa,2BAAKP,IAAN,IAAiBsC,iBAAiB,MAElDl6C,KAAMy9B,EACN6V,kBAAkB,EAClByF,wBAAyBA,KAxD7B,qBAAKlpD,GAAG,iBAAR,SACI,cAACq0B,GAAD,CACIvyB,MAAM,iBACNqL,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAASk5B,IACnClxB,YAAY,EACZC,YAAa,kBACTyzB,GAAa,2BAAKD,IAAN,IAAiBsC,iBAAiB,MALtD,SAQI,sBAAKz1D,KAAK,sBAAV,UACI,sBAAKqM,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,wCAGA,cAAC,GAAD,CACIrM,KAAK,cACLqM,UAAU,OACVsG,MACI2hD,GAAuB,UAAG7iD,GAAUkP,OAAOvsB,IAAOwD,uBAA3B,iBAAG,EAAyCsgC,oBAA5C,aAAG,EAAuDvlB,MAC7E,cAAC,GAAD,CACI4W,WAAW,EACXvN,KAAM0a,GAActiC,IAAOwD,uBAM/C,sBAAKyU,UAAU,gBAAf,UACI,sBAAKA,UAAU,uBAAf,yCACiC2sC,KAEjC,cAAC,GAAD,CACIh5C,KAAK,cACLqM,UAAU,OACVsG,MACI,cAAC,GAAD,CACI2U,SAAS,UACTtL,KAAMnG,GAAIzhB,IAAOuD,gCAuB/Cw7D,GAAUF,gBAuBR,cAAC,GAAD,CACIv7B,QAASm5B,EACTh8C,SAAU,kBACN0+C,GAAc,2BAAKJ,IAAN,IAAiBF,iBAAiB,MAEnDvwB,SAAU,kBACNgxB,GAAa,2BAAKP,IAAN,IAAiBF,iBAAiB,MAElD13C,KAAMy9B,IA9BV,qBAAK5tC,GAAG,gBAAR,SACI,eAACq0B,GAAD,CACIvyB,MAAM,gBACNqL,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAASm5B,IACnCnxB,YAAY,EACZC,YAAa,kBACTyzB,GAAa,2BAAKD,IAAN,IAAiBF,iBAAiB,MALtD,UASI,sBAAK3iB,WAAS,EAACjkC,UAAU,gBAAzB,UACI,qBAAKA,UAAU,uBAAf,4BACA,cAAC,GAAD,CAAUrM,KAAK,aAAa2S,MAAO,cAAC+V,GAAD,CAAaL,QAAS5W,GAAUkP,OAAOvsB,IAAOmH,gBAGrF,sBAAK8Q,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,SAAuC3E,YAAStT,IAAO4G,aAAaisB,WACpE,cAAC,GAAD,CAAUjnB,KAAK,aAAa2S,MAAOkD,GAAIzhB,IAAO4G,uBAiB5Dm4D,GAAUL,mBAgGR,cAAC4C,GAAD,CACIh+B,QAASo5B,EACTj8C,SAAU,kBAAM0+C,GAAc,2BAAKJ,IAAN,IAAiBL,oBAAoB,MAClEpwB,SAAU,kBACNgxB,GAAa,2BAAKP,IAAN,IAAiBL,oBAAoB,QAnGzD,cAACrzB,GAAD,CACIvyB,MAAM,kBACNqL,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAASo5B,IACnCpxB,YAAY,EACZC,YAAa,kBACTyzB,GAAa,2BAAKD,IAAN,IAAiBL,oBAAoB,MALzD,SAQKqC,GACI,cAAC,WAAD,UACG,cAAC,EAAD,oEAKH,eAAC,WAAD,YAE+C,KAAnB,OAAxB3C,SAAwB,IAAxBA,QAAA,EAAAA,GAA0B9f,eACvB,8BACI,cAACrvB,GAAA,EAAD,CAAOhL,SAAS,QAAQhM,UAAU,qBAAlC,SACI,gPAOZ,sBAAKA,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,0CAGA,8BACI,cAAC,GAAD,CAAgB8rB,SAAUw7B,UAIlC,sBAAKtnD,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,0CACA,8BACI,cAAC,GAAD,CAAgB8rB,SAAUy7B,UAIlC,sBAAKvnD,UAAU,gBAAf,UACI,sBAAKA,UAAU,uBAAf,sHAE0D,IACrD2sC,EAHL,OAKA,cAAC,GAAD,CAAUh5C,KAAK,oBAAoB2S,OACO,IAAtCkD,GAAIzhB,IAAOsG,wBAC+B,SAAtCmb,GAAIzhB,IAAOsG,uBACT,OACsC,IAAtCmb,GAAIzhB,IAAOsG,wBAC6B,UAAtCmb,GAAIzhB,IAAOsG,uBACT,KACA,QAKlB,sBAAK2R,UAAU,gBAAf,UACI,sBAAKA,UAAU,uBAAf,qEACwD,IACnD2sC,EAFL,OAIA,cAAC,GAAD,CACIh5C,KAAK,iBACL2S,OAC8C,IAA1CkD,GAAIzhB,IAAOuG,4BACmC,SAA1Ckb,GAAIzhB,IAAOuG,2BACT,OAC0C,IAA1Ckb,GAAIzhB,IAAOuG,4BACiC,UAA1Ckb,GAAIzhB,IAAOuG,2BACT,KACA,QAKtB,sBAAK0R,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,0CACA,cAAC,GAAD,CAAUrM,KAAK,iBAAiB2S,MAAOkD,GAAIzhB,IAAOoG,oBAGtD,sBAAK6R,UAAU,gBAAf,UACI,qBAAKA,UAAU,uBAAf,qCACA,cAAC,GAAD,CACIrM,KAAK,iBACL2S,MAAOkD,GAAIzhB,IAAOqG,2BAgB9C,sBAAK2Q,GAAG,WAAWwE,MAAO,CAAEkL,OAAQ,iBAAkBC,QAAS,OAAQ5K,UAAW,QAAlF,UACI,sBAAKP,MAAO,CAAE,WAAc,OAAQwF,SAAU,QAA9C,sBAEKoc,GAAoBviB,OAAS,GAC1B,cAAC,KAAD,CAAaW,MAAO,CAAElE,MAAO,QAAS2hB,WAAY,UAEtB,IAA/BmE,GAAoBviB,QACjB,cAAC,KAAD,CAAaW,MAAO,CAAElE,MAAO,YAAa2hB,WAAY,aAG5D8lC,GAAUzzC,aAqCR,sBAAKrT,UAAU,eAAf,UACI,sBAAKA,UAAU,uBAAf,UACI,oBAAIA,UAAU,sBAAd,0BACA,qBAAKA,UAAU,wBAAf,SACI,cAAC,KAAD,CAAQrM,KAAK,sBAAsB8T,MAAM,QAAQiD,QAAQ,OACrDtL,QAAS,kBACLioD,GAAa,2BAAKP,IAAN,IAAiBzzC,cAAc,aAI3D,sBAAKrT,UAAU,wBAAf,UACI,cAAC,GAAD,CACI+kB,yBAh0Bb,WAC3B,OAAOugC,IAg0BiCtgC,qBAAsBohC,GACtBl3C,KAAMy9B,IAEV,qBAAK3sC,UAAU,gBAAf,SACI,cAAC,KAAD,CAAQrM,KAAK,sBAAsB8T,MAAM,QAAQiD,QAAQ,OAAOtL,QAAS,kBAAMioD,GAAa,2BAAKP,IAAN,IAAiBzzC,cAAc,gBArDtI,cAAC+f,GAAD,CACIvyB,MAAM,wBACN6yB,eAAe,0BACfL,YAAY,EACZC,YAAa,kBACTyzB,GAAa,2BAAKD,IAAN,IAAiBzzC,cAAc,MALnD,SAOI,qBAAKrT,UAAU,oCAAf,SACI,qBAAKA,UAAU,SAAf,SACI,eAACsM,EAAD,CAAWtI,GAAI,GAAf,UAEI,cAACgT,GAAA,EAAD,CAAOhL,SAAS,OAAOtB,QAAQ,WAA/B,SACI,qBAAKlH,wBAAyB,CAAEC,OAAQgiD,QAG3C,CAAC,CAAE5kD,MAAO,wBAAyB6E,OAAQ,SAAA05B,GAAC,MAAiB,UAAbA,EAAEzxB,SACnD,CAAE9M,MAAO,wBAAyB6E,OAAQ,SAAA05B,GAAC,MAAiB,UAAbA,EAAEzxB,UAC/C9I,KAAI,SAAAw6B,GAAC,OAAIla,GAAoBrP,KAAKupB,EAAE35B,SAClC,gCACI,mCAAS25B,EAAEx+B,MAAX,OACA,oBAAIb,UAAU,OAAd,SACKmlB,GAAoBzf,OAAO25B,EAAE35B,QAAQb,KAAI,SAAAykD,GAAG,OACzC,oBAAItpD,UAAU,KAAd,SACKspD,EAAIluD,8BAqChD+pB,GAAoBviB,OAAS,GAC1B,gCACI,sBAAKW,MAAO,CAAEkL,OAAQ,iBAAkBC,QAAS,OAAQ5K,UAAW,QAApE,UACI,sBAAKP,MAAO,CAAE,WAAc,OAAQwF,SAAU,QAA9C,sBAEI,cAACwjC,GAAD,CAAkBlhB,QAASs5B,OAE7BmC,GAAUlH,YAsFR,cAAC2J,GAAD,CACIxK,oBAAqB,cAAC,GAAD,CAAwB1zB,QAASs5B,EAAYvF,aAAcJ,KAChF3zB,QAASs5B,EACT3F,uBAAwBA,GACxBC,UAAWA,EACXC,iBAAkB+F,GAAaG,iBAC/B58C,SAAU,kBACN0+C,GAAc,2BAAKJ,IAAN,IAAiBlH,aAAa,MAE/CvpB,SAAU,kBACNgxB,GAAa,2BAAKP,IAAN,IAAiBlH,aAAa,QA/FlD,cAACxsB,GAAD,CACIvyB,MAAM,cACNwyB,YAAY,EACZC,YAAa,kBACTyzB,GAAa,2BAAKD,IAAN,IAAiBlH,aAAa,MAJlD,SAOI,qBAAK5/C,UAAU,oCAAf,SACI,sBAAKA,UAAU,SAAf,UACI,cAAC,GAAD,CAAwBqrB,QAASs5B,EAAYvF,aAAcJ,MAGjD,OAATC,QAAS,IAATA,OAAA,EAAAA,EAAWx+B,cACR,cAACnU,EAAD,CAAWtI,GAAI,GAAf,SACI,sBAAKhE,UAAU,OAAf,UACI,4EACU,OAATi/C,QAAS,IAATA,OAAA,EAAAA,EAAWx+B,cAAgB,WACxB,OAAQw+B,EAAUrnC,cACd,IAAK,QACD,OAAO,qBAAK5X,UAAU,SAAf,0BACX,IAAK,SACD,OACI,sBAAKA,UAAU,SAASuD,MAAO,CAAElE,MAAO,WAAxC,UACI,wEAA0C,4BAAI4lD,GAAaG,mBAA3D,yCACA,qBAAK5hD,wBAAyB,CAAEC,OAAQw7C,EAAU5a,yBAE9D,IAAK,UACL,IAAK,sBACL,IAAK,qBACL,IAAK,UACL,IAAK,UACD,OAAO,qBAAKrkC,UAAU,SAAf,6BACX,QACI,OAAO,8BAjBS,QAuBxC,cAAC,GAAD,CAAmBqrB,QAASs5B,MAGzB3F,GAAuBwK,WAAaxK,GAAuB9Y,UAAUzyC,IAAqBa,QAAQX,OAASuyD,GAAwB7G,aAC/HqI,GAAQ7iD,KAAI,SAACijD,GAAD,OACX,cAAC,EAAD,CACIz7C,aAAa,EACbxL,MAAM,+BAFV,SAII,cAAC,EAAD,UACI,cAACyL,EAAD,CAAWtI,GAAI,GAAf,SACI,sBAAKhE,UAAU,OAAf,UAGQ,8BAAK,cAAC,GAAD,CAAUrM,KAAK,aAChB2S,MAAO+jB,GAActiC,IAAOgH,YACxB,cAAC,GAAD,CACIkuB,MAAM,EACNtN,KAAM0a,GAActiC,IAAOgH,cAE7BosC,GAAc7B,YACZvxC,IAAOgH,WAAY+H,IAA0Bf,oBAK7D,qBAAIiK,UAAU,sBAAd,mBAA2C8nD,EAAI16B,aAAa9mB,SAC5D,qBAAItG,UAAU,OACVuD,MAAO,CAAElE,MAAkC,aAA3ByoD,EAAIlwC,aAAatR,OAAmD,cAA3BwhD,EAAIlwC,aAAatR,OAAoD,OAA3BwhD,EAAIlwC,aAAatR,MAAiB,QAAU,WADnJ,UAEI,oBAAItG,UAAU,KACVwD,wBAAyB,CAAEC,OAAQqkD,EAAI1jB,wBAAwB99B,SACjC,OAAjCwhD,EAAIzjB,mBAAmB/9B,OAAmD,KAAjCwhD,EAAIzjB,mBAAmB/9B,OAC7D,oBAAItG,UAAU,KACVwD,wBAAyB,CAAEC,OAAQqkD,EAAIzjB,mBAAmB/9B,kCA4BlH,sBAAK/C,MAAO,CAAEkL,OAAQ,iBAAkBC,QAAS,OAAQ5K,UAAW,QAApE,UACI,sBAAKP,MAAO,CAAE,WAAc,OAAQwF,SAAU,QAA9C,sBAEI,cAACwjC,GAAD,CAAkBlhB,QAASu5B,OAE7BkC,GAAUpO,WAqDR,cAAC,GAAD,CACIrtB,QAASu5B,EACTp8C,SAAU,kBACN0+C,GAAc,2BAAKJ,IAAN,IAAiBpO,YAAY,MAE9CriB,SAAU,kBACNgxB,GAAa,2BAAKP,IAAN,IAAiBpO,YAAY,MAE7CxpC,KAAMy9B,IA5DV,cAACvZ,GAAD,CACIvyB,MAAM,aACNwyB,YAAY,EACZC,YAAa,kBACTyzB,GAAa,2BAAKD,IAAN,IAAiBpO,YAAY,MAJjD,SAOI,sBAAK/kD,KAAK,iBAAiBqM,UAAU,aAArC,UACI,cAAC,EAAD,CACIa,MAAM,oBACNuC,SAAUk1C,EAAchX,OACxB6X,UAAU,EAHd,SAKKhe,GAAcpzC,IAAOgJ,0BAClB,qBAAKwS,MAAO,CAAEsL,WAAY,QAA1B,wCAEA,cAAC,GAAD,CACI6pC,WAAYtzC,GAAUkP,OAAOvsB,IAAO8I,qBAKhD,cAAC,EAAD,CACIgQ,MAAM,uBACNuC,SAAUk1C,EAAcM,UACxBO,UAAU,EAHd,SAKKhe,GAAcpzC,IAAOiJ,6BAClB,qBAAKuS,MAAO,CAAEsL,WAAY,QAA1B,2CAEA,cAAC,GAAD,CACI6pC,WAAYtzC,GAAUkP,OAAOvsB,IAAO+I,wBAKhD,cAAC,EAAD,CACI+P,MAAM,uBACNuC,SAAUk1C,EAAcK,KACxBQ,UAAU,EAHd,SAKKhe,GAAcpzC,IAAOkJ,wBAClB,qBAAKsS,MAAO,CAAEsL,WAAY,QAA1B,sCAEA,cAAC,GAAD,CACI6pC,WAAYtzC,GAAUkP,OAAOvsB,IAAO6I,2BAmBhE,sBAAK2S,MAAO,CAAEkL,OAAQ,iBAAkBC,QAAS,OAAQ5K,UAAW,QAApE,UACI,sBAAKP,MAAO,CAAE,WAAc,OAAQwF,SAAU,QAA9C,sBAEI,cAACwjC,GAAD,CAAkBlhB,QAASw5B,OAE7BiC,GAAUD,mBA6BR,cAAC,GAAD,CACIx7B,QAASw5B,EACTr8C,SAAU,kBACN0+C,GAAc,2BAAKJ,IAAN,IAAiBD,oBAAoB,MAEtDxwB,SAAU,kBACNgxB,GAAa,2BAAKP,IAAN,IAAiBD,oBAAoB,QAlCzD,eAACzzB,GAAD,CACIvyB,MAAM,sBACNwyB,YAAY,EACZC,YAAa,kBACTyzB,GAAa,2BAAKD,IAAN,IAAiBD,oBAAoB,MAJzD,UAOI,cAAC,GAAD,CACIlzD,KAAK,yGACL2S,MAAOkD,GAAIzhB,IAAO+J,QAAS,OAG/B,cAAC,GAAD,CACI6B,KAAK,iGACL2S,MAAOkD,GAAIzhB,IAAOgK,QAAS,OAG/B,cAAC,GAAD,CACI4B,KAAK,+LACL2S,MAAOkD,GAAIzhB,IAAOiK,QAAS,OAG/B,cAAC,GAAD,CACI2B,KAAM0H,YAAStT,IAAOkK,SAAS2oB,SAC/BtU,MAAOkD,GAAIzhB,IAAOkK,QAAS,gBAiBnD,qBAAK+N,UAAU,uBAAuBuD,MAAO,CAAEO,UAAW,QAA1D,SACI,cAAC,GAAD,CAAyBsR,IAAKA,EAAKq2B,SAAU,CAAE79B,YAAa80C,IAAiBv9B,GAAoBviB,OAAS,GAAKW,MAAO,CAAEqL,MAAO,SAAWxP,QAASkpD,mBCvyCpKmB,OAvBf,YAAuC,IAAlBx0C,EAAiB,EAAjBA,QAAS/F,EAAQ,EAARA,KAEpBw6C,EAAc,IAAIl6C,KAAYyF,GAEpC,OACI,qBAAKjV,UAAU,aAAf,SACI,qBAAKA,UAAU,UAAf,SACI,qBAAKA,UAAU,qBAAf,SACI,sBAAKA,UAAU,6BAAf,UACI,qBAAIA,UAAU,sBAAd,UACK0pD,EAAY/1D,KACb,cAACy4C,GAAD,OAEJ,oBAAGpsC,UAAU,UAAb,cAAyB0pD,EAAY91D,eACrC,qBAAIoM,UAAU,sBAAd,UAAqCkP,EAArC,WAA8CA,EAAO,KACrD,mBAAGjP,KAAK,aAAR,2C,qBCYT0pD,OA5Bf,YAAyD,IAA7B9oD,EAA4B,EAA5BA,MAAOlD,EAAqB,EAArBA,MAAOisD,EAAc,EAAdA,WAUtC,OACI,sBAAK5pD,UAAU,sBAAsBZ,QATnB,WACbwqD,GAEAA,EAAWje,SAEhBie,EAAWje,QAAQnB,kBAI0CjnC,MAAO,CAAEsmD,OAAsB,MAAdD,EAAqB,OAAS,WAA5G,UACI,qBAAK5pD,UAAU,qBAAf,SACgB,aAAVrC,GACE,cAAC,KAAD,CAAiB4F,MAAO,CAAElE,MAAO,cAEtB,eAAV1B,GACG,cAAC,KAAD,CAAwB4F,MAAO,CAAElE,MAAO,cAEjC,eAAV1B,GACG,cAAC,KAAD,CAAiB4F,MAAO,CAAElE,MAAO,eAG7C,+BAAOwB,QCgBJipD,G,WArCX,WAAY9uD,GAAM,qBACdC,KAAKE,MAAQH,E,wCAIjB,WACI,OAAOC,KAAKE,MAAM8yB,Q,gBAGtB,WACI,OAAOhzB,KAAKE,MAAMC,O,oBAGtB,WACI,OAAQH,KAAKE,MAAM4uD,U,qBAQvB,SAAQj8B,GACJ,GAAgB,MAAZA,EACA,OAAO,KAFE,qBAII7yB,KAAKE,MAAMma,OAJf,IAIb,2BACA,CAAC,IADQ00C,EACT,QACI,GAAIA,EAAK/yC,SAASiW,eAAiBY,EAASZ,cAExC,OAAO88B,EAAKn8C,aARP,8BAWb,OAAO,S,KCzCFo8C,GAKJ,MALIA,GAMY,QC4EVhiD,WAlEd,YAAyG,IAAlFtU,EAAiF,EAAjFA,KAAM+zB,EAA2E,EAA3EA,UAAWjgB,EAAgE,EAAhEA,MAAO7T,EAAyD,EAAzDA,YAAiDyO,GAAQ,EAA5CmlB,QAA4C,EAAnCre,SAAmC,EAAlB5F,MAAkB,0FAEvE1G,mBAAS,IAF8D,mBAgBjGqO,GAhBiG,UAgBvFlF,YAAe,CAAEC,KAAM,YACjCoD,EAAM,OAAG6B,QAAH,IAAGA,OAAH,EAAGA,EAAS7B,OACpBE,EAAQ,KAIZ,OAHIF,IACFE,EAAQC,eAAIH,EAAQ1V,IAGpB,eAACgiC,GAAA,EAAD,CAAatU,UAAU,WAAWrhB,UAAU,cAA5C,UACIuJ,GAAS,qBAAKhG,MAAO,CAAElE,MAAO,OAArB,qCACX,cAACo8B,GAAA,EAAD,yBAAY3wB,aAAYlX,GAAiByO,GAAzC,aACE,kCACE,gCACE,+BACE,wDACA,sDACA,4CAGHqlB,EAAU7iB,KAAI,SAACsK,EAAKpK,GAAN,OACb,cAAC,WAAD,UACE,+BACE,6BACE,cAAC22B,GAAA,EAAD,CACEp1B,MAAO6I,EAAK7I,MACZkhB,QACE,cAACoU,GAAA,EAAD,CACEv8B,MAAM,YAGVoI,MAAO0H,EAAKxb,KACZwV,SAAUgG,EAAKhG,aAGnB,oBAAI5F,MAAO4L,EAAKhG,SAAW,CAAEiiB,QAAS,IAAM,GAA5C,SACGjc,EAAK+6C,QAAQ,cAEhB,oBAAI3mD,MAAO4L,EAAKhG,SAAW,CAAEiiB,QAAS,IAAM,GAA5C,SACGjc,EAAK+6C,QAAQ,6BAlBpB,UAAkBziD,EAAlB,mBAAkC1C,mBCxC9C,SAASolD,GAAT,GAA4D,IAAzB/0C,EAAwB,EAAxBA,IAAKya,EAAmB,EAAnBA,QAASyR,EAAU,EAAVA,OAEvC1R,EAAY,IAAI5C,GAAU6C,GAEhC,SAASu6B,EAAYrvD,GACjB,IAAMQ,EAAc8L,IAAeC,eAAevM,GAC5CkyB,EAAS2C,EAAUpmB,IAAIjO,GAC7B,OAAK0xB,EAGoB,cAArBA,EAAO1zB,WACA0zB,EAEJA,EAAOmB,SALH,KAQf,SAASi8B,EAAWngD,GAAkC,IAA5BogD,EAA2B,uDAAZ,WACrC,OAAOvgD,KAAOG,GAAMC,OAAOmgD,GAG/B,SAASC,EAAYhkC,GACjB,IAAKA,GAAqB,KAAXA,EACX,MAAO,aAEX,IACIikC,GADW,GAAKjkC,GAAQoC,QAAQ,MAAO,IACvB6hC,MAAM,2BAC1B,OAAIA,EACO,IAAMA,EAAM,GAAK,KAAOA,EAAM,GAAK,IAAMA,EAAM,GAEnDjkC,EAGXmnB,QAAKza,SAAS,CACV0a,OAAQ,YACRC,MAAO,CACH,CAAEztC,IAAK,gFACP,CAAEA,IAAK,2EAA4E0O,WAAY,KAC/F,CAAE1O,IAAK,2EAA4E0O,WAAY,QAIvG,IAAMg/B,EAASC,cAAWjD,OAAO,CAC7B3oB,KAAM,CACFvJ,gBAAiB,UACjBqI,WAAY,GACZ6B,YAAa,GACblB,WAAY,YACZ5Y,SAAU,GAEdsiB,QAAS,CACLvnB,UAAW,GACXiT,aAAc,EACdiK,WAAY,GACZ6B,YAAa,GACbnU,QAAS,GAEbq/B,OAAQ,CACJn/B,MAAO,MACP9F,OAAQ,QAEZ2hD,WAAY,CACRrc,UAAW,SACXrlC,SAAU,GACVgO,aAAc,GACdjT,UAAW,IAEf4mD,cAAe,CACX77C,WAAY,IACZD,MAAO,MACP7F,SAAU,EACVgO,aAAc,IAElBk3B,UAAW,CACPr/B,MAAO,MACP7F,SAAU,EACVgO,aAAc,IAElB4zC,SAAU,CACN/7C,MAAO,MACP7F,SAAU,EACVgO,aAAc,GACdiK,WAAY,IAEhBqtB,KAAM,CACFx/B,WAAY,KAEhBy/B,WAAY,CACRC,eAAgB,YAChBvtB,WAAY,GACZ6B,YAAa,IAEjBlgB,OAAO,CACHiM,MAAO,MACP7F,SAAU,EACVjF,UAAW,MAMnB,OACI,cAAC,YAAD,UACI,eAAC,QAAD,CAAMomC,KAAK,KAAK3mC,MAAOsqC,EAAO3rB,KAA9B,UACI,cAAC,QAAD,CAAM3e,MAAOsqC,EAAOxiB,QAApB,SACI,cAAC,SAAD,CAAOlrB,IAAK,kBAAmBoD,MAAOsqC,EAAOE,WAEjD,eAAC,QAAD,WACI,cAAC,QAAD,CAAMxqC,MAAOsqC,EAAO4c,WAApB,6EAGA,eAAC,QAAD,CAAMlnD,MAAK,2BAAOsqC,EAAO6c,eAAd,IAA6Btc,UAAW,WAAnD,uBACeic,EAAU,OAACj1C,QAAD,IAACA,OAAD,EAACA,EAAKuL,UAD/B,OAGA,cAAC,QAAD,CAAMpd,MAAOsqC,EAAOI,UAApB,4WAMJ,eAAC,QAAD,WACI,eAAC,QAAD,CAAM1qC,MAAOsqC,EAAOI,UAApB,UACI,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOQ,KAApB,mCACA,eAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,yBAAmDhN,EAAOlmC,KAA1D,kBAEA,cAAC,QAAD,mDACA,cAAC,QAAD,CAAOmI,MAAOsqC,EAAOS,WAArB,SAAkC+b,EAAWD,EAAYriE,IAAO+B,sBAAuB,UAEvF,cAAC,QAAD,CAAMyZ,MAAOsqC,EAAOQ,KAApB,mDACA,cAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,gBAAiCl5B,QAAjC,IAAiCA,OAAjC,EAAiCA,EAAKub,WAE1C,eAAC,QAAD,CAAMptB,MAAOsqC,EAAOI,UAApB,UACI,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOQ,KAApB,uCACA,eAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,yBACuB8b,EAAYriE,IAAOC,YAD1C,eAEuBoiE,EAAYriE,IAAOG,iBAF1C,eAGuBkiE,EAAYriE,IAAOE,WAH1C,kBAMA,cAAC,QAAD,CAAMsb,MAAOsqC,EAAOQ,KAApB,qDACA,eAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,yBACuB+b,EAAWD,EAAYriE,IAAOI,YADrD,iBAIJ,eAAC,QAAD,CAAMob,MAAOsqC,EAAOI,UAApB,UACI,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOQ,KAApB,sCACA,cAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,8CAGJ,eAAC,QAAD,CAAM/qC,MAAOsqC,EAAOI,UAApB,UACI,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOQ,KAApB,0CACA,eAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,qBAA6Cic,EAAYH,EAAYriE,IAAOK,aAA5E,cACA,cAAC,QAAD,CAAMmb,MAAOsqC,EAAOQ,KAApB,4DACA,eAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,qBAA6Cic,EAAYH,EAAYriE,IAAOQ,kBAA5E,iBAEJ,eAAC,QAAD,CAAMgb,MAAOsqC,EAAOI,UAApB,UACI,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOQ,KAApB,kCACA,cAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,8CAEJ,eAAC,QAAD,CAAM/qC,MAAOsqC,EAAOI,UAApB,UACI,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAOQ,KAApB,kEACA,cAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,8DACA,cAAC,QAAD,CAAM/qC,MAAOsqC,EAAOQ,KAApB,4CACA,cAAC,QAAD,CAAM9qC,MAAOsqC,EAAOS,WAApB,+BAGR,eAAC,QAAD,WACI,cAAC,QAAD,CAAM/qC,MAAOsqC,EAAOI,UAApB,2RAIA,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAO6c,cAApB,kCACA,cAAC,QAAD,CAAMnnD,MAAOsqC,EAAO8c,SAApB,sPAIA,cAAC,QAAD,CAAMpnD,MAAOsqC,EAAO8c,SAApB,0XAKA,cAAC,QAAD,CAAMpnD,MAAOsqC,EAAO8c,SAApB,8HAGA,cAAC,QAAD,CAAMpnD,MAAOsqC,EAAO8c,SAApB,iMAGA,cAAC,QAAD,CAAMpnD,MAAOsqC,EAAO8c,SAApB,6GAIA,cAAC,QAAD,CAAMpnD,MAAOsqC,EAAO6c,cAApB,qEACA,cAAC,QAAD,CAAMnnD,MAAOsqC,EAAOI,UAApB,kFACA,cAAC,QAAD,CAAM1qC,MAAOsqC,EAAO8c,SAApB,4UAKA,cAAC,QAAD,CAAMpnD,MAAOsqC,EAAO8c,SAApB,sIAIJ,cAAC,QAAD,UACI,cAAC,QAAD,CAAMpnD,MAAOsqC,EAAOlrC,OAApB,+LA0DLioD,OA5Cf,YAA2C,IAARx1C,EAAO,EAAPA,IAEzB2J,EAAY,CACdh3B,IAAOgH,WACPhH,IAAO+B,qBACP/B,IAAOC,WACPD,IAAOG,gBACPH,IAAOE,UACPF,IAAOI,UACPJ,IAAOK,WACPL,IAAOQ,iBAV2B,EAaFsU,mBAAS,MAbP,mBAa/BqqC,EAb+B,KAanB2jB,EAbmB,OAcFhuD,mBAAS,MAdP,mBAc/BkyB,EAd+B,KAcnB+7B,EAdmB,KA6BtC,OAbAhtD,oBAAS,sBAAC,oCAAA0N,EAAA,yDACD4J,EADC,wDAGAkY,EAAevO,EAAUla,KAAI,SAAA8O,GAAC,OAAItM,IAAeC,eAAeqM,MAHhE,SAIgBlI,IAAUjC,IAAI,UAAW,CAAE8jB,aAAcA,EAAcpe,KAAMkG,EAAIrE,OAJjF,cAIA8e,EAJA,OAKAD,EAAY,IAAI5C,GAAU6C,GAC1BwR,EAAazR,EAAUpmB,IAAI,cAAc4gB,WANzC,UAOmB3e,IAAUqjB,cAAcuS,GAP3C,QAOA0pB,EAPA,OASNF,EAAch7B,GACdi7B,EAAcC,GAVR,4CAWP,CAAC31C,IAEC8xB,GAAenY,EAIhB,4CAEI,cAAC,mBAAD,CAAiBnvB,SAAU,cAACuqD,GAAD,CAAyB/0C,IAAKA,EAAKya,QAASqX,EAAY5F,OAAQvS,IAAeggB,SAAS,4BAAnH,SACK,cAAGC,KAAH,EAAS50B,IAAT,IAAc/O,EAAd,EAAcA,QAAd,EAAuB9B,MAAvB,OAAoC8B,EAAU,oBAAsB,oCAH7E,UAHO,mEChQR,SAAS2/C,GAA6B3oD,GAAO,IAGxC0Q,EAAgB1Q,EAAhB0Q,YACFi1C,EAAgBtqD,aAAY,SAACC,GAAD,yBAAWA,EAAMwE,KAAKmS,cAAtB,iBAAW,EAAmBxlB,uBAA9B,aAAW,EAAoCwX,SAJjC,EAKYzJ,mBAAS,MALrB,mBAKzCwmD,EALyC,KAKjBC,EALiB,KAO1C2H,EACG,wEAMHC,EAAc,CAChBC,IAAK,CACDC,IACI,sBAAK7nD,MAAO,CAAEmjB,cAAc,QAA5B,UACI,qBAAKnjB,MAAO,CAAEmjB,cAAc,QAA5B,wOAIA,iFACkD,mBAAGzmB,KAAMgrD,EAAT,SAA4BA,IAD9E,UAIRI,IACI,sBAAK9nD,MAAO,CAAEmjB,cAAc,QAA5B,UACI,qBAAKnjB,MAAO,CAAEmjB,cAAc,QAA5B,6JAGA,iFACkD,mBAAGzmB,KAAMgrD,EAAT,SAA4BA,IAD9E,UAIRK,MACI,sBAAK/nD,MAAO,CAAEmjB,cAAc,QAA5B,UACI,qBAAKnjB,MAAO,CAAEmjB,cAAc,QAA5B,4EAGA,qBAAInjB,MAAO,CAAEmjB,cAAc,OAAQ3R,YAAY,QAA/C,UACI,uOACA,mLACA,qOAPR,iDASkD,mBAAG9U,KAAMgrD,EAAT,SAA4BA,IAT9E,OAWJM,GACI,sBAAKhoD,MAAO,CAAEmjB,cAAc,QAA5B,UACI,qBAAKnjB,MAAO,CAAEmjB,cAAc,QAA5B,4SAIA,iFACkD,mBAAGzmB,KAAMgrD,EAAT,SAA4BA,IAD9E,YA+BhB,OAJAntD,qBAAU,YApBV,WACI,IAAI0tD,GAEJ,OAAGz4C,QAAH,IAAGA,OAAH,EAAGA,EAAalM,SAAS,UAGjB2kD,GAFJ,OAAGxD,QAAH,IAAGA,OAAH,EAAGA,EAAgBnhD,SAAS,UAEP,OAEhB,OAAGmhD,QAAH,IAAGA,OAAH,EAAGA,EAAgBnhD,SAAS,QAEZ,MAGAmhD,GAIzB1E,EAA0B4H,EAAYn4C,GAAay4C,IAInDC,KACD,CAACzD,EAAgBj1C,IAEb,CAAEswC,0BCjDb,IAAMU,GAAe,MAgZN2H,OA1Yf,WAA0B,IAAD,IAEfx+C,EAAUjL,uBACV+I,EAAWC,cAOXC,EAAUC,YAAQ,CACpBlF,KAAM,WAEQmF,GAAwBF,EAAlChF,SAAkCgF,EAAxBE,cAAckrB,EAAUprB,EAAVorB,MAC1BlxB,EAAY1H,aAAY,SAACC,GAAD,OAAWA,EAAMwE,QAMzCuoC,EAAe,IAAIpE,GAAkBzpC,mBAAS,MAAOknD,IACrD4H,EAAgBjhB,EAAaG,OAAOhuC,mBAAS,MAAOiuC,mBAAU,CAChE/iD,IAAOuI,yBACR,gCACGs7D,EAAalhB,EAAaG,OAAOhuC,mBAAS,MAAOiuC,mBAAU,CAC7D/iD,IAAO+G,gBACP/G,IAAO0I,kBACP1I,IAAO2I,gBACP3I,IAAO4I,qBACP5I,IAAO4B,eACP5B,IAAOgH,YACR,mBA/BkB,EAiCmB8N,mBAAS,MAjC5B,mBAiCdgvD,EAjCc,KAiCAC,EAjCA,KAkCf72C,EAAU,IAAIzF,KAAYq8C,GAC1B38C,EAAI,UAAG+F,EAAQk3B,oBAAX,aAAG,EAAsBj9B,KAE7B68C,EAAU,UAAG92C,EAAQk3B,oBAAX,aAAG,EAAsB6f,iBAAiB,cArCrC,EAwCyBnvD,mBAAS,MAxClC,mBAwCdovD,EAxCc,KAwCKC,EAxCL,KAyCfC,EAAa,OAAGF,QAAH,IAAGA,OAAH,EAAGA,EAAmBpnD,KAAI,SAAA8O,GAAC,OAAI,IAAIm2C,GAAan2C,MAzC9C,EA2CyB9W,mBAAS,MA3ClC,mBA2CdwS,EA3Cc,KA2CG+8C,EA3CH,KA4Cfh3C,EAAM,IAAI1F,KAAgBL,GAKhCvR,oBAAS,sBAAC,wCAAA0N,EAAA,sEAEeC,IAAUmI,WAAWmwC,IAFpC,cAEAp4C,EAFA,OAGNmgD,EAAgBngD,GACVsJ,EAAU,IAAIzF,KAAY7D,GAC1BuD,EAAO+F,EAAQk3B,aAAaj9B,KAL5B,SAOqC2E,QAAQC,IAAI,CACnDrI,IAAUgO,eAAesqC,GAAc70C,GAEvCzD,IAAUjC,IAAI,kBAAmB,CAC7B,qBAAsBnC,IAAeC,eAAevf,IAAOuI,yBAC3D,cAAe4e,IAEnBw7B,EAAakB,WAAW18B,KAdtB,mCAOCm9C,EAPD,KAOYC,EAPZ,UAgBNF,EAAmBC,GACnBH,EAAiBI,GAEjBC,GAAkF,QAA3D/iD,eAAIpE,EAAD,iBAAsBrd,IAAO4B,eAA7B,YAC1B6iE,GAA8E,SAA3DhjD,eAAIpE,EAAD,iBAAsBrd,IAAO4B,eAA7B,YApBhB,4CAsBP,IAGH,IAAM8iE,EAAgBn2B,EAAMvuC,IAAOuI,yBA1Ed,EA2E2BuM,mBAAS,MA3EpC,mBA2Ed6vD,EA3Ec,KA2EIC,EA3EJ,KA4ErB7uD,qBAAU,WACN,GAAI2uD,GAAiBN,EAAe,CAEhC,IACMS,EADiBT,EAAcxwD,MAAK,SAAAkf,GAAM,OAAIA,EAAOvU,QAAUmmD,KACrCvC,QAAQ,YACxCyC,EAAoBC,GAGhBT,EAAcr2C,MAAK,SAAA+E,GAAM,OAAIA,EAAO8F,WAAatR,EAAgBsR,cAEjEtR,EAAgBsR,SAAWisC,EAC3BR,EAAmB/8C,OAG5B,CAACo9C,EAAeR,IA1FE,MA4FiCpvD,oBAAS,GA5F1C,mBA4FdgwD,GA5Fc,KA4FON,GA5FP,QA6FuB1vD,oBAAS,GA7FhC,qBA6FdiwD,GA7Fc,MA6FEN,GA7FF,SAoG2B3vD,oBAAS,GApGpC,qBAoGdurD,GApGc,MAoGIC,GApGJ,MAsGf3xB,GAAU,SAACrtB,EAAQ5J,GACrBuH,QAAQwiB,IAAIngB,EAAQ5J,GACpBuL,EACI3N,aAAK,CACD0K,QAAS,4FACTiE,SAAU,cAOhB+gD,GAAcz2B,EAAMvuC,IAAOuI,yBAC3B08D,GAAerB,EAAcx0B,iBAAiBpvC,IAAOuI,yBAE3DwN,qBAAU,WACN,GAAKivD,KAEDC,GAAa/2B,WAGb82B,KAAgBC,GAAa5+B,SAAjC,CAGA,IAAMpzB,EAAI,eAAMjT,IAAOuI,wBAA0By8D,IAEjDpB,EAAc/oB,YAAY5nC,EAAMgQ,MAEjC,CAAC+hD,GAAaC,GAAa/2B,YAO9B,IAzHuBl7B,GAyHjB8sC,GAAM,uCAAG,WAAO7sC,GAAP,SAAAwQ,EAAA,uDAEiB,IAAxBqhD,KACA7xD,EAAKjT,IAAO4B,gBAAkB,QAGlCiiE,EAAWhU,kBAAkB58C,EAAMgQ,GANxB,2CAAH,sDAzIS,GAmJqBnO,oBAAS,GAnJ9B,qBAmJCowD,IAnJD,aA0Jf3E,GAAY,uCAAG,8BAAA98C,EAAA,6DACX+8C,EADW,+BAAA/8C,EAAA,MACQ,WAAOxQ,GAAP,SAAAwQ,EAAA,6DACO,IAAxBqhD,KACA7xD,EAAKjT,IAAO4B,gBAAkB,QAFb,SAKfiiE,EAAWhU,kBAAkB58C,EAAMgQ,GALpB,uBAMfS,IAAU+8C,kBAAkBzE,GAAc70C,GAN3B,OAQrBm5C,IAAoB,GARC,2CADR,+DAab4E,IAAiB,GACXvE,EAAiBt9C,EAAam9C,EAAkB7xB,IAdzC,SAePgyB,IAfO,OAgBb19C,EACI3N,aAAK,CACD0K,QAAS,yBACTiE,SAAU,aAnBL,gDAuBbhF,QAAQuC,MAAR,MACAyB,EACI3N,aAAK,CACD0K,QAAS,KAAEA,QACXiE,SAAU,aA3BL,yBA+BbihD,IAAiB,GA/BJ,4EAAH,qDAoCZC,IA9KiBnyD,GA8KchT,IAAO+G,gBA7KjCwW,IAAKF,EAAD,iBAAsBrK,GAAtB,YAjBM,GAgMK8B,oBAAS,GAhMd,qBAgMd2qD,GAhMc,MAgMPC,GAhMO,MAiMrB3pD,qBAAU,WAMN2pD,GAASyF,IALQ,CACbjD,GACAA,IAGgCpjD,SAASqmD,OAE9C,CAACA,KAEJ,IAAMC,GAAiB3jD,eAAIpE,EAAD,iBAAsBrd,IAAO4B,eAA7B,WA3ML,GA4MekT,oBAAS,GA5MxB,qBA4MduwD,GA5Mc,MA4MFC,GA5ME,MA8MrBvvD,qBAAU,WACN,IAAMwvD,EAAMrxC,SAASkxC,IACjBjpC,MAAMopC,IAGNA,EAAMvB,GACNsB,IAAc,KAEnB,CAACF,KAEJ,IAAM1qB,GAAWnM,EAAMvuC,IAAO4B,gBAE9BmU,qBAAU,WACNuvD,GAAc5qB,GAAWspB,KAC1B,CAACtpB,KAGJ,IAMM8qB,GAAYziB,mBAEZ0iB,GAAc5B,EAAWz0B,iBAAiBpvC,IAAO4B,gBACjD8jE,GAAiB/iB,EAAa98B,YAAcwH,EAAIlF,YAAc,IAAM1K,KAAKkrC,MAAM,GAAK,GAAKhG,EAAauc,gBAAkB,KAAO7xC,EAAIlF,YAAc,EAAI,IAEnJmzC,GAA2B2H,GAA6B,CAAEj4C,YAAagxC,KAAvEV,uBAER,OACI,cAAC,IAAD,2BAAkBn4C,GAAlB,aACI,cAAC,EAAD,UAEI,sBAAKvX,KAAK,mBAAmBqM,UAAU,iBAAvC,UACI,cAAC,GAAD,CAAWiV,QAASA,EAAS/F,KAAMA,IAClCk5C,GACG,cAAC/Y,GAAD,CAAoBvH,OApBzB,WACXugB,IAAoB,GACpBlnD,OAAOC,SAAS6e,QAAO,IAkB6BhT,QAAS,CACzCpM,MAAOoU,EAAQthB,KACfub,KAAMA,EACNtb,YAAaqhB,EAAQrhB,YACrB+b,KAAMo0C,MAGV,sBAAK/jD,UAAU,UAAf,UAEI,sBAAKA,UAAU,sBAAf,UACI,oBAAIA,UAAU,sBAAd,kCAIA,cAAC,GAAD,CAAa8gD,SAAU2M,KAEvB,sBAAKztD,UAAU,uBAAf,UACI,cAAC,GAAD,CAAkBa,MAAM,UAAUlD,MAAM,aACvC+sC,EAAae,SAAS/lC,QAAO,SAAAiO,GAAC,MAAe,eAAXA,EAAE9S,SAAwBgE,KAAI,SAACwmB,EAASlnB,GAAV,OAC7D,cAAC,GAAD,CAA0DtD,MAAOwqB,EAAQxqB,MAAOlD,MAAO0tB,EAAQqiC,gBAAiB9D,WAAYv+B,EAAQ3iB,KAApI,iBAAiC2iB,EAAQxqB,OAAzC,OAAiDsD,OAErD,cAAC,GAAD,CAAkBtD,MAAM,SAASlD,MAAOyX,EAAIlF,YAAc,WAAa,aAAc05C,WAAY2D,WAMzG,qBAAKvtD,UAAU,sBAAsB0I,IAAKijD,EAAcjjD,IAAxD,SAEI,cAAC0qB,GAAD,CAAavyB,MAAM,+BAA+BwyB,YAAY,EAAMhoB,SAAS,EACzEa,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAASsgC,IADvC,SAGI,qBAAK3rD,UAAU,gBAAf,SACI,cAAC,GAAD,CAAarM,KAAM5L,IAAOuI,wBAAyBo3B,UAAWykC,GAAiB,WAO3F,qBAAKnsD,UAAU,sBACX0I,IAAKkjD,EAAWljD,IADpB,SAEI,eAAC0qB,GAAD,CAAavyB,MAAM,kBAAkBwyB,YAAY,EAAMhoB,SAAS,EAAOa,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAASugC,IAA1G,UAEI,sBAAK5rD,UAAU,kBAAf,UACI,sBAAKA,UAAU,SAAf,UACI,oBAAIA,UAAU,sBAAd,8BACA,8BAAG,iCAASsW,WAAWy1C,GAAYv1C,QAAQ,KAA3C,gBACA,iEAGJ,sBAAKxW,UAAU,SAAf,UACI,qBAAIA,UAAU,sBAAd,gBAAuC,qBAAKuD,MAAO,CAAE4lD,cAAe,QAASpgD,SAAU,SAAhD,kBAAvC,mBACA,4BAAG,+CACH,wDAKR,sBAAK/I,UAAU,YAAf,WAEMwnD,IACE,cAAC,EAAD,CAAc3mD,MAAM,gEAApB,SACI,eAAC,EAAD,WACI,cAACyL,EAAD,WACMugD,IACE,cAAC,GAAD,CAAe1jD,SAAU0jD,GACrBxpD,YAAawpD,GACb5/B,OAAQugC,GACR9lD,WAAW,kBAAkBiD,YAAY,sBAGrD,cAAC2B,EAAD,CAAW23B,WAAS,EAAC52B,WAAW,WAAhC,SACI,gCACI,cAACmd,GAAA,EAAD,CAAUhiB,SA7NvC,WACvB+jD,IAAwBM,KA6NgCvmD,MAAOwmD,GACP3jD,SAAUqkD,GAAY35B,WAH9B,IAIO,2FAOP,IAAfu5B,IAAuBV,EACpB,8BACI,eAAC,KAAD,CAAO1gD,SAAS,UAAhB,UACI,cAACmyB,GAAA,EAAD,0BADJ,4BAE8B7nB,WAAWy1C,GAAYv1C,QAAQ,GAF7D,WAEyEzM,KAAO2iD,GAAkBviD,OAAO,4BAEpG,GAGb,qBAAKnK,UAAU,mBAAf,SACI,qBAAIA,UAAU,sBAAd,+DACsD,qBAAKuD,MAAO,CAAE4lD,cAAe,QAASpgD,SAAU,SAAhD,kBADtD,wDAIHs6C,GACD,cAAC,GAAD,CACIh4B,QAASugC,EACTnN,gBAAiBhrD,IAAqBe,aACtC6O,YAAY,EACZk3C,kBAAkB,4DAClBF,SACI,gEAEI,cAAC,GAAD,CAAyBjlC,IAAK/F,IAFlC,+CAlGxB,IAgHI,qBAAK3G,IAAK6kD,GAAV,SACI,sBAAKvtD,UAAU,uBAAuB0I,IAAK6kD,GAA3C,UACI,cAAC,KAAD,CACI55D,KAAK,SACL8T,MAAM,SACNiD,QAAQ,OACRtL,QA5Wf,WACjBuuD,YAAO,CACHzgD,UACA0gD,aAAc,iBA2WU,cAAC,KAAD,CACIj6D,KAAK,OACL8T,MAAM,OACN8E,KAAK,SACLnN,QAASgM,EAAay8B,GAAQnR,MAElC,cAAC,GAAD,CACIthB,IAAKA,EACLq2B,SAAUf,EACVtrC,QAASkpD,sB,UCvZlCuF,OAZf,YACE,OADiD,EAAtBrlD,SAAsB,EAAZ6tB,SAEnC,cAAC,EAAD,CAAcx1B,MAAM,iCAApB,SACA,cAAC,EAAD,UACE,cAACyL,EAAD,CAAWtI,GAAI,EAAf,SACE,cAACizC,GAAD,CAActjD,KAAM5L,IAAOqD,mBAAoBqc,MAAM,qBAAqBiD,QAAQ,WAAWuQ,SAAS,UAAU5X,YAAY,WCwB9H0gD,GAAe,KA+oBN+J,OAzoBf,WAAmB,IACT5+C,EAAS+0C,sBAAT/0C,KACNA,EAAO+M,SAAS/M,GAEhB,IAAMlE,EAAWC,cAEXy/B,EAAe,IAAIpE,GAAkBzpC,mBAAS,OAC9CkxD,EAAmBrjB,EAAaG,OAAOhuC,mBAAS,MAAO,KAAM,CAC/D9U,IAAOoH,oBACPpH,IAAOqH,eACPrH,IAAOsH,iBACPtH,IAAOuH,iBACPvH,IAAOwH,qBACPxH,IAAOyH,oBACPzH,IAAO0H,eACP1H,IAAO2H,iBACP3H,IAAO4H,iBACP5H,IAAO6H,qBACP7H,IAAO+H,mBACP/H,IAAOgI,2BACPhI,IAAOiI,sBACPjI,IAAO8H,oBACP9H,IAAOkI,gBACPlI,IAAOqI,yBACPrI,IAAOoI,uBACPpI,IAAOmI,cACPnI,IAAOsI,2BACPtI,IAAOqD,mBAEPrD,IAAOwD,eACPxD,IAAOuD,mBA9BG,EAiC0BuR,mBAAS,MAjCnC,mBAiCPgvD,EAjCO,KAiCOC,EAjCP,OAkC0BjvD,mBAAS,MAlCnC,mBAkCPmxD,EAlCO,KAkCSC,EAlCT,OAmC8BpxD,mBAAS,IAnCvC,mBAmCPqxD,EAnCO,KAmCSC,EAnCT,KAqCRC,EAAY,IAAI5+C,KAAYq8C,GAC5B7G,EAAgBoJ,EAAUp+C,UAAUd,GAtC5B,GAuCK,IAAIm/C,KAAcL,GAESnxD,mBAAS,OAzCzC,mBAyCPwS,EAzCO,KAyCU+8C,EAzCV,KA0CRh3C,EAAM,IAAI1F,KAAgBL,GAEhCvR,qBAAU,WACN,sBAAC,sCAAA0N,EAAA,+EAE4BC,IAAUmI,WAAWmwC,IAFjD,UAEap4C,EAFb,OAG6B,IAAI6D,KAAY7D,GAAQqE,UAAUd,GAH/D,uBAKWlE,EACI3N,aAAK,CACD0K,QAAS,0CACTiE,SAAU,aAGlBkB,EAAQa,KAAK,CACTC,SAAU,aAAcrQ,MAAO,CAC3BsQ,KAAMf,EAAQ9L,SAAS4M,YAb1C,iCAkBOogD,EAAUxkB,UAAUj+B,GACpBmgD,EAAgBngD,GAnBvB,UAqB8EkI,QAAQC,IAAI,CAC/ErI,IAAUuE,UAAU+zC,GAAc70C,EAAO,GACzCzD,IAAUuE,UAAU+zC,GAAc70C,EAAO,GACzCzD,IAAUjC,IAAI,wEACdiC,IAAUgO,eAAesqC,GAAc70C,GACvCw7B,EAAazD,aAAa/3B,KA1BrC,yCAqB2Bo/C,EArB3B,KAqBuCC,EArBvC,KAqBkDlC,EArBlD,UA8BO4B,EAAcK,GACdH,EAAkBI,EAAUx/C,SAC5Bq9C,EAAmBC,GAhC1B,kDAoCOrlD,QAAQwiB,IAAR,MApCP,yDAAD,KAuCD,IAGH,IAAMglC,EAAc,OAAGxJ,QAAH,IAAGA,OAAH,EAAGA,EAAeyJ,mBAAmB,UACnDC,EAAS,OAAG1J,QAAH,IAAGA,OAAH,EAAGA,EAAeyJ,mBAAmB,QAC9CE,EAAW,OAAG3J,QAAH,IAAGA,OAAH,EAAGA,EAAeyJ,mBAAmB,UAChDG,EAAW,OAAG5J,QAAH,IAAGA,OAAH,EAAGA,EAAeyJ,mBAAmB,UAEhDvhD,EAAUjL,uBAOViJ,EAAUC,YAAQ,CACpBlF,KAAM,WAEFC,EAA6CgF,EAA7ChF,SAAUkF,EAAmCF,EAAnCE,aAAckrB,EAAqBprB,EAArBorB,MAAOnwB,EAAc+E,EAAd/E,UAtGzB,GAuGIzI,aAAY,SAACC,GAAD,OAAWA,EAAMwE,QACCtF,oBAAS,IAxG3C,mBAwGPurD,EAxGO,KAwGWC,EAxGX,OAyGkBxrD,mBAAS,CACrCgyD,QAAS,WACTC,OAAQ,aACRC,MAAO,eA5GG,mBAyGPjO,EAzGO,KAyGGkO,GAzGH,KA+GVC,GAAkB,EACtB,IAAK,IAAMlqD,MAAK+7C,EACQ,aAAhBA,EAAS/7C,MAAmBkqD,IAAmB,GAEvDA,GACwB,IAApBA,GAAwB,GAAwC,KAAlCA,GAAkB,GAAGz4C,QAAQ,GApHjD,OAwHwB3Z,oBAAS,GAxHjC,qBAwHPqyD,GAxHO,MAwHMC,GAxHN,MA0HRtnB,GAAM,uCAAG,WAAO7sC,EAAMyE,GAAb,SAAA+L,EAAA,sEAEP2jD,IAAe,GAFR,SAGDxpD,IAAQ8wB,WAAWz7B,EAAM,GAAI,CAAC,aAAckU,GAH3C,OAIPlE,EACI3N,aAAK,CACD0K,QAAS,qBACTiE,SAAU,aAPX,gDAWPhF,QAAQuC,MAAR,MACAyB,EACI3N,aAAK,CACD0K,QAAS,KAAEA,QACXiE,SAAU,aAfX,yBAmBPmjD,IAAe,GAnBR,4EAAH,wDAmCY,eAApBrO,EAASgO,QAC4B,GAArCx4B,EAAMvuC,IAAO8H,sBAC4B,GAAzCg0C,YAAOvN,EAAMvuC,IAAOkI,mBACgC,GAApD4zC,YAAOvN,EAAMvuC,IAAOsI,8BAIA,eAApBywD,EAASgO,QAC4B,GAArCx4B,EAAMvuC,IAAO8H,sBAC4B,GAAzCg0C,YAAOvN,EAAMvuC,IAAOkI,mBAIA,eAApB6wD,EAASgO,SAC6B,IAAtCx4B,EAAMvuC,IAAO8H,sBAC6B,GAA1CymC,EAAMvuC,IAAOqI,4BAC6B,IAA1CyzC,YAAOvN,EAAMvuC,IAAOkI,mBACgC,GAApD4zC,YAAOvN,EAAMvuC,IAAOsI,8BAIA,eAApBywD,EAASgO,SAC6B,IAAtCx4B,EAAMvuC,IAAO8H,sBAC6B,GAA1CymC,EAAMvuC,IAAOqI,4BAC6B,IAA1CyzC,YAAOvN,EAAMvuC,IAAOkI,kBAnBpB++D,GAAY,2BAAKlO,GAAN,IAAgBgO,OAAQ,WAAYC,MAAO,gBAuBlC,eAApBjO,EAASgO,QAC4B,GAApCx4B,EAAMvuC,IAAO+H,qBAC6B,GAAvCwmC,EAAMvuC,IAAOiI,wBACkB,GAA/BsmC,EAAMvuC,IAAOmI,gBAEjB8+D,GAAY,2BAAKlO,GAAN,IAAgBgO,OAAQ,WAAYC,MAAO,gBAKpC,cAAlBjO,EAASiO,OAC6B,GAArCz4B,EAAMvuC,IAAOoH,sBACsB,GAAhCmnC,EAAMvuC,IAAOqH,iBACqB,GAAlCknC,EAAMvuC,IAAOsH,mBACqB,GAAlCinC,EAAMvuC,IAAOuH,mBACyB,GAAtCgnC,EAAMvuC,IAAOwH,uBACwB,GAArC+mC,EAAMvuC,IAAOyH,sBACmB,GAAhC8mC,EAAMvuC,IAAO0H,iBACqB,GAAlC6mC,EAAMvuC,IAAO2H,mBACqB,GAAlC4mC,EAAMvuC,IAAO4H,mBACyB,GAAtC2mC,EAAMvuC,IAAO6H,wBAEjBo/D,GAAY,2BAAKlO,GAAN,IAAgBiO,MAAO,cAClC/nD,QAAQwiB,IAAI,uBAhNF,OAmN4B3sB,oBAAS,GAnNrC,qBAmNPuyD,GAnNO,MAmNQnC,GAnNR,MAwNR3E,GAAY,uCAAG,gCAAA98C,EAAA,6DACX+8C,EADW,+BAAA/8C,EAAA,MACQ,WAAOxQ,EAAMyE,GAAb,SAAA+L,EAAA,+EAEX7F,IAAQ8wB,WAAWz7B,EAAM,GAAI,CAAC,aAAckU,GAFjC,uBAGXzD,IAAU+8C,kBAAkBzE,GAAc70C,GAH/B,OAIjBlE,EACI3N,aAAK,CACD0K,QAAStI,EAAEsI,QACXiE,SAAU,aAPD,gDAWjBhB,EACI3N,aAAK,CACD0K,QAAS,yBACTiE,SAAU,aAdD,QAiBrBq8C,GAAoB,GAjBC,yDADR,wDAqBXgH,EAAc,SAAChmD,GACjB2B,EAAS3N,aAAK,CACV0K,QAAS,yEACTiE,SAAU,cAxBD,SA4BbihD,IAAiB,GACXvE,EAAiBt9C,EAAam9C,EAAkB8G,GA7BzC,SA8BP3G,IA9BO,uDAgCb1hD,QAAQuC,MAAR,MACAyB,EACI3N,aAAK,CACD0K,QAAS,KAAEA,QACXiE,SAAU,aApCL,yBAwCbihD,IAAiB,GAxCJ,4EAAH,qDA6CZqC,GAAwBh5B,EAAMvuC,IAAOgI,4BACrCw/D,GAAoBj5B,EAAMvuC,IAAOiI,uBACjCw/D,GAAiBl5B,EAAMvuC,IAAO+H,oBACpCgO,qBAAU,YACwB,IAA1BwxD,KACAppD,EAASne,IAAOiI,uBAAuB,GACvCkW,EAASne,IAAO+H,oBAAoB,MAEzC,CAACw/D,KACJxxD,qBAAU,YACoB,IAAtByxD,KACArpD,EAASne,IAAOgI,4BAA4B,GAC5CmW,EAASne,IAAO+H,oBAAoB,MAEzC,CAACy/D,KACJzxD,qBAAU,YACiB,IAAnB0xD,KACAtpD,EAASne,IAAOgI,4BAA4B,GAC5CmW,EAASne,IAAOiI,uBAAuB,MAE5C,CAACw/D,KAGJ,IAAMC,GAAkBn5B,EAAMvuC,IAAO8H,qBAC/B6/D,GAAuBp5B,EAAMvuC,IAAOqI,0BACpCu/D,GAAqBr5B,EAAMvuC,IAAOkI,iBAClC2/D,GAA+Bt5B,EAAMvuC,IAAOsI,4BAC5Cw/D,GAAmBv5B,EAAMvuC,IAAOqD,oBAhSxB,GAkSsByR,oBAAS,GAlS/B,qBAkSPizD,GAlSO,MAkSKC,GAlSL,MAoSdjyD,qBAAU,YAE0B,IAA5B+lC,YAAO4rB,MAC0B,IAAjC5rB,YAAO6rB,IAE2B,GAA9B7rB,YAAO8rB,IACPI,IAAc,IACuB,GAA9BlsB,YAAO8rB,KAA+B9rB,YAAO+rB,IACpDG,IAAc,IAKlBA,IAAc,KAEnB,CAACN,GAAiBC,GAAsBC,GAAoBC,KAE/D,IArTc,GAyT0C/yD,oBAAS,GAzTnD,qBAyTPmzD,GAzTO,MAyTeC,GAzTf,MA8Ud,OAnBAnyD,qBAAU,WACN,IAAIoyD,EAAoB/pD,EAAUpe,IAAOqD,oBACrC8kE,GAAsD,IAAhCj0C,SAASi0C,IAC/BH,IAAc,GACdE,IAAwB,KAGxBF,IAAc,GACdE,IAAwB,MAE7B,CAACJ,KAUA,cAAC,IAAD,2BAAkB3kD,GAAlB,aACI,cAAC,EAAD,UACI,sBAAKvX,KAAK,mBAAV,UACI,qBAAKqM,UAAU,aAAf,SACI,qBAAKA,UAAU,UAAf,SACI,sBAAKA,UAAU,qBAAf,UACI,qBAAKA,UAAU,mBAAf,SACI,qBAAKG,IAAI,yBAAyBO,IAAI,oBAAoB6C,MAAO,CAAEO,UAAW,aAElF,sBAAK9D,UAAU,6BAAf,UACI,qBAAIA,UAAU,sBAAd,UACKouD,EAAUz6D,KACX,cAACy4C,GAAD,OAEJ,oBAAGpsC,UAAU,UAAb,cAAyBouD,EAAUx6D,eACnC,qBAAIoM,UAAU,sBAAd,UAAqCkP,EAArC,WAA8CA,EAAO,KACrD,mBAAGjP,KAAK,aAAR,2CAMfmoD,EACG,cAAC/Y,GAAD,CAAoBvH,OA/BzB,WACXugB,GAAoB,GACpBlnD,OAAOC,SAAS6e,QAAO,IA6B6BhT,QAAS,CACzCpM,MAAOutD,EAAUz6D,KACjBC,YAAaw6D,EAAUx6D,YACvB+b,KAAMo0C,MAGV,sBAAK/jD,UAAU,UAAf,UACI,qBAAKA,UAAU,iCAAf,SAEI,sBAAKA,UAAU,sBAAf,UACI,oBAAIA,UAAU,sBAAd,kCAIA,cAAC,GAAD,CAAa8gD,SAAUmO,KAEvB,sBAAKjvD,UAAU,uBAAf,UACI,sBAAKA,UAAU,sBAAf,UACI,qBAAKA,UAAU,qBAAf,SAC2B,aAArB8gD,EAAS+N,SACP,cAAC,KAAD,CACItrD,MAAO,CAAElE,MAAO,cAGE,eAArByhD,EAAS+N,SACN,cAAC,KAAD,CACItrD,MAAO,CAAElE,MAAO,cAGF,eAArByhD,EAAS+N,SACN,cAAC,KAAD,CACItrD,MAAO,CAAElE,MAAO,eAIhC,8CAEJ,sBAAKW,UAAU,sBAAf,UACI,qBAAKA,UAAU,qBAAf,SAC0B,aAApB8gD,EAASgO,QACP,cAAC,KAAD,CAAiBvrD,MAAO,CAAElE,MAAO,cAEZ,eAApByhD,EAASgO,QACN,cAAC,KAAD,CAAwBvrD,MAAO,CAAElE,MAAO,cAEvB,eAApByhD,EAASgO,QACN,cAAC,KAAD,CAAiBvrD,MAAO,CAAElE,MAAO,eAG7C,kDAEJ,sBAAKW,UAAU,sBAAf,UACI,qBAAKA,UAAU,qBAAf,SACyB,aAAnB8gD,EAASiO,OACP,cAAC,KAAD,CACIxrD,MAAO,CAAElE,MAAO,cAGA,eAAnByhD,EAASiO,OACN,cAAC,KAAD,CACIxrD,MAAO,CAAElE,MAAO,cAGJ,eAAnByhD,EAASiO,OACN,cAAC,KAAD,CACIxrD,MAAO,CAAElE,MAAO,eAIhC,4DAMhB,qBAAKW,UAAU,YAEf,sBAAKA,UAAU,sBAAf,UAGI,qBAAKA,UAAU,QAAf,SACI,sBAAKA,UAAU,eAAf,UACI,qBAAKA,UAAU,uBAAf,SACI,oBAAIA,UAAU,sBAAd,2BAEJ,sBAAKA,UAAU,iBAAf,UAEI,cAAC,GAAD,IAEC6vD,GAAmB,GAChB,qBAAKtsD,MAAO,CAAElE,MAAO,MAAOqP,QAAS,OAAQG,WAAY,QAAzD,SA3IlB,CACtBshD,EAAG,sOA2I4DN,eAOrCG,IACE,qBAAKhwD,UAAU,cAAf,SACI,sBAAKA,UAAU,eAAf,UACI,qBAAKA,UAAU,uBAAf,SACI,oBAAIA,UAAU,sBAAd,2BAEJ,qBAAKA,UAAU,UAAf,SACI,sBAAKA,UAAU,SAAf,UACKsvD,IACG,qBAAKtvD,UAAU,SAAf,SACI,cAAC,GAAD,UACI,cAACi0C,GAAA,EAAD,UACI,qBAAKzwC,wBAAyB,CAAEC,OAAQyqD,WAOxD,sBAAKluD,UAAU,qBAAf,UACI,oNAGA,8BACI,cAACk8B,GAAD,CAAmBvoC,KAAM5L,IAAO8H,oBAAqByW,MAAOmpD,GAAiBpsD,YAAY,MAE7F,yBAE6B,IAA5BwgC,YAAO4rB,KACJ,qCACI,2OAGA,8BAEI,cAACvzB,GAAD,CAAmBvoC,KAAM5L,IAAOqI,yBAA0BkW,MAAOopD,GAAsBrsD,YAAY,YAMnH,sBAAKrD,UAAU,qBAAf,UACI,8DAGA,qBAAKA,UAAU,SAAf,SACI,cAAC,GAAD,CAAUrM,KAAM5L,IAAO+H,mBAAoB2X,MAAM,2FAErD,sBAAKzH,UAAU,SAAf,UACI,cAAC,GAAD,CAAUrM,KAAM5L,IAAOiI,sBAAuByX,MAAM,uBACnD8nD,IACG,8BACI,cAAC,GAAD,CAAO57D,KAAM5L,IAAOmI,cAAewX,WAAW,yBAAyBrE,YAAY,SAI/F,sBAAKrD,UAAU,SAAf,UACI,cAAC,GAAD,CAAUrM,KAAM5L,IAAOgI,2BAA4B0X,MAAM,uDACxD6nD,IACG,8BACI,cAAClN,GAAD,CACIzuD,KAAM5L,IAAOoI,uBACbsX,MAAM,+BACNpE,YAAY,EACZu+C,WAAY,KACZC,cAAe,SAAClkD,GAAD,MAAkC,OAAvBA,EAAMg8B,wBAOpD,sBAAK35B,UAAU,qBAAf,UACI,wHAIA,8BAEI,cAACk8B,GAAD,CAAmBvoC,KAAM5L,IAAOkI,gBAAiBqW,MAAOqpD,GAAoBtsD,YAAY,MAE3FwgC,YAAO8rB,KACJ,qCACI,iGAIA,8BAEI,cAACzzB,GAAD,CAAmBvoC,KAAM5L,IAAOsI,2BAA4BiW,MAAOspD,GAA8BvsD,YAAY,aAM3HysD,IACE,qBAAK9vD,UAAU,cAAf,SACI,eAAC,KAAD,CAAOgM,SAAS,QAAQhM,UAAU,qBAAlC,UACI,cAACm+B,GAAA,EAAD,2BADJ,gQAW1B6xB,IACE,8BACI,cAAC,GAAD,CAAqB3kC,QAAS0iC,EAAkB7+C,KAAMA,OAG5D8gD,IACE,sBAAKhwD,UAAU,gBAAf,UACI,sBAAKA,UAAU,eAAf,UACI,qBAAKA,UAAU,uBAAf,SACI,oBAAIA,UAAU,sBAAd,6BAGJ,sBAAKA,UAAU,iBAAf,UAEI,qBAAIA,UAAU,oCAAd,UAAmDkP,EAAnD,WAA4DA,EAAO,EAAnE,oBACA,qBAAKlP,UAAU,gBAAf,SACI,wBAAOA,UAAU,QAAjB,UACI,gCACI,+BACI,6BAAI,uCACJ,6BAAI,6CACJ,6BAAI,4DAGZ,kCACI,+BACI,oCAAKwuD,QAAL,IAAKA,OAAL,EAAKA,EAAgBz6D,OACrB,6BAAI,cAAC,GAAD,CAAUJ,KAAM5L,IAAOyH,oBAAqBiY,MAAM,UACtD,oCAAK+mD,QAAL,IAAKA,OAAL,EAAKA,EAAgB5B,cAEzB,+BACI,oCAAK8B,QAAL,IAAKA,OAAL,EAAKA,EAAW36D,OAChB,6BAAI,cAAC,GAAD,CAAUJ,KAAM5L,IAAO0H,eAAgBgY,MAAM,UACjD,oCAAKinD,QAAL,IAAKA,OAAL,EAAKA,EAAW9B,cAEpB,+BACI,oCAAK+B,QAAL,IAAKA,OAAL,EAAKA,EAAa56D,OAClB,6BAAI,cAAC,GAAD,CAAUJ,KAAM5L,IAAO2H,iBAAkB+X,MAAM,UACnD,oCAAKknD,QAAL,IAAKA,OAAL,EAAKA,EAAa/B,cAEtB,+BACI,oCAAKgC,QAAL,IAAKA,OAAL,EAAKA,EAAa76D,OAClB,6BAAI,cAAC,GAAD,CAAUJ,KAAM5L,IAAO4H,iBAAkB8X,MAAM,UACnD,oCAAKmnD,QAAL,IAAKA,OAAL,EAAKA,EAAahC,cAEtB,+BACI,oCAAK4B,QAAL,IAAKA,OAAL,EAAKA,EAAgBz6D,KAAK40B,QAAQzZ,EAAMA,EAAK,KAC7C,6BAAI,cAAC,GAAD,CAAUvb,KAAM5L,IAAO6H,qBAAsB6X,MAAM,UACvD,oCAAK+mD,QAAL,IAAKA,OAAL,EAAKA,EAAgB5B,SAASjkC,QAAQzZ,EAAMA,EAAK,mBAzCzE,OADJ,QAmDF8gD,IACE,sBAAKhwD,UAAU,uBAAf,UACI,cAAC,KAAD,CACIrM,KAAK,SACL8T,MAAM,SACNiD,QAAQ,OACRtL,QAthBnB,WACjBuuD,YAAO,CACHzgD,UACA0gD,aAAc,kBAqhBc,cAAC,KAAD,CACIviD,QAAS6jD,GACTv7D,KAAK,OACL8T,MAAM,OACN0B,UAAW2mD,GACXvjD,KAAK,SACLnN,QAASgM,EAAay8B,IA1e9C,SAACx+B,GACbrC,QAAQwiB,IAAI,QAASngB,GACrB2B,EACI3N,aAAK,CACD0K,QAAS,yEACTiE,SAAU,kBAuec,cAAC,GAAD,CAAyBX,QAAS+jD,GAAeh6C,IAAKA,EAAKq2B,SAAU,CAAE79B,WAAYkiD,IAAc1wD,QAASkpD,uBC9pBnI,eAAmB,IAAbjmD,EAAY,sBACLxF,mBAAS,IADJ,mBACxBslB,EADwB,KACjB2Z,EADiB,KAsB/B,OAjBAh+B,oBAAS,sBAAC,sCAAA0N,EAAA,sEAEiBC,IAAUjC,IAAI,kBAAmB,CACpD,qBAAsBnC,IAAeC,eAAevf,IAAOmG,wBAHzD,OAEEkiE,EAFF,OAKE1oC,EAAY,GALd,eAMc0oC,GANd,IAMJ,2BAASC,EAAgB,SACjBlhD,EAAO,IACR1H,MAAQ4oD,EAAMj1D,KACnB+T,EAAK7I,MAAQ+pD,EAAMpiC,MACnBvG,EAAU3Z,KAAKoB,GAVb,8BAYJ2sB,EAASpU,GAZL,2CAcP,IAGI,cAAC4B,GAAD,2BAAcjnB,GAAd,IAAqBsI,YAAY,QAAQ+c,UAAWvF,MCAvD4hC,GAAe,OAkYN58B,OA5Xf,WAAiB,IACPjY,EAAS+0C,sBAAT/0C,KAEAy9B,EAAa1wB,SAAS/M,GAEtBhE,EAAUC,YAAQ,CACpBlF,KAAM,WAEFC,EAAkCgF,EAAlChF,SAAUkF,EAAwBF,EAAxBE,aAAckrB,EAAUprB,EAAVorB,MAG1BppB,GAFYxP,aAAY,SAACC,GAAD,OAAWA,EAAMwE,QAE/BF,wBACVolD,EAAe,WACjBsG,YAAO,CACHzgD,UACA0gD,aAAc,gBAfV,EAmBoC/wD,oBAAS,GAnB7C,mBAmBLurD,EAnBK,KAmBaC,EAnBb,KAqBN3d,EAAe,IAAIpE,GAAkBzpC,mBAAS,OAC9CyzD,EAAgB5lB,EAAaG,OAAOhuC,mBAAS,MAAO,KAAM,CAC5D9U,IAAOgG,0BACPhG,IAAOiG,4BACPjG,IAAOkG,4BACPlG,IAAOmG,qBACPnG,IAAOwD,eACPxD,IAAOuD,iBACPvD,IAAO+C,sBACP/C,IAAOC,WACPD,IAAOG,gBACPH,IAAOE,UACPF,IAAO6G,cAIL4gD,EAAe,UAAM7C,EAAN,YAAoBA,EAAa,GArC1C,EAuCkC9vC,mBAAS,MAvC3C,mBAuCLwS,EAvCK,KAuCY+8C,EAvCZ,KAwCNh3C,EAAM,IAAI1F,KAAgBL,GAxCpB,EA0CgCxS,mBAAS,MA1CzC,mBA0CLo0C,EA1CK,KA0CWC,EA1CX,KA4CNyD,EADoB,IAAI9O,GAAeoL,GACD51C,SAAStT,IAAOwD,gBAE5DuS,oBAAS,sBAAC,kCAAA0N,EAAA,sEAC6BC,IAAUuE,UAAU+zC,GAAc70C,GAD/D,iBAEmBqhD,YAFnB,uBAGFvlD,EACI3N,aAAK,CACD0K,QAAS,0CACTiE,SAAU,aAGlBq7C,IATE,0CAa+CxzC,QAAQC,IAAI,CAC7DrI,IAAUgO,eAAesqC,GAAcpX,GACvCjC,EAAazD,aAAa0F,GAC1BlhC,IAAU0lC,oBAAoB,OAAQxE,EAAY,CAAC5kD,IAAOwD,mBAhBxD,mCAaC8gE,EAbD,UAaqBxX,EAbrB,KAkBNuX,EAAmBC,GACnBnb,EAAkB2D,GAnBZ,4CAoBP,IAKH,IAAM7pC,EAAWC,cAvEL,EAyE0BpO,oBAAS,GAzEnC,mBAyELqyD,EAzEK,KAyEQC,EAzER,KA2ERtnB,EAAM,uCAAG,WAAO7sC,GAAP,eAAAwQ,EAAA,sEAGX2jD,GAAe,GAHJ,SAKLxpD,IAAQ8wB,WAAWz7B,EAAM,GAAI,CAAC,aAAc2xC,GALvC,cAMX3hC,EACE3N,aAAK,CACH0K,QAAS,qBACTiE,SAAU,aATH,SAYQP,IAAU0lC,oBAAoB,OAAQxE,EAAY,CAAC5kD,IAAOwD,iBAZlE,OAYPogB,EAZO,OAaXulC,EAAkBvlC,GAbP,kDAeX3E,QAAQuC,MAAR,MACAyB,EACE3N,aAAK,CACH0K,QAAS,KAAEA,QACXiE,SAAU,aAnBH,yBAuBXmjD,GAAe,GAvBJ,6EAAH,sDA2BJz4B,EAAU,aAtGJ,EA+G8B75B,oBAAS,GA/GvC,mBA+GLuyD,EA/GK,KA+GUnC,EA/GV,KAiHN3E,EAAY,uCAAG,8BAAA98C,EAAA,6DACX+8C,EADW,+BAAA/8C,EAAA,MACQ,WAAOxQ,GAAP,SAAAwQ,EAAA,sEACf7F,IAAQ8wB,WAAWz7B,EAAM,GAAI,CAAC,aAAc2xC,GAD7B,uBAEflhC,IAAU+8C,kBAAkBzE,GAAcpX,GAF3B,OAIrB0b,GAAoB,GAJC,2CADR,+DAQb4E,GAAiB,GACXvE,EAAiBt9C,EAAam9C,EAAkB7xB,GATzC,SAUPgyB,IAVO,OAWb19C,EACI3N,aAAK,CACD0K,QAAS,yBACTiE,SAAU,aAdL,gDAkBbhF,QAAQuC,MAAR,MACAyB,EACI3N,aAAK,CACD0K,QAAS,KAAEA,QACXiE,SAAU,aAtBL,yBA0BbihD,GAAiB,GA1BJ,4EAAH,qDA+BbuD,EAAcl6B,EAAMvuC,IAAOwD,gBAE1BklE,EAAgBn6B,EAAMvuC,IAAOgG,2BAC7B2iE,EAAkBp6B,EAAMvuC,IAAOiG,6BAC/B2iE,GAAkBr6B,EAAMvuC,IAAOkG,6BACrC6P,qBAAU,WACNkJ,QAAQwiB,IAAIzhC,IAAOgG,2BACnBiZ,QAAQwiB,IAAIinC,GACPA,GACDvqD,EAASne,IAAOgG,2BAA2B,KAEhD,CAAC0iE,IACJ3yD,qBAAU,WACNkJ,QAAQwiB,IAAIzhC,IAAOiG,6BACnBgZ,QAAQwiB,IAAIknC,GACPA,GACDxqD,EAASne,IAAOiG,6BAA6B,KAElD,CAAC0iE,IACJ5yD,qBAAU,WACNkJ,QAAQwiB,IAAIzhC,IAAOkG,6BACnB+Y,QAAQwiB,IAAImnC,IACPA,IACDzqD,EAASne,IAAOkG,6BAA6B,KAElD,CAAC0iE,GAAiBF,EAAeC,IAGpC,IAAME,GAAat6B,EAAMvuC,IAAOmG,sBAK1B4yD,GAAW,GAEbA,GAASuP,MADTO,GACiB,WAEA,aAEhBH,IAAmC,IAAlBA,GACjBC,IAAuC,IAApBA,GACnBC,KAAuC,IAApBA,IACpB3pD,QAAQwiB,IAAI,0BACZs3B,GAASiO,MAAQ,YAEjBjO,GAASiO,MAAQ,aAGjBjO,GAAStrC,QADTg7C,EACmB,WAEA,aAGvB,IAAMK,GAAqC,aAAnB/P,GAASuP,OAA2C,aAAnBvP,GAASiO,OAA6C,aAArBjO,GAAStrC,QAE/Fs7C,GAAuB,EAC3B,IAAK,IAAM/rD,MAAK+7C,GACQ,aAAhBA,GAAS/7C,KACT+rD,KAGR,IAAM7B,GAA2C,IAAzB6B,IAA8B17C,EAAIlF,YAAc,IAAM1K,KAAKkrC,MAAM,GAAWogB,GAAuB,EAA7B,IAAmC17C,EAAIlF,YAAc,EAAI,IAGjJ6gD,GAAWjmB,mBACXkmB,GAAalmB,mBACbmmB,GAAWnmB,mBACXyiB,GAAYziB,mBAElB,OACI,cAAC,IAAD,2BAAkB5/B,GAAlB,aACI,cAAC,EAAD,UACI,sBAAKvX,KAAK,mBAAV,UACI,qBAAKqM,UAAU,aAAf,SACI,qBAAKA,UAAU,UAAf,SACI,sBAAKA,UAAU,qBAAf,UACI,qBAAKA,UAAU,mBAAf,SACI,qBAAKG,IAAI,yBAAyBO,IAAI,oBAAoB6C,MAAO,CAAEO,UAAW,aAElF,sBAAK9D,UAAU,6BAAf,UACI,qBAAIA,UAAU,sBAAd,uBAEI,cAACosC,GAAD,OAEJ,oBAAIpsC,UAAU,sBAAd,SAAqCwvC,IACrC,mBAAGvvC,KAAK,aAAR,2CAMfmoD,EACG,8BACI,cAAC/Y,GAAD,CAAoBvH,OAnI7B,WACXugB,GAAoB,GACpBlnD,OAAOC,SAAS6e,QAAO,IAiIiChT,QAAS,CACzCpM,MAAO,OACP8O,KAAMo0C,QAId,sBAAK/jD,UAAU,UAAf,UACI,qBAAKA,UAAU,iCAAf,SAEI,sBAAKA,UAAU,sBAAf,UACI,oBAAIA,UAAU,sBAAd,kCAIA,cAAC,GAAD,CAAa8gD,SAAUmO,KACvB,sBAAKjvD,UAAU,uBAAf,UACI,cAAC,GAAD,CAAkBa,MAAM,UAAUlD,MAAM,aACxC,cAAC,GAAD,CAAkBkD,MAAM,QAAQlD,MAAOmjD,GAASuP,MAAOzG,WAAYmH,KACnE,cAAC,GAAD,CAAkBlwD,MAAM,UAAUlD,MAAOmjD,GAAStrC,QAASo0C,WAAYoH,KACvE,cAAC,GAAD,CAAkBnwD,MAAM,QAAQlD,MAAOmjD,GAASiO,MAAOnF,WAAYqH,KACnE,cAAC,GAAD,CAAkBpwD,MAAM,SAASlD,MAAOyX,EAAIlF,YAAc,WAAa,aAAc05C,WAAY2D,aAM7G,qBAAKvtD,UAAU,YAEf,sBAAKA,UAAU,sBAAf,UAGI,sBAAKA,UAAU,kBAAkB0I,IAAKqoD,GAAtC,UACI,sBAAK/wD,UAAU,eAAf,UACI,qBAAKA,UAAU,uBAAf,SACI,oBAAIA,UAAU,sBAAd,8BAGJ,sBAAKA,UAAU,iBAAf,UACI,oBAAIA,UAAU,oCAAd,iCACA,cAACkxD,GAAD,CACIv9D,KAAM5L,IAAOmG,qBACbuZ,MAAM,2BATlB,OADJ,OAgBA,qBAAKzH,UAAU,gBAAgB0I,IAAKsoD,GAApC,SACI,sBAAKhxD,UAAU,eAAf,UACI,qBAAKA,UAAU,uBAAf,SACI,oBAAIA,UAAU,sBAAd,+BAEoC,KAAtB,OAAjB20C,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBvO,kBAChB,qBAAKj3B,MAAI,EAAT,SACI,cAAC,KAAD,CAAOnD,SAAS,QAAQhM,UAAU,qBAAlC,SACI,4BACI,6CAEI,mBAAGC,KAAK,6FAAR,kCAFJ,2EAShB,sBAAKD,UAAU,iBAAf,UACI,cAAC,GAAD,CAAqBitB,OAAQqjC,EAAcn5B,iBAAiBpvC,IAAOwD,kBAEnE,cAAC,GAAD,CAAe0hC,OAAQqjC,EAAcn5B,iBAAiBpvC,IAAOuD,4BAMzE,sBAAK0U,UAAU,gBAAgB0I,IAAKuoD,GAApC,UACI,sBAAKjxD,UAAU,eAAf,UACI,qBAAKA,UAAU,uBAAf,SACI,oBAAIA,UAAU,sBAAd,6BAIJ,sBAAKA,UAAU,iBAAf,UACI,qBAAIA,UAAU,oCAAd,UAAmDwvC,EAAnD,oBACA,qBAAKxvC,UAAU,gBAAf,SACI,wBAAOA,UAAU,QAAjB,UACI,gCACI,+BACI,sCACA,iDAGR,kCACI,+BACI,2CACA,6BAAI,cAAC,GAAD,CAAUrM,KAAM5L,IAAOgG,0BAA2B0Z,MAAM,aAEhE,+BACI,6CACA,6BAAI,cAAC,GAAD,CAAU9T,KAAM5L,IAAOiG,4BAA6ByZ,MAAM,aAElE,+BACI,6CACA,6BAAI,cAAC,GAAD,CAAU9T,KAAM5L,IAAOkG,4BAA6BwZ,MAAM,wBA3BtF,OADJ,OAsCA,sBAAKzH,UAAU,uBAAuB0I,IAAK6kD,GAA3C,UACI,cAAC,KAAD,CACI55D,KAAK,SACL8T,MAAM,SACNiD,QAAQ,OACRtL,QAASioD,IAEb,cAAC,KAAD,CACIh8C,QAAS6jD,EACTv7D,KAAK,OACL8T,MAAM,OACN0B,UAAU,EACVoD,KAAK,SACLnN,QAASgM,EAAay8B,EAAQnR,KAElC,cAAC,GAAD,CACIrrB,QAAS+jD,EACTh6C,IAAKA,EACLq2B,SAAU,CAAE79B,YAA2BijD,IACvCzxD,QAASkpD,sBC/PlC6I,OApIf,YAAmF,IAAzD9lC,EAAwD,EAAxDA,QAASlb,EAA+C,EAA/CA,OAA+C,IAAvCihD,qBAAuC,aAAhBC,gBAAgB,MAAP,IAAO,IAEjBrrD,YAAe,CAAEC,KAAM,WAAzDC,GAFmD,EAEtEmD,OAFsE,EAE9DlD,UAF8D,EAEnDD,UAAwBowB,GAF2B,EAEzClrB,aAFyC,EAE3BkrB,OAC7CqW,EAAathB,EAAQnc,KAErBoiD,EAAgC,MAAbD,EAEnBE,EAPwE,WAS1E,WAAY5zD,EAAOuR,EAAMvb,EAAMI,GAAoC,IAA9By9D,EAA6B,uDAApB,EAAGl+C,IAAiB,8EAC9DrY,KAAKyoB,OAAS/lB,EACd1C,KAAKw2D,MAAQ19D,EACbkH,KAAK2oB,MAAQ1U,EACbjU,KAAKy2D,MAAQ/9D,EACbsH,KAAK02D,QAAUH,EACfv2D,KAAK22D,UAAYt+C,EAfqD,8CAqB1E,WAAmB,IAAD,EACd,OAAuB,OAAnBrY,KAAKyoB,OAAO,GACLzoB,KAAKyoB,OAAO,GACvB,UAAO2H,EAAQ8L,iBAAiBl8B,KAAKtH,aAArC,aAAO,EAAqCy6B,UAxB0B,IA6B1E,SAAgB9nB,GACZrL,KAAKyoB,OAAO,GAAGpd,GACfJ,EAASjL,KAAKtH,KAAM2S,KA/BkD,oBAmC1E,WACI,OAAOrL,KAAK22D,YApC0D,gBA0C1E,WACI,MAAM,GAAN,OAAU32D,KAAKw2D,MAAf,YAAwBx2D,KAAK2oB,SA3CyC,gBAiD1E,WACI,OAAO3oB,KAAKy2D,QAlD0D,oBAqD1E,WACI,IAAM3tC,EAAK,OAAG5T,QAAH,IAAGA,OAAH,EAAGA,EAAQ0hD,SAAS,UAAW52D,KAAKw2D,OAC/C,OAAK1tC,EAEEha,KAAOga,EAAM7Z,MAAM4nD,SAAS72D,KAAK02D,QAAS,SAASxnD,OAAO,cADtD,OAxD2D,0BA6D1E,WACI,OAA4B,IAArBlP,KAAK82D,aAA0C,MAArB92D,KAAK82D,aA9DgC,IAiE1E,SAAmBzrD,GAEXrL,KAAK82D,YADLzrD,EACmB,EAEA,KArE+C,0BAwE1E,WAEI,OADcgwB,EAAMr7B,KAAKtH,OACP,MA1EoD,KA+ExEq+D,EAAY,CACd,IAAIT,EAAe10D,mBAAS,MAAO8vC,EAAY5kD,IAAO2F,kCAAmC,SAAU,EAAG0jE,GACtG,IAAIG,EAAe10D,mBAAS,MAAO8vC,EAAY5kD,IAAO4F,6BAA8B,QACpF,IAAI4jE,EAAe10D,mBAAS,MAAO8vC,EAAa,EAAG5kD,IAAO6F,+BAAgC,SAAU,EAAG0jE,GACvG,IAAIC,EAAe10D,mBAAS,MAAO8vC,EAAa,EAAG5kD,IAAO8F,+BAAgC,UAC1F,IAAI0jE,EAAe10D,mBAAS,MAAO8vC,EAAa,EAAG5kD,IAAO+F,mCAAoC,SAAU,EAAGsjE,IAG/G,OACI,qBAAKpxD,UAAU,gBAAf,SACI,wBAAOA,UAAU,QAAjB,UACI,gCACI,+BACI,sCACA,0DACA,2CAGR,gCACKgyD,EAAUtsD,QAAO,SAAAiO,GAAC,OAAIA,EAAEL,YAAUzO,KAAI,SAAAsK,GACnC,IAAM8iD,EAAgB9iD,EAAKxb,KACrBu+D,EAA0B,iBAAmB/iD,EAAKxb,KAExD,OACI,+BACI,+BAAKwb,EAAKpb,KAAK,uBAAM,2DAA8Bob,EAAKy9C,eACxD,6BACI,cAACxqB,GAAD,CACIzuC,KAAMs+D,EACNtnD,YAAY,eACZi3B,UAAW,EACXt7B,MAAO6I,EAAK4iD,YACZvpD,SAAU,SAACub,GAAD,OAAW5U,EAAK4iD,YAAchuC,EAAM7jB,OAAOoG,WAG7D,6BACI,cAAC,GAAD,CACI3S,KAAMu+D,EACNzqD,MAAM,gBACNnB,MAAO6I,EAAKgjD,iBAAkB,EAC9BhpD,SAAUgG,EAAK4iD,YAAc,EAC7BvpD,SAAU,SAAC4pD,GAAD,OAAejjD,EAAKgjD,eAAiBC,qBC/CxEC,OApEf,YAAiD,IAApBhnC,EAAmB,EAAnBA,QAASlb,EAAU,EAAVA,OAE5BnF,EAAWC,cACXC,EAAUC,YAAQ,CAAElF,KAAM,WACxBmF,EAAwBF,EAAxBE,aAAckrB,EAAUprB,EAAVorB,MAJsB,EAMAz5B,mBAAS,MANT,mBAMrCo0C,EANqC,KAMrBC,EANqB,KAQtCyD,EADoB,IAAI9O,GAAeoL,GACD51C,SAAStT,IAAOwD,gBARhB,SAU7B4lD,IAV6B,2EAU5C,4BAAA3lC,EAAA,sEACuBC,IAAU0lC,oBAAoB,OAAQ9lB,EAAQnc,KAAM,CAACnnB,IAAOwD,iBADnF,OACQogB,EADR,OAEIulC,EAAkBvlC,GAFtB,4CAV4C,sBAc5C7N,qBAAU,WACFutB,EAAQnc,MACRiiC,MAEL,CAAC9lB,EAAQnc,OAEZ,IAAM3D,EAAW,SAACvQ,GACd,sBAAC,sBAAAwQ,EAAA,sEACS6f,EAAQuX,YAAY5nC,EAAMgQ,GADnC,uBAESmmC,IAFT,0CAAD,IAMEza,EAAU,aAIVyc,EAAc7c,EAAMgD,YAAmBvxC,IAAOwD,eAAgB8J,IAAuBQ,OAG3F,OACI,cAAC,IAAD,2BAAkBqV,GAAlB,aACI,sBAAMK,SAAUH,EAAaG,EAAUmrB,GAAvC,SACI,eAACtD,GAAD,CAAavyB,MAAOwqB,EAAQxqB,MAAOwyB,YAAY,EAAME,YAAanoB,EAAaG,EAAUmrB,GACrFxqB,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAASA,IACnChgB,QAASggB,EAAQla,UAFrB,WAI4C,KAAtB,OAAjBwjC,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBvO,kBAChB,qBAAKj3B,MAAI,EAAT,SACI,cAAC,KAAD,CAAOnD,SAAS,QAAQhM,UAAU,qBAAlC,SACI,4BACI,6CAEI,mBAAGC,KAAK,6FAAR,kCAFJ,+EAWhB,cAAC,GAAD,CAAqBgtB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOwD,kBAE7D,cAAC,GAAD,CAAe0hC,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOuD,oBAEvD,cAAC,GAAD,CAAgB+/B,QAASA,EAAS+lC,eAAe,EAAOjhD,OAAQA,EAAQkhD,SAAQ,OAAEle,QAAF,IAAEA,OAAF,EAAEA,EAAamf,oBC/CpGC,OAzBf,YAA0D,IAAjC7nB,EAAgC,EAAhCA,aAAct1B,EAAkB,EAAlBA,IAAKm4C,EAAa,EAAbA,UAElCE,EAAiB/iB,EAAa98B,YAAcwH,EAAIlF,YAAc,IAAM1K,KAAKkrC,MAAM,GAAK,GAAKhG,EAAauc,gBAAkB,KAAO7xC,EAAIlF,YAAc,EAAI,IAE3J,OACI,qBAAKlQ,UAAU,iCAAf,SACI,sBAAKA,UAAU,sBAAf,UACI,oBAAIA,UAAU,sBAAd,kCAIA,cAAC,GAAD,CAAa8gD,SAAU2M,IAEvB,sBAAKztD,UAAU,uBAAf,UACI,cAAC,GAAD,CAAkBa,MAAM,UAAUlD,MAAM,aACvC+sC,EAAae,SAAS/lC,QAAO,SAAAiO,GAAC,MAAe,eAAXA,EAAE9S,SAAwBgE,KAAI,SAAAwmB,GAAO,OACpE,cAAC,GAAD,CAAkBxqB,MAAOwqB,EAAQxqB,MAAOlD,MAAO0tB,EAAQqiC,gBAAiB9D,WAAYv+B,EAAQ3iB,SAEhG,cAAC,GAAD,CAAkB7H,MAAM,SAASlD,MAAOyX,EAAIlF,YAAc,WAAa,aAAc05C,WAAY2D,aCuCtGiF,OApDf,YAAmC,IAAZnnC,EAAW,EAAXA,QAGbrgB,EAAWC,cACXC,EAAUC,YAAQ,CAAElF,KAAM,WACgBmF,GAAwBF,EAAhE7B,OAAgE6B,EAAxD9F,UAAwD8F,EAA7C/E,UAA6C+E,EAAlChF,SAAkCgF,EAAxBE,cAE1CG,GAFkEL,EAAVorB,MAE7C,SAACt7B,GACdqwB,EAAQuX,YAAY5nC,EAAMgQ,KAGxB0rB,EAAU,SAACj3B,KAGjB,OACI,cAAC,IAAD,2BAAkByL,GAAlB,aACI,sBAAMK,SAAUH,EAAaG,EAAUmrB,GAAvC,SACI,eAACtD,GAAD,CAAavyB,MAAOwqB,EAAQxqB,MAAOwyB,YAAY,EAAME,YAAanoB,EAAaG,EAAUmrB,GACrFxqB,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAASA,IAAahgB,QAASggB,EAAQla,UADrE,UAEI,cAAC,EAAD,CAActQ,MAAM,2DAA2DwL,aAAa,EAA5F,SACI,eAAC,EAAD,WACI,cAACC,EAAD,UACI,cAAC,GAAD,CAAgBjJ,YAAY,EAAM4pB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO+D,iBAAkB2b,MAAM,eAEtG,cAAC6E,EAAD,UACI,cAAC,GAAD,CAAgBjJ,YAAY,EAAM4pB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOgE,iBAAkB0b,MAAM,oBAI9G,cAAC,EAAD,CAAc5G,MAAM,mBAApB,SACI,cAAC,EAAD,UACI,cAACyL,EAAD,UACI,cAAC,GAAD,CAAY2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOoL,iBAAkBuX,QAASwrB,GAC3E7yB,YAAY,EAAO+kB,eAAgB,IACnC1gB,WAAW,wRAI3B,cAAC,EAAD,CAAc7G,MAAM,WAApB,SACI,cAAC,EAAD,UACI,cAACyL,EAAD,UACI,cAAC,GAAD,CAAgBjJ,YAAU,EAAC4pB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOyL,2BAC/DiU,MAAM,mFC8B3BgrD,OArEf,YAA0C,IAAZpnC,EAAW,EAAXA,QAEpBrgB,EAAWC,cACXC,EAAUC,YAAQ,CAAElF,KAAM,WACgBmF,GAAwBF,EAAhE7B,OAAgE6B,EAAxD9F,UAAwD8F,EAA7C/E,UAA6C+E,EAAlChF,SAAkCgF,EAAxBE,cAAckrB,EAAUprB,EAAVorB,MAExD/qB,EAAW,SAACvQ,GACdqwB,EAAQuX,YAAY5nC,EAAMgQ,IAGxB0rB,EAAU,SAACj3B,KAIXizD,EAAiBp8B,EAAMvuC,IAAO8K,iBAC9B8/D,EAAoBr8B,EAAMvuC,IAAOgL,wBACjC6/D,EAAkBt8B,EAAMvuC,IAAOkL,kBAErC,OACI,cAAC,IAAD,2BAAkBiY,GAAlB,aACI,sBAAMK,SAAUH,EAAaG,EAAUmrB,GAAvC,SACI,cAACtD,GAAD,CAAavyB,MAAOwqB,EAAQxqB,MAAOwyB,YAAY,EAAME,YAAanoB,EAAaG,EAAUmrB,GACrFxqB,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAASA,IACnChgB,QAASggB,EAAQla,UAFrB,SAKI,eAAC,EAAD,WACI,cAAC,EAAD,UACI,cAAC,GAAD,CAAe9N,YAAY,EAAM4pB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO8K,iBACrE4U,MAAK,+DAA0D4jB,EAAQnc,KAAlE,YAA0Emc,EAAQnc,KAAO,EAAzF,uBAEO,SAAnBwjD,GACG,qCACI,cAAC,EAAD,UACI,cAAC,GAAD,CAAervD,YAAY,EAAM4pB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO+K,wBACrE2U,MAAM,uEAEd,cAAC,EAAD,UACI,cAAC,GAAD,CAAepE,YAAY,EAAM4pB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOgL,wBACrE0U,MAAM,sGAIC,SAAtBkrD,GACG,qCACI,cAAC,EAAD,UACI,cAAC,GAAD,CAAgBtvD,YAAY,EAAM4pB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOiL,cACtEyU,MAAM,qCAEd,cAAC,EAAD,UACI,cAAC,GAAD,CAAgBpE,YAAY,EAAM4pB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOkL,kBACtEwU,MAAM,6DAEc,QAAZ,OAAfmrD,QAAe,IAAfA,OAAA,EAAAA,EAAiBtsD,QACd,cAAC,EAAD,UACI,cAAC,GAAD,CAAYjD,YAAY,EAAM4pB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOmL,2BAClEwU,WAAW,sEC7BvD,SAASmrD,GAAT,GAAqE,IAApC5lC,EAAmC,EAAnCA,OAAQ9jB,EAA2B,EAA3BA,SAAUhF,EAAiB,EAAjBA,MAAU9B,EAAO,6CAG1DqwC,EAAczuC,GAAoBgpB,EAAOmH,SAAUjwB,EAAO,MAC1D2uD,EAAqB7uD,GAAoBgpB,EAAOmH,SAAUjwB,EAAO,aACjE4uD,EAAoB9uD,GAAoBgpB,EAAOmH,SAAUjwB,EAAO,YALN,EAQQ6B,cAAlCE,GAR0B,EAQxDmD,OARwD,EAQhDjE,UARgD,EAQrCe,UARqC,EAQ1BD,UAR0B,EAQhBkF,aARgB,EAQFkrB,MAQ9D,OANAx4B,qBAAU,WAENoI,EAAS6sD,EAAmB9lC,EAAOmB,YAEpC,IAGC,qCACI,cAAC,GAAD,CAAaz6B,KAAM++C,EAAapsC,MAAO2mB,EAAO/Q,KAC9C,cAAC,GAAD,CAAavoB,KAAMm/D,EAAoBxsD,MAAO2mB,EAAOwvB,YACrD,cAAC,GAAD,yBAAU9oD,KAAMo/D,GAAuB1wD,GAAvC,IAA8C8G,SAAUA,EAAU1B,MAAOwlB,EAAOpf,kBAK7EmlD,OAtDf,YAAiF,IAAjD3nC,EAAgD,EAAhDA,QAAStwB,EAAuC,EAAvCA,SAAU0M,EAA6B,EAA7BA,MAAO0B,EAAsB,EAAtBA,SAEhD8pD,GAFsE,yDAEzD5nC,EAAQ2c,qBAAqBjtC,IAE1Cm4D,EAAcD,EAAWt3D,MAAK,SAAA6P,GAAC,OAAIA,EAAEqoB,YACrCM,EAAahrB,GAAY+pD,EAE/B,OACI,gCACI,+BAAKzrD,EAAL,IAAY,cAAC,GAAD,CAAYwlB,OAAQimC,OAChC,6BACKD,EAAWpuD,KAAI,SAAC2G,EAAGzG,GAAJ,OACZ,6BACI,cAAC8tD,GAAD,CAAwB5lC,OAAQzhB,EAAGrC,SAAUgrB,EAAYhwB,MAAOY,eC0CzEouD,OApDf,YAAwC,IAAZ9nC,EAAW,EAAXA,QAElBrgB,EAAWC,cACXC,EAAUlF,YAAe,CAAEC,KAAM,WACSmF,GAAwBF,EAAhE7B,OAAgE6B,EAAxD9F,UAAwD8F,EAA7C/E,UAA6C+E,EAAlChF,SAAkCgF,EAAxBE,cAE1CG,EAAW,SAACvQ,GACdqwB,EAAQuX,YAAY5nC,EAAMgQ,IAGxB0rB,EAAU,SAACj3B,KAIX2zD,GAAc98B,EAVoDprB,EAAVorB,OAUpCvuC,IAAOuL,sBAEjC,OACI,cAAC,IAAD,2BAAkB4X,GAAlB,aACI,sBAAMK,SAAUH,EAAaG,EAAUmrB,GAAvC,SACI,eAACtD,GAAD,CAAavyB,MAAOwqB,EAAQxqB,MAAOwyB,YAAY,EAAMnnB,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAASA,IACpFkI,YAAanoB,EAAaG,EAAUmrB,GAAUrrB,QAASggB,EAAQla,UADnE,UAGI,cAAC,EAAD,UACI,cAAC,GAAD,CAAgB8b,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOuL,sBAAuB+P,YAAY,EACvFoE,MAAM,qCAGG,aAAhB2rD,GACG,cAAC,EAAD,UACI,cAAC,GAAD,CAAsB/nC,QAASA,EAAStwB,SAAUhT,IAAOwL,6BAA8B8P,YAAY,EAC/FoE,MAAM,0DAIlB,cAAC,EAAD,UACI,cAAC,GAAD,CAAYwlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOqL,uBAChDiQ,YAAY,EAAM0yB,WAAYF,GAC9BpuB,MAAM,sEAEd,cAAC,EAAD,UACI,cAAC,GAAD,CAAYwlB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOsL,0BAChDgQ,YAAY,EAAM0yB,WAAYF,GAC9BpuB,MAAM,gFCnC5Bs8C,GAAe,OAiLNsP,OA3Kf,WAAiB,IACLnkD,EAAS+0C,sBAAT/0C,KACFy9B,EAAa1wB,SAAS/M,GAEtBhE,EAAUC,YAAQ,CAAElF,KAAM,WAE1B+E,EAAWC,cAGXy/B,EAAe,IAAIpE,GAAkBzpC,mBAAS,MAAOknD,IACrDQ,EAAuB7Z,EAAaG,OAAOhuC,mBAAS,MAAOiuC,mBAAU,CACvE/iD,IAAOwD,eACPxD,IAAO+C,sBACP/C,IAAOuD,iBACPvD,IAAO4F,6BACP5F,IAAO6F,+BACP7F,IAAO8F,gCACR,kBACGylE,EAAsB5oB,EAAaG,OAAOhuC,mBAAS,MAAOiuC,mBAAU,CACtE/iD,IAAOmH,QACPnH,IAAO4G,aACR,iBACG01D,EAAiB3Z,EAAaG,OAAOhuC,mBAAS,MAAOiuC,mBAAU,CACjE/iD,IAAO8K,gBACP9K,IAAO+K,uBACP/K,IAAOgL,uBACPhL,IAAOiL,aACPjL,IAAOkL,iBACPlL,IAAOmL,2BACR,mBACGqgE,EAAmB7oB,EAAaG,OAAOhuC,mBAAS,MAAOiuC,mBAAU,CACnE/iD,IAAOuL,qBACPvL,IAAOwL,6BACPxL,IAAOqL,sBACPrL,IAAOsL,0BACR,aACGmgE,EAAiB9oB,EAAaG,OAAOhuC,mBAAS,MAAOiuC,mBAAU,CACjE/iD,IAAO+D,gBACP/D,IAAOgE,gBACPhE,IAAOoL,gBACPpL,IAAOyL,2BACR,YAzCS,EA6C0BqJ,mBAAS,MA7CnC,mBA6CLyS,EA7CK,KA6CQy1C,EA7CR,OA8CkCloD,mBAAS,MA9C3C,mBA8CLwS,EA9CK,KA8CY+8C,EA9CZ,KA+CNj3C,EAAc,IAAIzF,KAAgBL,GAElCc,EADU,IAAIX,KAAYF,GACTU,UAAU28B,GAEjC7uC,qBAAU,WACN,sBAAC,kCAAA0N,EAAA,sEAEiDqI,QAAQC,IAAI,CACtDrI,IAAUmI,WAAWmwC,IACrBrZ,EAAakB,WAAWe,GACxBlhC,IAAUgO,eAAesqC,GAAcpX,KAL9C,sCAEU13B,EAFV,WAE4BE,EAF5B,MAOoBuL,UAPpB,kCAQajV,IAAUs6C,iBAAiBhC,GAAcpX,GARtD,QASOx3B,EAAYuL,WAAY,EAT/B,QAWGqkC,EAAe9vC,GACfm3C,EAAmBj3C,GAZtB,2CAAD,KAeD,IAIH,IAvEY,EA2EoCtY,oBAAS,GA3E7C,mBA2ELurD,EA3EK,KA2EaC,EA3Eb,KA2GZ,OACI,cAAC,IAAD,2BAAkBn9C,GAAlB,aACI,cAAC,EAAD,UACI,sBAAKvX,KAAK,mBAAV,UACI,cAAC,GAAD,CAAWshB,QAAS3F,EAAaJ,KAAMy9B,IAGtCyb,EACG,cAAC/Y,GAAD,CAAoBvH,OAvCzB,WACXugB,GAAoB,GACpBlnD,OAAOC,SAAS6e,QAAO,IAqC6BqvB,kBAAmB5E,IAEvD,sBAAK1qC,UAAU,UAAf,UAEI,cAAC,GAAD,CAAgB0qC,aAAcA,EAAct1B,IAAKD,IAEjD,qBAAKnV,UAAU,YAEf,sBAAKA,UAAU,sBAAf,UAEI,qBAAK0I,IAAK67C,EAAqB77C,IAA/B,SACI,cAAC,GAAD,CAAmB2iB,QAASk5B,EAAsBp0C,OAAQA,MAI9D,qBAAKzH,IAAK4qD,EAAoB5qD,IAA9B,SACI,cAAC,GAAD,CAAiBwG,KAAMA,EAAMhD,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAASioC,IAAyBjoC,QAASioC,MAGtG,qBAAK5qD,IAAK27C,EAAe37C,IAAzB,SACI,cAAC,GAAD,CAAoB2iB,QAASg5B,MAGjC,qBAAK37C,IAAK6qD,EAAiB7qD,IAA3B,SACI,cAAC,GAAD,CAAkB2iB,QAASkoC,MAG/B,qBAAK7qD,IAAK8qD,EAAe9qD,IAAzB,SACI,cAAC,GAAD,CAAa2iB,QAASmoC,MAI1B,qBAAKxzD,UAAU,uBAAf,UAGMmV,EAAYjF,aACV,cAAC,KAAD,CACIvc,KAAK,SACL8T,MAAM,SACNiD,QAAQ,UACR6B,KAAK,SACLpD,UAAWuhC,EAAa98B,WACxBxO,QA5EZ,SAACK,GAEzB,sBAAC,sBAAA+L,EAAA,+EAEaC,IAAU+8C,kBAAkBzE,GAAcpX,GAFvD,OAGO0b,GAAoB,GACpBr9C,EACI3N,aAAK,CACD0K,QAAS,yBACTiE,SAAU,aAPzB,gDAYOhB,EACI3N,aAAK,CACD0K,QAAS,KAAGA,QACZiE,SAAU,aAfzB,wDAAD,uB,qBCnEOynD,G,WAnCX,WAAYz4D,GAAO,qBACfC,KAAKE,MAAQH,E,mDAQjB,WACI,OAAKC,KAAKE,MAGcu4D,KAAMz4D,KAAKE,MAAO,oBAF/B,O,uBAUf,SAAUw4D,GACN,IAAK14D,KAAKE,MACN,OAAO,KAFQ,qBAIDF,KAAKE,OAJJ,IAInB,kCAASy4D,EAAT,uBACuBA,EAAMj+C,UAD7B,IACI,4BACI,GADJ,QACek+C,aAAeF,EACtB,OAAO,GAHnB,0BAAA97B,MAJmB,8BASnB,OAAO,M,KCiPAi8B,OAlQf,YAAmF,IAAlDzoC,EAAiD,EAAjDA,QAAS7iB,EAAwC,EAAxCA,SAAU6tB,EAA8B,EAA9BA,SAA8B,IAApBoG,iBAAoB,MAAR,KAAQ,EAExEvxB,EAAUC,YAAQ,CAAElF,KAAM,WACdmF,GAAwBF,EAAlChF,SAAkCgF,EAAxBE,cAEZyuB,GAFoC3uB,EAAVorB,MAET54B,aAAY,SAACC,GAAD,OAAWA,EAAMwE,SAL0B,EAOhDtF,oBAAS,GAPuC,mBAOvEwO,EAPuE,KAO9DC,EAP8D,KAQxEN,EAAWC,cAR6D,EAUdpO,mBAAS,MAVK,mBAUvEmpD,EAVuE,KAU7CC,EAV6C,KAWxEjH,EAAyB,IAAInZ,GAAemgB,GAE5C9F,EAA6B,CAC/BzsD,IAAqBC,eACrBD,IAAqBQ,WACvB4Q,KAAI,SAAA8O,GAAC,MAAK,CAACogD,WAAYpgD,EAAGqvC,YAAahE,EAAuBx1C,IAAImK,EAAEhgB,UAKhEqgE,EAA2B,uCAAG,4BAAAxoD,EAAA,sEACHC,IAAU0lC,oBAAoB,KAAM9lB,EAAQnc,KAAMmc,EAAQtM,WADvD,OAC1BkyB,EAD0B,OAEhCgV,EAA4BhV,GAFI,2CAAH,qDAKjCnzC,qBAAU,WACN,sBAAC,sBAAA0N,EAAA,sEACSwoD,IADT,0CAAD,KAGD,CAAC3oC,EAAQwE,QAAQ10B,QAEpB,IAAMoQ,EAAQ,uCAAG,WAAOvQ,EAAMyE,GAAb,SAAA+L,EAAA,sEAETF,GAAW,GAFF,SAGY3F,IAAQ8wB,WAAWz7B,EAAM,GAAI,IAHzC,cAIe,oBAAbwN,GACPA,GAAS,GAEbwC,EACI3N,aAAK,CACD0K,QAAS,oBACTiE,SAAU,aAVT,gDAcThB,EACI3N,aAAK,CACD0K,QAAS,KAAEA,QACXiE,SAAU,aAjBT,yBAqBTV,GAAW,GArBF,4EAAH,wDAyBRorB,EAAU,SAACrtB,EAAQ5J,KAIzB3B,qBAAU,WAEN,OADAqD,OAAOU,iBAAiB,eAAgB80B,GACjC,WACHx1B,OAAOW,oBAAoB,eAAgB60B,MAEhD,IAEH,IAAMA,EAAY,SAACl3B,GACfA,EAAEC,iBACFD,EAAEu3B,YAAc,IAtE0D,EAyE1Bn6B,mBAAS,MAzEiB,mBAyEvEo3D,EAzEuE,KAyEnDC,EAzEmD,OA0E5Br3D,mBAAS,MA1EmB,mBA0EvEs3D,EA1EuE,KA0EpDC,EA1EoD,OA2EhCv3D,mBAAS,MA3EuB,mBA2EvEw3D,EA3EuE,KA2EtDC,EA3EsD,KA8H9E,OAhDAx2D,qBAAU,WACN,IAAMypD,EAAejiD,IAAKu0B,EAAD,iBAA2B9xC,IAAOkH,eAIrDq4D,EAAkBhiD,IACpBu0B,EADwB,iBAEd9xC,IAAOiH,kBAarB,GAVIs4D,GACA1iD,MAAMkgC,QAAQwiB,IACdA,EAAgB1kD,OAAS,GAEzBsxD,GAAsB,GACtBE,GAAqB,IAErBF,GAAsB,GAItB3M,GACA3iD,MAAMkgC,QAAQyiB,IACdA,EAAa3kD,OAAS,EACxB,CACE,IAAM9F,EAAMiN,OACNwqD,EAAehN,EAAazxC,MAAK,SAACN,GACpC,IAAMg/C,EAAWlvD,IAAKkQ,EAAD,sBACfi/C,EAAYnvD,IAAKkQ,EAAD,uBAEtB,GAAIg/C,GACqB13D,EAAI43D,KAAK3qD,KAAOyqD,GAAW,SAC7B,GACf,OAAO,EAIf,GAAIC,GACqB33D,EAAI43D,KAAK3qD,KAAO0qD,GAAY,SAC9B,GACf,OAAO,KAInBH,EAAmBC,MAExB,CAAC16B,IAGA,cAAC,IAAD,2BAAkB3uB,GAAlB,aACI,sBAAMK,SAAUH,EAAaG,EAAUmrB,GAAvC,SACI,eAACtD,GAAD,CACIvyB,MAAM,cACNwyB,YAAY,EACZE,YAAanoB,EAAaG,EAAUmrB,GACpClD,cAAe6C,EACfhrB,QAASA,EACTa,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAASA,IANvC,UAQI,cAAC,EAAD,UACI,cAAC,EAAD,UACI,eAAC/e,EAAD,CAAWtI,GAAI,GAAf,UACI,oBAAIhE,UAAU,sBAAd,qCACA,qBAAIA,UAAU,OAAd,UACKm0D,GACG,qBAAIn0D,UAAU,KAAd,UACI,gFACA,8BACI,qBAAIA,UAAU,OAAd,UACI,qBAAIA,UAAU,KAAd,+EAEoBy8B,EAAY,GAFhC,8BAGsBA,EAAY,EAHlC,OAKA,oBAAIz8B,UAAU,KAAd,2HAKA,oBAAIA,UAAU,KAAd,sGAQfi0D,GACG,qBAAIj0D,UAAU,KAAd,UACI,2EACA,8BACI,iJAGU,qBAAKuD,MAAO,CAAE4lD,cAAe,QAASpgD,SAAU,SAAhD,kBAHV,iFASXsrD,GACG,qBAAIr0D,UAAU,KAAd,UACI,8EACA,gCACI,yDAC6By8B,EAAY,GADzC,8DAIA,kGAEmBA,EAAY,GAF/B,mKAUXw3B,IACII,GAAmBF,IAChB,qBAAIn0D,UAAU,KAAd,UACI,0FAIA,8BACI,iJAGqB,qBAAKuD,MAAO,CAAE4lD,cAAe,QAASpgD,SAAU,SAAhD,kBAHrB,+FAehC,cAAC,EAAD,UACI,cAAC,EAAD,UACI,cAACuD,EAAD,CAAWtI,GAAI,GAAf,SACI,qBAAKhE,UAAU,QAAf,SACKkgD,EAA2Bx6C,QAAO,SAAAiO,GAAC,aAAiC,KAA7B,UAAAA,EAAEqvC,mBAAF,eAAe9c,cAAqBrhC,KAAI,SAAA+V,GAAQ,aACpF,cAAC,GAAD,CACI0/B,YAAa1/B,EAASm5C,WAAWngE,YACjCy3B,QAASA,EACTozB,gBAAiB7jC,EAASm5C,WAC1B1wD,YAAiD,KAArC,UAAAuX,EAASooC,mBAAT,eAAsB3/C,yBAQ1D,cAAC,EAAD,UACI,cAAC,EAAD,UACI,cAACiJ,EAAD,CAAWtI,GAAI,GAAf,SACI,qBAAKhE,UAAU,QAAf,SACI,cAAC,GAAD,CACIs6C,YAAa7mD,IAAqBgB,mBAAmBb,YACrDy3B,QAASA,EACTozB,gBAAiBhrD,IAAqBgB,mBACtC4O,YAAY,qBCnMrCsxD,OAzDf,YAA+D,IAA9BzoD,EAA6B,EAA7BA,OAAkBmf,GAAW,EAArB7iB,SAAqB,EAAX6iB,SACzCngB,EAAUC,YAAQ,CAAElF,KAAM,WACgBmF,GAAwBF,EAAhE7B,OAAgE6B,EAAxD9F,UAAwD8F,EAA7C/E,UAA6C+E,EAAlChF,SAAkCgF,EAAxBE,cAC1CJ,GADkEE,EAAVorB,MAC7CrrB,eAEXM,EAAW,SAACvQ,EAAMyE,GACpB4rB,EAAQuX,YAAY5nC,EAAMgQ,IAExB0rB,EAAO,uCAAG,WAAO17B,EAAMyE,GAAb,SAAA+L,EAAA,0FAAH,wDAIb,OACI,cAAC,IAAD,2BAAkBN,GAAlB,aACI,sBAAMK,SAAUH,EAAaG,EAAUmrB,GAAvC,SACI,eAACtD,GAAD,CAAavyB,MAAM,kBAAkBwyB,YAAY,EAAME,YAAanoB,EAAaG,EAAUmrB,GAAUrrB,QAASggB,EAAQw3B,gBAAiB32C,OAAQA,EAAQunB,eAAe,EAAtK,UAEI,cAAC,KAAD,CAAOznB,SAAS,UAAU3M,MAAM,UAAUW,UAAU,uBAApD,6CAKA,cAAC,GAAD,CAAeqrB,QAASA,IAExB,qBAAKrrB,UAAU,cAAcqN,WAAW,WAAxC,SACI,cAAC,GAAD,CAAe4f,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO4D,0BACnD0X,YAAY,EACZoE,MAAO,2GAAqE,sBAAMlE,MAAO,CAAClE,MAAM,OAApB,eAArE,WAGf,qBAAKW,UAAU,cAAf,SACI,cAAC,GAAD,CAAeitB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOsG,uBAAwBgV,YAAY,EACvFoE,MAAO,kJAA6G4jB,EAAQnc,KAArH,WAIf,qBAAK+0B,WAAS,EAACjkC,UAAU,cAAzB,SACI,cAAC,GAAD,CAAeitB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOuG,2BAA4B+U,YAAY,EAC3FoE,MAAO,4FAAuD4jB,EAAQnc,KAA/D,WAIf,sBAAKlP,UAAU,qBAAf,UACI,oBAAIA,UAAU,sBAAd,+BACA,eAAC,EAAD,CAAUA,UAAU,SAApB,UACI,cAAC,GAAD,CAAeitB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOoG,eAAgBuZ,WAAW,sBAClF,cAAC,GAAD,CAAeulB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOqG,cAAesZ,WAAW,gCCsP9FktD,OAtRf,YAAkE,IAA9B1oD,EAA6B,EAA7BA,OAAQ1D,EAAqB,EAArBA,SAAU6iB,EAAW,EAAXA,QAC5CngB,EAAUC,YAAQ,CACpBlF,KAAM,WAEFoD,EAAgE6B,EAAhE7B,OAA8BnD,GAAkCgF,EAAxD9F,UAAwD8F,EAA7C/E,UAA6C+E,EAAlChF,UAAUkF,EAAwBF,EAAxBE,aAAckrB,EAAUprB,EAAVorB,MACxDtrB,EAAWC,cAEX4pD,EAAan3D,aAAY,SAACC,GAAD,OAAWA,EAAMwE,QAE1C2yD,EAAuBC,YAAUz+B,EAAMvuC,IAAO4E,8BAC9CqoE,EAA2BD,YAAUz+B,EAAMvuC,IAAO6E,kCAClDqoE,EAAuBF,YAAUz+B,EAAMvuC,IAAO8E,8BAC9CqoE,EAAuBH,YAAUz+B,EAAMvuC,IAAOuF,+BAC9C6nE,EAA2BJ,YAAUz+B,EAAMvuC,IAAOwF,mCAClD6nE,EAAuBL,YAAUz+B,EAAMvuC,IAAOyF,+BASpD,SAAS6nE,EAAgBC,EAAgBC,EAAoBC,GAGzD,OAAuB,OAAnBF,GAAkD,OAAvBC,GAAkD,OAAnBC,KAI1B,IAAnBF,IAAkD,IAAvBC,KAAmD,IAAnBC,EAIhF,IAAMC,EAAgBJ,EAAgBP,EAAsBE,EAA0BC,GAChFS,EAAsBL,EAAgBH,EAAsBC,EAA0BC,GAnC/B,EAqCfv4D,oBAAS,GArCM,mBAqCtD84D,EArCsD,KAqCrCC,EArCqC,KAsC7D93D,qBAAU,WAAO,IAAD,GACZ,UAAA+2D,EAAWvgD,OAAOvsB,IAAO+E,mCAAzB,eAAsDwZ,QAASsvD,GAAmB,KACnF,CAACf,IAEJ/2D,qBAAU,YACkB,IAApB63D,IAEAzvD,EAASne,IAAO+E,2BAA4B,MAC5CoZ,EAASne,IAAOgF,8BAA+B,MAC/CmZ,EAASne,IAAOiF,4BAA6B,MAC7CkZ,EAASne,IAAOkF,2BAA4B,MAC5CiZ,EAASne,IAAOmF,0BAA2B,MAC3CgZ,EAASne,IAAOoF,4BAA6B,IAC7C+Y,EAASne,IAAOqF,iCAAkC,IAClD8Y,EAASne,IAAOsF,0BAA2B,MAC3C6Y,EAASne,IAAOuF,6BAA8B,MAC9C4Y,EAASne,IAAOwF,iCAAkC,MAClD2Y,EAASne,IAAOyF,6BAA8B,SAEnD,CAACmoE,IAGJ,IAQME,EAAYv/B,EAAMvuC,IAAOkE,wBACzB6pE,EAAkBf,YAAUc,GAG5BtqD,EAAQ,uCAAG,WAAOvQ,EAAMyE,GAAb,SAAA+L,EAAA,+EAEH7F,IAAQ8wB,WAAWz7B,EAAM,GAAI,GAAIqwB,EAAQnc,MAFtC,OAIL1G,GACAA,IAEJwC,EACI3N,aAAK,CACD0K,QAAS,+BACTiE,SAAU,aAVT,gDAcThB,EAAS3N,aAAK,CACV0K,QAAS,KAAEA,QACXiE,SAAU,aAhBL,yDAAH,wDAqBR0qB,EAAO,uCAAG,WAAO17B,EAAMyE,GAAb,SAAA+L,EAAA,sDACZxE,QAAQwiB,IAAIngB,GADA,2CAAH,wDAMb,OACI,cAAC,IAAD,2BAAkB6B,GAAlB,aACI,+BACI,eAACkoB,GAAD,CAAavyB,MAAM,YAAYwyB,YAAY,EAAME,YAAanoB,EAAaG,EAAUmrB,GAAUrrB,QAASggB,EAAQw3B,gBAAiBpvB,eAAe,EAAMvnB,OAAQA,EAA9J,UACI,sBAAKlM,UAAU,cAAf,UACI,cAAC,EAAD,UACI,cAACsM,EAAD,UACI,cAAC,GAAD,CAAe2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOkE,wBAAyBoX,YAAY,EACxFoE,MAAM,+LAGjBquD,GACG,cAAC,EAAD,UACI,cAACxpD,EAAD,UACI,cAAC,GAAD,CAAY2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOmE,2BAA4BmX,YAAY,EACxFoE,MAAM,+IAK1B,sBAAKzH,UAAU,cAAf,UACI,cAAC,EAAD,UACI,cAACsM,EAAD,UACI,cAAC,GAAD,CAAY2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOoE,2BAA4Bub,WAAW,4BAA4BrE,YAAY,QAG3I,cAAC,EAAD,UACI,cAACiJ,EAAD,UACI,cAAC,GAAD,CAAY2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOqE,8BAA+Bsb,WAAW,iBAAiBrE,YAAY,EAAMqH,QAASwrB,SAGlJ,cAAC,EAAD,UACI,cAAC5pB,EAAD,UACI,cAAC,GAAD,CAAgB2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOsE,4BAA6Bob,MAAM,QAAQpE,YAAY,QAGvH,cAAC,EAAD,UACI,cAACiJ,EAAD,UACI,cAAC,GAAD,CAAY2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOuE,2BAA4Bob,WAAW,OAAOrE,YAAY,QAGtH,cAAC,EAAD,UACI,cAACiJ,EAAD,UACI,cAAC,GAAD,CAAY2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOwE,0BAA2Bme,QAASwrB,GAChFxuB,WAAW,WAAWrE,YAAY,EAAMsH,YAAY,iBAIpE,cAAC,EAAD,UACI,cAAC2B,EAAD,UACI,cAAC,GAAD,CAAY2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOyE,4BAA6Bkb,WAAW,eAAerE,YAAY,EAC/GqH,QAASwrB,GAAuBvrB,YAAY,oCAG5D,cAAC,EAAD,UACI,cAAC2B,EAAD,UACI,cAAC,GAAD,CAAY2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO0E,iCAAkC4W,YAAY,EAAMoE,MAAM,sBAK1H,qBAAKzH,UAAU,cAAf,SACI,cAAC,GAAD,CAAeitB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO2E,0BAA2B2W,YAAY,EAC1FoE,MAAM,8BAEd,qBAAKzH,UAAU,cAAf,SACI,cAAC,GAAD,CAAeitB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO4E,6BAA8B0W,YAAY,EAC7FoE,MAAM,wEAEd,qBAAKzH,UAAU,cAAf,SACI,cAAC,GAAD,CAAeitB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO6E,iCAAkCyW,YAAY,EACjGoE,MAAM,oHAEd,qBAAKzH,UAAU,cAAf,SACI,cAAC,GAAD,CAAeitB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO8E,6BAA8BwW,YAAY,EAC7FoE,MAAM,qFAGZguD,GAAiB,qBAAKtmD,MAAI,EAAT,SACf,eAAC,KAAD,CAAOnD,SAAS,QAAQhM,UAAU,qBAAlC,UACI,cAACm+B,GAAA,EAAD,2BACA,4BAAG,qIAAuG,mBAAGl+B,KAAK,mCAAmCC,OAAO,SAAlD,gDAIjHy1D,GAEG,eAAC,GAAD,WACI,eAAC1hB,GAAA,EAAD,WACI,oBAAIj0C,UAAU,sBAAd,4CAGA,sBAAKikC,WAAS,EAACjkC,UAAU,cAAzB,UACI,cAAC,EAAD,UACI,cAACsM,EAAD,UACI,cAAC,GAAD,CAAY2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAO+E,4BAA6BuW,YAAY,EAAMqE,WAAW,kCAGtH,cAAC,EAAD,UACI,cAAC4E,EAAD,UACI,cAAC,GAAD,CAAY5B,QAASwrB,GAAqBjJ,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOgF,+BAAgCsW,YAAY,EAAMqE,WAAW,iBAAiBiD,YAAY,uBAIpL,cAAC,EAAD,UACI,cAAC2B,EAAD,UACI,cAAC,GAAD,CAAgB2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOiF,6BAA8BqW,YAAY,EAAMoE,MAAM,QAAQkD,YAAY,cAI1I,cAAC,EAAD,UACI,cAAC2B,EAAD,UACI,cAAC,GAAD,CAAY2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOkF,4BAA6BoW,YAAY,EAAMqE,WAAW,OAAOiD,YAAY,aAIzI,cAAC,EAAD,UACI,cAAC2B,EAAD,UACI,cAAC,GAAD,CAAY5B,QAASwrB,GAAqBjJ,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOmF,2BAA4BmW,YAAY,EAAMqE,WAAW,WAAWiD,YAAY,iBAI1K,cAAC,EAAD,UACI,cAAC2B,EAAD,UACI,cAAC,GAAD,CAAY5B,QAASwrB,GAAuBjJ,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOoF,6BAA8BkW,YAAY,EAAMqE,WAAW,eAAeiD,YAAY,oCAIlL,cAAC,EAAD,UACI,cAAC2B,EAAD,UACI,cAAC,GAAD,CAAY2gB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOqF,kCAAmCiW,YAAY,EAAMoE,MAAM,sBAK3H,sBAAKzH,UAAU,cAAf,UACI,qBAAKA,UAAU,cAAf,SACI,cAAC,GAAD,CAAeitB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOsF,2BAA4BgW,YAAY,EAAMoE,MAAM,8BAE/G,qBAAKzH,UAAU,cAAf,SACI,cAAC,GAAD,CAAeitB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOuF,8BAA+B+V,YAAY,EAC9FoE,MAAM,wEAEd,qBAAKzH,UAAU,cAAf,SACI,cAAC,GAAD,CAAeitB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOwF,kCAAmC8V,YAAY,EAClGoE,MAAM,oHAEd,qBAAKzH,UAAU,cAAf,SACI,cAAC,GAAD,CAAeitB,OAAQ5B,EAAQ8L,iBAAiBpvC,IAAOyF,8BAA+B6V,YAAY,EAC9FoE,MAAM,uFAEZiuD,GAAuB,qBAAKvmD,MAAI,EAAT,SACrB,eAAC,KAAD,CAAOnD,SAAS,QAAhB,UACI,cAACmyB,GAAA,EAAD,2BACA,4BAAG,qIAAuG,mBAAGl+B,KAAK,mCAAmCC,OAAO,SAAlD,sDAK1H,cAACg0C,GAAA,EAAD,CAAa3wC,MAAO,CAAE+J,eAAgB,YAAtC,SACI,cAAC,IAAD,CACI48B,KAAK,QACL7qC,MAAM,YACND,QA1MO,WACnCw2D,GAAmB,IAsMK,0BAUVD,GACE,cAAC,KAAD,CAAQhiE,KAAK,iBAAiB8T,MAAM,4BAA4BiD,QAAQ,OAAOtL,QA9MzE,WACtBw2D,GAAmB,eCTZG,OApEf,YAA4C,IAArB9oC,EAAoB,EAApBA,OAAQ9jB,EAAY,EAAZA,SAGnBhD,EADQH,YAAe,CAAEC,KAAM,WAC/BE,UAEFpB,EAAIkoB,EAAOqa,MACX9P,EAAqBvzB,GAAoBgpB,EAAOmH,SAAUrvB,EAAGlN,IAAqB7P,YAClFguE,EAAyB/xD,GAAoBgpB,EAAOmH,SAAUrvB,EAAGlN,IAAqBM,gBACtFu/B,EAAoBzzB,GAAoBgpB,EAAOmH,SAAUrvB,EAAGlN,IAAqB5P,WACjFguE,EAAoBhyD,GAAoBgpB,EAAOmH,SAAUrvB,EAAGlN,IAAqB1P,WACjF+tE,EAAkBjyD,GAAoBgpB,EAAOmH,SAAUrvB,EAAGlN,IAAqBG,QAC/Em+D,EAAuBlyD,GAAoBgpB,EAAOmH,SAAUrvB,EAAGlN,IAAqBE,aACpFq+D,EAAqBnyD,GAAoBgpB,EAAOmH,SAAUrvB,EAAGlN,IAAqBI,mBAClFo+D,EAAsBpyD,GAAoBgpB,EAAOmH,SAAUrvB,EAAGlN,IAAqBK,mBACnFo+D,EAA2BryD,GAAoBgpB,EAAOmH,SAAUrvB,EAAGlN,IAAqBC,QACxF46C,EAAczuC,GAAoBgpB,EAAOmH,SAAUrvB,EAAGlN,IAAqBlD,IAE3Ew/B,EAAahrB,GAAY8jB,EAAO4G,SAEtC,OACI,eAAC,WAAD,WACI,eAAC,EAAD,WACI,eAACvnB,EAAD,WACI,cAAC,GAAD,CAAa3Y,KAAM++C,IACnB,cAAC,GAAD,CAAa/+C,KAAMuiE,EAAiB5vD,MAAM,MAC1C,cAAC,GAAD,CAAa3S,KAAMwiE,EAAsB7vD,MAAM,MAC/C,cAAC,GAAD,CAAO6C,SAAUgrB,EACbxgC,KAAM6jC,EACNlvB,aAAcnC,EAAUqxB,GAExB9vB,WAAY,mDAAa,cAAC,GAAD,CAAYulB,OAAQA,OAC7CtiB,YAAY,aACZD,QAAQ,WAAWrH,YAAY,GAH1Bm0B,MAMb,cAAClrB,EAAD,UACI,cAAC,GAAD,CAAOnD,SAAUgrB,EAAYxgC,KAAMqiE,EAAwB1tD,aAAcnC,EAAU6vD,GAAsDp3D,WAAW,EAAO8I,WAAW,iBAAiBgD,QAAQ,WAAWC,YAAY,iBAAiBC,WAAY,CAAEie,UAAW,EAAGqhB,KAAM,IAAxJ8rB,KAErH,cAAC1pD,EAAD,UACI,cAAC,GAAD,CAAOnD,SAAUgrB,EAAYxgC,KAAM+jC,EAAmBpvB,aAAcnC,EAAUuxB,GAA4ChwB,WAAW,YAAYgD,QAAQ,WAAWC,YAAY,YAAYtH,YAAY,GAAjGq0B,QAG/G,cAAC,EAAD,UACI,cAACprB,EAAD,UACI,cAAC,GAAD,CAAkBnD,SAAUgrB,EAAYxgC,KAAMsiE,EAAmB3tD,aAAcnC,EAAU8vD,GAA4CxuD,MAAM,WAAWiD,QAAQ,WAAWrH,YAAY,GAAnE4yD,OAG1H,cAAC,EAAD,UACI,cAAC,GAAD,CAAU9sD,SAAUgrB,EAAYxgC,KAAMyiE,EAAoB3uD,MAAM,qCAEpE,cAAC,EAAD,UACI,cAAC,GAAD,CAAU0B,SAAUgrB,EAAYxgC,KAAM0iE,EAAqB5uD,MAAM,uDAErE,eAAC,EAAD,WACI,4EACA,cAAC6E,EAAD,UACI,cAAC81B,GAAD,CAAgBj5B,SAAUgrB,EACtBxgC,KAAM2iE,EACNhuD,aAAcnC,EAAUmwD,GAExB5uD,WAAW,qBACXiD,YAAY,qBAAqBi3B,UAAW,EAAGv+B,YAAY,GAFtDizD,UAvCNrpC,EAAO/Q,KC4Dfq6C,OA3Ef,YAA+D,IAApClrC,EAAmC,EAAnCA,QAASnc,EAA0B,EAA1BA,KAAMhD,EAAoB,EAApBA,OAAQ1D,EAAY,EAAZA,SACxC0C,EAAUC,YAAQ,CAAElF,KAAM,WACgBmF,GAAwBF,EAAhE7B,OAAgE6B,EAAxD9F,UAAwD8F,EAA7C/E,UAA6C+E,EAAlChF,SAAkCgF,EAAxBE,cAC1CJ,GADkEE,EAAVorB,MAC7CrrB,eAEXM,EAAQ,uCAAG,WAAOvQ,EAAMyE,GAAb,SAAA+L,EAAA,+EAEY7F,IAAQ8wB,WAAWz7B,EAAM,GAAI,GAAIkU,GAF7C,cAGL1G,GACAA,IAEJwC,EACI3N,aAAK,CACD0K,QAAS,2CACTiE,SAAU,aATT,gDAaThB,EAAS3N,aAAK,CACV0K,QAAS,KAAEA,QACXiE,SAAU,aAfL,yDAAH,wDAqBR0qB,EAAO,uCAAG,WAAO17B,EAAMyE,GAAb,SAAA+L,EAAA,0FAAH,wDAKPgrD,EADUnrC,EAAQ2c,qBAAqBjgD,IAAOwI,UACtBulB,MAAK,SAAAnC,GAAC,OAAIA,EAAEkgB,YAE1C,OACI,cAAC,IAAD,2BAAkB3oB,GAAlB,aACI,sBAAMK,SAAUH,EAAaG,EAAUmrB,GAAvC,SACI,eAACtD,GAAD,CAAavyB,MAAM,wBAAwBwyB,YAAY,EAAME,YAAanoB,EAAaG,EAAUmrB,GAAUrrB,SAAS,EAAOa,OAAQA,EAAnI,UACI,8LAEA,cAAC,GAAD,CAAoBmf,QAASA,EAAS13B,KAAM5L,IAAOwI,SAAnD,SACK,SAACs/B,EAASkkB,EAAWC,GAClB,OACI,eAAC,WAAD,WACKnkB,EAAQhrB,KAAI,SAACooB,GAAD,OACT,cAAC,WAAD,UACI,eAAC,GAAD,WACI,cAACgnB,GAAA,EAAD,UACI,cAAC,GAAD,CAAahnB,OAAQA,MAEzB,cAACinB,GAAA,EAAD,CAAa3wC,MAAO,CAAE+J,eAAgB,YAAtC,SACI,cAAC,IAAD,CAAgB48B,KAAK,QAAQ7qC,MAAM,YAC/B8J,SAAU8jB,EAAO4G,SACjBtwB,MAAO,CAAEud,SAAU,WAAYqzB,OAAQ,SACvC/0C,QAAS40C,EAAa/mB,GAH1B,0BANGA,EAAO/Q,OAc1B,cAAC,EAAD,UACI,cAAC5P,EAAD,UACI,cAAC,KAAD,CAAQ3Y,KAAK,WAAW8T,MAAM,cAAciD,QAAQ,OAAOnH,MAAO,CAAEunB,cAAe,cAC/E3hB,SAAUqtD,EACVp3D,QAAS20C,EAAU,CAAE73B,GAAI,EAAG3iB,WAAY,mCCvDlFwqD,GAAe,KAiSN0S,OA5Rf,WACI,IAAMvpD,EAAUjL,uBACRiN,EAAS+0C,sBAAT/0C,KACFy9B,EAAa1wB,SAAS/M,GAEtBhE,EAAUC,YAAQ,CACpBlF,KAAM,WAONmF,GAEAF,EANA7B,OAMA6B,EALA9F,UAKA8F,EAJA/E,UAIA+E,EAHAhF,SAGAgF,EAFAE,cAGEypD,GADF3pD,EADAorB,MAEe54B,aAAY,SAACC,GAAD,OAAWA,EAAMwE,SAhB/B,EAkB+BtF,oBAAS,GAlBxC,mBAkBVurD,EAlBU,KAkBQC,EAlBR,OAoBqBxrD,mBAAS,MApB9B,mBAoBVyS,EApBU,KAoBGy1C,EApBH,KAqBX9vC,EAAU,IAAIzF,KAAYF,GArBf,EAuBiBzS,mBAAS,MAvB1B,mBAuBV65D,EAvBU,KAuBCC,EAvBD,OAwB6B95D,mBAAS,MAxBtC,mBAwBVwS,EAxBU,KAwBO+8C,EAxBP,KAyBXwH,EAAQ,IAAIH,GAAMiD,GAClBthD,EAAM,IAAI1F,KAAgBL,GAE1BunD,EAAsBhD,EAAMiD,UAAU,SAAWjD,EAAMiD,UAAU,aAAoC,UAArBzhD,EAAIvF,aAEpF09C,EAAYziB,iBAAO,MAEnBJ,EAAe,IAAIpE,GAAkBzpC,mBAAS,MAAOknD,IAE3DrZ,EAAa7pC,MAAQoU,EAAQpU,MAC7B,IAAMi2D,EAAiBpsB,EAAaG,OAAOhuC,mBAAS,MAAOiuC,mBAAU,CACjE/iD,IAAOkH,aACPlH,IAAOiH,gBACPjH,IAAO4D,yBACP5D,IAAOsG,sBACPtG,IAAOuG,0BACPvG,IAAOoG,cACPpG,IAAOqG,cACR,mBAEG2oE,EAAgBrsB,EAAaG,OAAOhuC,mBAAS,MAAOiuC,mBAAU,CAChE/iD,IAAOwD,eACPxD,IAAOuD,kBACR,kBAEG0rE,EAAetsB,EAAaG,OAAOhuC,mBAAS,MAAOiuC,mBAAU,CAC/D/iD,IAAOmH,QACPnH,IAAO4G,aACR,iBAEGqT,EAAW0oC,EAAaG,OAAOhuC,mBAAS,MAAOiuC,mBAAU,CAC3D/iD,IAAOwI,UACR,YAEG0mE,EAAYvsB,EAAaG,OAAOhuC,mBAAS,MAAOiuC,mBAAU,CAC5D/iD,IAAOkE,uBACPlE,IAAOmE,0BACPnE,IAAOoE,0BACPpE,IAAOqE,6BACPrE,IAAOsE,2BACPtE,IAAOuE,0BACPvE,IAAOwE,yBACPxE,IAAOyE,2BACPzE,IAAO0E,gCACP1E,IAAO2E,yBACP3E,IAAO4E,4BACP5E,IAAO6E,gCACP7E,IAAO8E,4BACP9E,IAAO+E,2BACP/E,IAAOgF,8BACPhF,IAAOiF,4BACPjF,IAAOkF,2BACPlF,IAAOmF,0BACPnF,IAAOoF,4BACPpF,IAAOqF,iCACPrF,IAAOsF,0BACPtF,IAAOuF,6BACPvF,IAAOwF,iCACPxF,IAAOyF,8BACR,aAEG0pE,EAAyB,IAAI5wB,GAAkBzpC,mBAAS,OACxD+iD,EAAcsX,EAAuBrsB,OAAOhuC,mBAAS,MAAOiuC,mBAAU,CACxE/iD,IAAOmK,mCACPnK,IAAOoK,gCACPpK,IAAOqK,8BACPrK,IAAOsK,2BACPtK,IAAOwK,4BACPxK,IAAOuK,0BACR,eAKHwL,qBAAU,WACN,sBAAC,oCAAA0N,EAAA,sEACyBC,IAAUmI,WAAWmwC,IAD9C,UACS9uC,EADT,OAEyB,IAAIzF,KAAYyF,GAASjF,UAAU28B,GAF5D,uBAIO3hC,EACI3N,aAAK,CACD0K,QAAS,0CACTiE,SAAU,aAGlBkB,EAAQa,KAAK,CACTC,SAAU,aAAcrQ,MAAO,CAC3BsQ,KAAMf,EAAQ9L,SAAS4M,YAZtC,iCAiBG+2C,EAAe9vC,GAjBlB,UAmBgDpB,QAAQC,IAAI,CACrDrI,IAAU0rD,0BAA0BpT,GAAcpX,GAClDlhC,IAAUgO,eAAesqC,GAAcpX,GACvCjC,EAAakB,WAAWe,GACxBuqB,EAAuBtrB,WAAWe,KAvBzC,oCAmBUz3B,EAnBV,KAmBkBE,EAnBlB,eAyBGg3C,EAAmBh3C,GACnBuhD,EAAazhD,GA1BhB,2CAAD,KA4BD,IAEH,IAAMkiD,EAAmB,uCAAG,sBAAA5rD,EAAA,sEAClBqI,QAAQC,IAAI,CACdgjD,EAAe3vB,mBACf+vB,EAAuBtrB,WAAWe,KAHd,2CAAH,qDAQnB6C,EAAe,UAAM7C,EAAN,YAAoBA,EAAa,GAEhD3hC,EAAWC,cAEXyrB,EAAU,SAACrtB,EAAQ5J,KA9IR,EAkJyB5C,oBAAS,GAlJlC,mBAkJVuyD,EAlJU,KAkJKnC,GAlJL,KAqJX3E,GAAY,uCAAG,8BAAA98C,EAAA,6DACX+8C,EADW,+BAAA/8C,EAAA,MACQ,WAAOxQ,EAAMyE,GAAb,eAAA+L,EAAA,6DACjB6rD,EAAY,QACqDptD,IAAjE4qD,EAAWvgD,OAAOvsB,IAAOmK,oCACzB8I,EAAK9I,mCAAqC2iE,EAAWvgD,OAAOvsB,IAAOmK,oCAEnEmlE,EAAYtvE,IAAOmK,mCALF,SAOfyT,IAAQ8wB,WAAWz7B,EAAM,GAAI,CAAC,YAAaq8D,GAAY1qB,GAPxC,uBAQflhC,IAAU+8C,kBAAkBzE,GAAcpX,GAR3B,OAUrB0b,GAAoB,GAVC,2CADR,iEAeb4E,IAAiB,GACXvE,EAAiBt9C,EAAam9C,EAAkB7xB,GAhBzC,SAiBPgyB,IAjBO,OAkBb19C,EACI3N,aAAK,CACD0K,QAAS,yBACTiE,SAAU,aArBL,gDAyBbhF,QAAQuC,MAAR,MACAyB,EACI3N,aAAK,CACD0K,QAAS,KAAEA,QACXiE,SAAU,aA7BL,yBAiCbihD,IAAiB,GAjCJ,4EAAH,qDA+ClB,OAFuBviB,EAAa98B,YAAcwH,EAAIlF,aAAoB1K,KAAKkrC,MAAM,GAAK,GAAKhG,EAAauc,gBAAkB,KAAO7xC,EAAIlF,YAAc,EAAI,IAIvJ,cAAC,EAAD,UACI,sBAAKvc,KAAK,mBAAV,UACI,qBAAKqM,UAAU,aAAf,SACI,qBAAKA,UAAU,UAAf,SACI,sBAAKA,UAAU,qBAAf,UACI,qBAAKA,UAAU,mBAAf,SACI,qBAAKG,IAAI,yBAAyBO,IAAI,oBAAoB6C,MAAO,CAAEO,UAAW,aAElF,sBAAK9D,UAAU,6BAAf,UACI,qBAAIA,UAAU,sBAAd,qCAEI,cAACosC,GAAD,OAEJ,oBAAIpsC,UAAU,sBAAd,SAAqCwvC,IACrC,mBAAGvvC,KAAK,aAAR,2CAMfmoD,EACG,cAAC/Y,GAAD,CAAoBvH,OAjCrB,WACXugB,GAAoB,GACpBlnD,OAAOC,SAAS6e,QAAO,IA+ByBqvB,kBAAmB5E,IAGvD,sBAAK1qC,UAAU,UAAf,UAEI,cAAC,GAAD,CAAgB0qC,aAAcA,EAAct1B,IAAKA,IAEjD,qBAAKpV,UAAU,YAIf,qBAAKA,UAAU,cAAf,SACI,qBAAKA,UAAU,sBAAf,SACK42D,GACG,cAAC,GAAD,CAAuBvrC,QAASu0B,EAAap3C,SAAU,kBAAMo3C,EAAYzY,0BAKrF,qBAAKnnC,UAAU,kBAAkB0I,IAAKouD,EAAepuD,IAArD,SACI,qBAAK1I,UAAU,sBAAf,SACI,cAAC,GAAD,CAAuBkM,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAASyrC,IAAoBzrC,QAASyrC,EACnFtuD,SAAU,kBAAM4uD,WAI5B,qBAAKp3D,UAAU,iBAAiB0I,IAAKquD,EAAcruD,IAAnD,SACI,qBAAK1I,UAAU,sBAAf,SACI,cAAC,GAAD,CAAqBqrB,QAAS0rC,EAAe7nD,KAAMy9B,EAAYzgC,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAAS0rC,IAAmBvuD,SAAU,kBAAMuuD,EAAc5vB,0BAI3J,qBAAKnnC,UAAU,cAAc0I,IAAKsuD,EAAatuD,IAA/C,SACI,qBAAK1I,UAAU,sBAAf,SACI,cAAC,GAAD,CAAiBqrB,QAAS2rC,EAAc9nD,KAAMy9B,EAAYzgC,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAAS2rC,IAAkBxuD,SAAU,kBAAMwuD,EAAa7vB,0BAIpJ,qBAAKnnC,UAAU,WAAW0I,IAAK1G,EAAS0G,IAAxC,SACI,qBAAK1I,UAAU,sBAAf,SACI,cAAC,GAAD,CAAiBqrB,QAASrpB,EAAUkN,KAAMy9B,EAAYzgC,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAASrpB,IAAcwG,SAAU,kBAAMxG,EAASmlC,0BAIxI,qBAAKnnC,UAAU,aAAa0I,IAAKuuD,EAAUvuD,IAA3C,SACI,qBAAK1I,UAAU,sBAAf,SACI,cAAC,GAAD,CAA0BkM,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAAS4rC,IAAe5rC,QAAS4rC,EAAWzuD,SAAU,kBAAMyuD,EAAU9vB,0BAGlI,qBAAKz+B,IAAK6kD,EAAV,SACI,qBAAKvtD,UAAU,sBAAf,SACI,qBAAKA,UAAU,uBAAf,SACI,cAAC,GAAD,CAAyBZ,QAASkpD,GAAclzC,IAAKA,EAAKq2B,SAAUf,EAAcr/B,QAAS+jD,mBCjRzHrL,GAAe,SAEfuT,GAAW,CACbvvE,IAAO2F,kCACP3F,IAAO4F,6BACP5F,IAAO6F,+BACP7F,IAAO8F,+BACP9F,IAAO+F,oCAubIypE,OA/af,WAA0B,IACdroD,EAAS+0C,sBAAT/0C,KACFy9B,EAAa1wB,SAAS/M,GAEtBhE,EAAUC,YAAQ,CAAElF,KAAM,WAChBE,GAA6C+E,EAArD7B,OAAqD6B,EAA7C/E,WAAWD,EAAkCgF,EAAlChF,SAAUkF,EAAwBF,EAAxBE,aAAckrB,EAAUprB,EAAVorB,MAE7CppB,EAAUjL,uBACVolD,EAAe,WACjBsG,YAAO,CACHzgD,UACA0gD,aAAc,gBAXD,EAeuB/wD,mBAAS,MAfhC,mBAedo0C,EAfc,KAeEC,EAfF,KAiBfyD,EADoB,IAAI9O,GAAeoL,GACD51C,SAAStT,IAAOwD,gBAEtDm/C,EAAe,IAAIpE,GAAkBzpC,mBAAS,OAC9CyzD,EAAgB5lB,EAAaG,OAAOhuC,mBAAS,MAAO,KAAM,CAC5D9U,IAAO0F,qBACP1F,IAAOyI,uBACPzI,IAAO2F,kCACP3F,IAAO4F,6BACP5F,IAAO6F,+BACP7F,IAAO8F,+BACP9F,IAAO+F,mCACP/F,IAAOwD,eACPxD,IAAOuD,mBA7BU,EAgCmBuR,mBAAS,MAhC5B,mBAgCdgvD,EAhCc,KAgCAC,EAhCA,KAiCf72C,EAAU,IAAIzF,KAAYq8C,GAC1B7G,EAAgB/vC,EAAQjF,UAAU28B,GAClC1/B,EAAU,CACZpM,MAAOoU,EAAQthB,KACfub,KAAMy9B,EACN/4C,YAAaqhB,EAAQrhB,YACrB+b,KAAMo0C,IAvCW,EA2CyBlnD,mBAAS,MA3ClC,mBA2CdwS,EA3Cc,KA2CG+8C,EA3CH,KA4Cfh3C,EAAM,IAAI1F,KAAgBL,GAG1BmoD,EA/Ce,WAiDjB,WAAYtoD,EAAMvb,EAAMI,GAAkB,IAAZy9D,EAAW,uDAAF,EAAE,qBACrCv2D,KAAKw2D,MAAQ19D,EACbkH,KAAK2oB,MAAQ1U,EACbjU,KAAKy2D,MAAQ/9D,EACbsH,KAAK02D,QAAUH,EArDF,uCA2DjB,WACI,MAAM,GAAN,OAAUv2D,KAAKw2D,MAAf,YAAwBx2D,KAAK2oB,SA5DhB,gBAkEjB,WACI,OAAO3oB,KAAKy2D,QAnEC,oBAsEjB,WACI,IAAM3tC,EAAK,OAAGihC,QAAH,IAAGA,OAAH,EAAGA,EAAe6M,SAAS,UAAW52D,KAAKw2D,OACtD,OAAK1tC,EAEEha,KAAOga,EAAM7Z,MAAM4nD,SAAS72D,KAAK02D,QAAS,SAASxnD,OAAO,cADtD,OAzEE,uBA6EjB,WACI,OAAOhE,EAAUlL,KAAKtH,OA9ET,IAgFjB,SAAgB2S,GACZJ,EAASjL,KAAKtH,KAAM2S,KAjFP,0BAoFjB,WACI,OAA4B,IAArBrL,KAAK82D,aAA0C,MAArB92D,KAAK82D,aArFzB,IAwFjB,SAAmBzrD,GAEXrL,KAAK82D,YADLzrD,EACmB,EAEA,KA5FV,0BA+FjB,WAEI,OADcgwB,EAAMr7B,KAAKtH,OACP,MAjGL,KAsGfq+D,EAAY,CACd,IAAIwF,EAAW7qB,EAAY5kD,IAAO2F,kCAAmC,SAAU,GAC/E,IAAI8pE,EAAW7qB,EAAY5kD,IAAO4F,6BAA8B,QAChE,IAAI6pE,EAAW7qB,EAAa,EAAG5kD,IAAO6F,+BAAgC,UACtE,IAAI4pE,EAAW7qB,EAAa,EAAG5kD,IAAO8F,+BAAgC,UACtE,IAAI2pE,EAAW7qB,EAAa,EAAG5kD,IAAO+F,mCAAoC,WAQ9EgQ,oBAAS,sBAAC,gDAAA0N,EAAA,sEACsBC,IAAUmI,WAAWmwC,IAD3C,UACA4B,EADA,OAES,IAAIn2C,KAAYm2C,GAAe31C,UAAU28B,GAFlD,uBAIF3hC,GACI3N,aAAK,CACD0K,QAAS,0CACTiE,SAAU,aAGlBq7C,IAVE,iCAaNyE,EAAgBnG,GAbV,UAegD9xC,QAAQC,IAAI,CAC9DrI,IAAUgO,eAAesqC,GAAcpX,GACvCjC,EAAazD,aAAa0F,GAC1BlhC,IAAU0lC,oBAAoB4S,GAAcpX,EAAY,CAAC5kD,IAAOwD,mBAlB9D,oCAeC8gE,EAfD,KAeYx8B,EAfZ,KAeqB8kB,EAfrB,KAqBNyX,EAAmBC,GACnBnb,EAAkByD,GAEZ/kB,EAAY,IAAI5C,GAAU6C,GAxB1B,eAyBWmiC,GAzBX,IAyBN,2BAASj+D,EAAkB,QACnB4wC,EAAW/U,EAAUpmB,IAAInC,IAAeC,eAAevT,EAAKJ,OAAOy6B,SACvEr6B,EAAKg+D,YAAcptB,EA3BjB,0EA8BP,IAGH,IAAM8yB,EAAqBnhC,EAAMvuC,IAAOwD,gBAClCmsE,EAAuBphC,EAAMvuC,IAAOuD,kBACpCqsE,EAAcrhC,EAAMvuC,IAAOyI,wBAC3BswD,EAAW,CACb+N,QAAS,WACT+I,eAAgBD,GAAerhC,EAAMvuC,IAAO0F,sBAAwB,WAAa,aACjFoqE,WAAY7F,EAAUhsB,OAAM,SAAAryB,GAAC,OAAIA,EAAEmkD,kBAAkB,WAAa,aAClEd,aAAcS,GAAsBC,EAAuB,WAAa,aACxEK,OAAQ3iD,EAAIlF,YAAc,WAAa,cAG3C,IAAK,IAAI1F,KAAOs2C,EACZ,GAAsB,eAAlBA,EAASt2C,GAAuB,CAChCs2C,EAASt2C,GAAO,aAChB,MAIR,IAAIsmD,EAAuB,EAC3B,IAAK,IAAM/rD,KAAK+7C,EACQ,aAAhBA,EAAS/7C,IACT+rD,IAER,IAAM7B,GAAkBzpD,KAAKkrC,MAAM,IAAMogB,EAAuB,GAC1DpO,KAA8C,aAA5B5B,EAAS8W,gBAAyD,aAAxB9W,EAAS+W,YAAsD,YAAzB/W,EAASkW,cA5K5F,GA8KKn6D,oBAAS,GA9Kd,qBA8Kdm7D,GA9Kc,MA8KPC,GA9KO,MA+KrBn6D,oBAAS,sBAAC,8BAAA0N,EAAA,sEAEeC,IAAUjC,IAAI,0CAA4CmuD,EAAa,IAFtF,OAEAhsD,EAFA,OAGFusD,EAAcvsD,EAAO9G,KAAI,SAAA81B,GAAC,MAAK,CAC/BlzB,MAAOkzB,EAAE5rB,QACTzI,MAAOq0B,EAAE7sB,SAEbmqD,GAASC,GAPH,2CAQP,CAACP,IAGJ,IAAM3sD,GAAWC,cA1LI,GA2LiBpO,oBAAS,GA3L1B,qBA2LdqyD,GA3Lc,MA2LDC,GA3LC,MA6LftnB,GAAM,uCAAG,WAAO7sC,EAAMyE,GAAb,mBAAA+L,EAAA,sEAEP2jD,IAAe,GAFR,SAIDxpD,IAAQ8wB,WAAWz7B,EAAM,GAAI,CAAC,aAAc2xC,GAJ3C,uBAKsBlhC,IAAU0lC,oBAAoB4S,GAAcpX,EAAY,CAAC5kD,IAAOwD,iBALtF,OAQP,IAAW4sE,KAHPzvB,EALG,OAMPwI,EAAkBxI,GANX,WAQIyvB,GACHb,GAAS37D,MAAK,SAAAoJ,GAAC,OAAIA,IAAMozD,OACzBn9D,EAAKm9D,GAAQl8C,SAASjhB,EAAKm9D,MAFhBn9D,EAAO,EAAfm9D,GAKXntD,GACI3N,aAAK,CACD0K,QAAS,qBACTiE,SAAU,aAhBX,kDAoBPhF,QAAQuC,MAAR,MACAyB,GACI3N,aAAK,CACD0K,QAAS,KAAEA,QACXiE,SAAU,aAxBX,yBA4BPmjD,IAAe,GA5BR,6EAAH,wDAgCNz4B,GAAU,SAACrtB,EAAQ5J,KA7NJ,GAmOqB5C,oBAAS,GAnO9B,qBAmOduyD,GAnOc,MAmOCnC,GAnOD,SAoO2BpwD,oBAAS,GApOpC,qBAoOdurD,GApOc,MAoOIC,GApOJ,MAqOfC,GAAY,uCAAG,8BAAA98C,EAAA,6DAEX+8C,EAFW,+BAAA/8C,EAAA,MAEQ,WAAOxQ,EAAMyE,GAAb,iBAAA+L,EAAA,sEACf7F,IAAQ8wB,WAAWz7B,EAAM,GAAI,GAAI2xC,GADlB,uBAEflhC,IAAU+8C,kBAAkBzE,GAAcpX,GAF3B,OAGrB,IAAWwrB,KAHU,WAGVA,GACHb,GAAS37D,MAAK,SAAAoJ,GAAC,OAAIA,IAAMozD,OACzBn9D,EAAKm9D,GAAQl8C,SAASjhB,EAAKm9D,MAFhBn9D,EAAO,EAAfm9D,GAMX9P,IAAoB,GATC,2CAFR,iEAcb4E,IAAiB,GACXvE,EAAiBt9C,EAAam9C,EAAkB7xB,IAfzC,SAgBPgyB,IAhBO,OAiBb19C,GACI3N,aAAK,CACD0K,QAAS,yBACTiE,SAAU,aApBL,gDAwBbhF,QAAQuC,MAAR,MACAyB,GACI3N,aAAK,CACD0K,QAAS,KAAEA,QACXiE,SAAU,aA5BL,yBAgCbihD,IAAiB,GAhCJ,4EAAH,qDA2CZmL,GAAattB,mBACbutB,GAAgBvtB,mBAChBkmB,GAAalmB,mBACbyiB,GAAYziB,mBAElB,OACI,cAAC,IAAD,2BAAkB5/B,GAAlB,aACI,cAAC,EAAD,UACI,sBAAKvX,KAAK,mBAAmBqM,UAAU,iBAAvC,UACI,qBAAKA,UAAU,aAAf,SACI,qBAAKA,UAAU,UAAf,SACI,sBAAKA,UAAU,qBAAf,UACI,qBAAKA,UAAU,mBAAf,SACI,qBAAKG,IAAI,yBAAyBO,IAAI,oBAAoB6C,MAAO,CAAEO,UAAW,aAElF,sBAAK9D,UAAU,6BAAf,UACI,qBAAIA,UAAU,sBAAd,UACKiN,EAAQpM,MACT,cAACurC,GAAD,OAEJ,mBAAGpsC,UAAU,UAAb,SAAwBiN,EAAQrZ,cAChC,qBAAIoM,UAAU,sBAAd,UAAqC2sC,EAArC,WAAoDA,EAAW,KAC/D,mBAAG1sC,KAAK,aAAR,kDAKfmoD,GACG,cAAC/Y,GAAD,CAAoBvH,OAnCzB,WACXugB,IAAoB,GACpBlnD,OAAOC,SAAS6e,QAAO,IAiC6BhT,QAASA,IAE7C,sBAAKjN,UAAU,UAAf,UACI,sBAAKA,UAAU,sBAAf,UACI,oBAAIA,UAAU,sBAAd,kCAEA,cAAC,GAAD,CAAa8gD,SAAUmO,KACvB,sBAAKjvD,UAAU,uBAAf,UACI,cAAC,GAAD,CAAkBa,MAAM,UAAUlD,MAAM,aACxC,cAAC,GAAD,CAAkBkD,MAAM,kBAAkBlD,MAAOmjD,EAAS8W,eAAgBhO,WAAYwO,KACtF,cAAC,GAAD,CAAkBv3D,MAAM,qBAAqBlD,MAAOmjD,EAAS+W,WAAYjO,WAAYyO,KACrF,cAAC,GAAD,CAAkBx3D,MAAM,UAAUlD,MAAOmjD,EAASkW,aAAcpN,WAAYoH,KAC5E,cAAC,GAAD,CAAkBnwD,MAAM,SAASlD,MAAOmjD,EAASiX,OAAQnO,WAAY2D,WAK7E,qBAAKvtD,UAAU,YAGf,sBAAKA,UAAU,sBAAf,UAEI,sBAAKA,UAAU,SAAS0I,IAAK0vD,GACzB70D,MAAO,CAAE+0D,cAA2C,eAA5BxX,EAASgW,gBAAmC,OAAQ1rC,QAAqC,eAA5B01B,EAASgW,gBAAmC,OADrI,UAEI,oBAAI92D,UAAU,sBAAd,6BAEA,sBAAKikC,WAAS,EAACjkC,UAAU,cAAzB,UACI,oBAAIA,UAAU,sBAAd,oBACA,cAAC,GAAD,CAAYrM,KAAM5L,IAAOyI,uBACrB6S,YAAY,EACZqkB,UAAW,CAAC,CAAEphB,MAAO,SAAUmB,MAAO,uBAAyB,CAAEnB,MAAO,QAASmB,MAAO,uBACxFi3B,KAAG,OAEVpI,EAAMvuC,IAAOyI,yBACV,sBAAKyzC,WAAS,EAACjkC,UAAU,cAAzB,UACI,oBAAIA,UAAU,sBAAd,2BACA,cAAC,EAAD,UACI,cAACsM,EAAD,UACI,cAAC,GAAD,CAAgB3Y,KAAM5L,IAAO0F,qBAAsBia,WAAW,OAAOiD,YAAY,OAAO+c,UAAWswC,eAQvH,sBAAKh4D,UAAU,mBAAmB0I,IAAK2vD,GACnC90D,MAAO,CAAE+0D,cAAuC,eAAxBxX,EAAS+W,YAA+B,OAAQzsC,QAAiC,eAAxB01B,EAAS+W,YAA+B,OAD7H,UAEI,oBAAI73D,UAAU,sBAAd,gCACA,qBAAKA,UAAU,gBAAf,SACI,wBAAOA,UAAU,QAAjB,UACI,gCACI,+BACI,sCACA,0DACA,2CAGR,gCACKgyD,EAAUntD,KAAI,SAAAsK,GACX,IAAM+iD,EAA0B,iBAAmB/iD,EAAKxb,KAExD,OACI,+BACI,+BAAKwb,EAAKpb,KAAK,uBAAM,2DAA8Bob,EAAKy9C,eACxD,6BACI,cAACxqB,GAAD,CACIzuC,KAAMwb,EAAKxb,KACXgX,YAAY,eACZi3B,UAAW,EACXt7B,MAAO6I,EAAK4iD,YACZvpD,SAAU,SAACub,GAAD,OAAW5U,EAAK4iD,YAAchuC,EAAM7jB,OAAOoG,WAG7D,6BACI,cAAC,GAAD,CACI3S,KAAMu+D,EACNzqD,MAAM,gBACNnB,MAAO6I,EAAKgjD,iBAAkB,EAC9BhpD,SAAUgG,EAAK4iD,YAAc,EAC7BvpD,SAAU,SAAC4pD,GAAD,OAAejjD,EAAKgjD,eAAiBC,uBAWnF,qBAAKpyD,UAAU,gBAAgB0I,IAAKsoD,GAApC,SACI,sBAAKhxD,UAAU,eAAf,UACI,qBAAKA,UAAU,uBAAf,SACI,oBAAIA,UAAU,sBAAd,+BAEoC,KAAtB,OAAjB20C,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBvO,kBAChB,8BACI,cAACpvB,GAAA,EAAD,CAAOhL,SAAS,QAAQhM,UAAU,qBAAlC,SACI,4BACI,6CAEI,mBAAGC,KAAK,6FAAR,kCAFJ,uFAShB,sBAAKD,UAAU,iBAAf,UACI,cAAC,GAAD,CAAqBitB,OAAQqjC,EAAcn5B,iBAAiBpvC,IAAOwD,kBAEnE,cAAC,GAAD,CAAe0hC,OAAQqjC,EAAcn5B,iBAAiBpvC,IAAOuD,4BAKzE,sBAAK0U,UAAU,uBAAuB0I,IAAK6kD,GAA3C,UACI,cAAC,KAAD,CAAQ55D,KAAK,SAAS8T,MAAM,SAASiD,QAAQ,OAAOtL,QAASioD,IAC7D,cAAC,KAAD,CAAQh8C,QAAS6jD,GAAav7D,KAAK,OAAO8T,MAAM,OAAO8E,KAAK,SAASnN,QAASgM,EAAay8B,GAAQnR,MACnG,cAAC,GAAD,CAAyBrrB,QAAS+jD,GAAe3jB,SAAU,CAAE79B,YAAa80C,IAAiBtjD,QAASkpD,GAAclzC,IAAKA,sB,qBChT5ImjD,GAzJa,SAAC,GAMtB,IAAD,IALJ5kE,YAKI,MALG,cAKH,MAJJ6kE,uBAII,MAJc,GAId,MAHJhe,6BAGI,MAHoB,CAAC,OAGrB,MAFJn3C,kBAEI,2FACsB2C,YAAe,CAAEC,KAAM,YAAzCqwB,EADJ,EACIA,MAAOjtB,EADX,EACWA,OAET2xC,EAAkBlQ,mBAHpB,EAKkCjuC,mBAAS,CAC7CkL,QAAS,KANP,mBAKG+yC,EALH,KAKgBC,EALhB,OAQoBl+C,mBAAS,MAR7B,mBAQGigD,EARH,KAQS2b,EART,KAcEhe,EAAeD,EAAsB31C,KAAI,SAAC61C,GAAD,OAC7CC,cAAkBC,QAAQF,MAsCtBge,EAASpiC,EAAMgD,YAAmB3lC,EAAMiF,IAAwBjE,KACtEmJ,qBAAU,WACR,IAAMvC,EAAc5H,EAAKg1B,QAAL,WAAiBtvB,IAAsBP,QAAU,IACrE,sBAAC,8BAAA0S,EAAA,yDACMktD,EADN,iEAEoBjtD,IAAUoxC,uBAAuB,CAClD99C,GAAI25D,EACJn9D,gBAJH,QAEOyzC,EAFP,QAMU9E,OACD4S,EAAO,IAAIC,KAAK,CAAC/N,GAAV,UAAoBzzC,EAApB,SACbk9D,EAAQ3b,IARX,0CAAD,KAWC,CAAC4b,IAGJ,IAiBMnvD,EAAQjE,KACZ+D,EACAiwB,YAAmB3lC,EAAMiF,IAAwBR,QAGnD,OACE,eAAC,EAAD,WACE,eAACkU,EAAD,WACG/C,GACC,mBAAGhG,MAAO,CAAElE,MAAO,MAAO0X,aAAc,QAAxC,gCAIF,cAAC,GAAD,CACEnP,MAAO,CAAEwvB,SAAU,SAAC9wB,GAAD,OArBR,SAACw2C,GAClB,QAAIz5C,IAAey5C,GAoBiB6b,CAAWryD,KACzC3S,KAAM2lC,YAAmB3lC,EAAMiF,IAAwBR,OACvDkO,MAAOw2C,OAGX,cAACxwC,EAAD,UACE,eAACA,EAAD,WACGwwC,GACC,sBAAKv5C,MAAO,CAAE4J,QAAS,OAAQE,WAAY,UAA3C,UACE,mBAAGpN,KAAK,IAAIb,QAxCD,SAACK,GACtBA,EAAEC,iBA/Ba,SAAUu9C,EAAUjO,GACnC,GAAI7tC,OAAO+7C,UAAUC,iBACnBh8C,OAAO+7C,UAAUE,WAAWpO,EAAMiO,OAC7B,CACL,IAAII,EAAOl8C,OAAOvB,SAAS09C,cAAc,KACzCD,EAAKp9C,KAAOkB,OAAOo8C,IAAIC,gBAAgBxO,GACvCqO,EAAKI,SAAWR,EAChBr9C,SAASE,KAAK49C,YAAYL,GAC1BA,EAAKM,QACL/9C,SAASE,KAAK89C,YAAYP,IAuB5BI,CAASX,EAAKnpD,KAAMmpD,IAsCV,SAAsCA,EAAKnpD,OAC3C,mBAAGsM,KAAK,IAAR,SAAY,cAAC03B,GAAA,EAAD,CAAQ33B,UAAU,UAAUuD,MAAO,CAAElE,MAAO,wBAA0BD,QApCzE,SAACK,GACpBA,EAAEC,iBACF+4D,EAAQ,eAqCA3b,GACA,gCACE,uBACEh1C,SAAUzE,EACVqF,IAAKsyC,EACLzuC,KAAK,OACL/D,SAtGO,SAACub,GACpB,GAAI,YAAIA,EAAM7jB,OAAOg+C,OAAOt7C,OAAQ,CAClC,IAAMu7C,EAAep6B,EAAM7jB,OAAOg+C,MAAM,GAClCE,EAAWD,EAAajU,KAAO,KAAO,KAAO,SAC7CmU,EAAOF,EAAa5xC,KACtB6xC,EAAWoa,EACbzd,EAAe,CACbhzC,QAAQ,gCAAD,OAAkCywD,EAAlC,SAEC/d,EAAa5zC,SAASw3C,IAOhCtD,EAAe,CAAEhzC,QAAS,KAC1B0wD,EAAQta,IAPRpD,EAAe,CACbhzC,QAAQ,oCAAD,OAAsCyyC,EAAsBn2C,KACjE,WA2FId,MAAO,CAAE4J,QAAS,UAEpB,cAAC,KAAD,CACEzC,QAAQ,OACRjD,MAAM,cACNlE,MAAO,CAAEud,SAAU,WAAYqzB,OAAQ,SACvC/0C,QArHQ,WACpB47C,EAAgBrP,QAAQgS,WAsHb7C,EAAY/yC,SACX,sBACExE,MAAO,CACLlE,MAAO,MACPyE,UAAW,UAHf,cAMIg3C,EAAY/yC,uBCvEjB6wD,GAzEU,SAAC,GAAoC,IAAlCh+C,EAAiC,EAAjCA,SAAUzR,EAAuB,EAAvBA,SAE5BxV,GAFmD,EAAbs5B,OAE/BrS,EAASjnB,MAChBklE,EAAuB1vD,EAEvB2vD,EAAqBl+C,EAASm+C,mBAAmB,oBACjDC,EAAap+C,EAASm+C,mBAAmB,YACzCE,EAAcr+C,EAASm+C,mBAAmB,qBAC1CG,EAAat+C,EAASm+C,mBAAmB,oBACzCI,EAAiBv+C,EAASm+C,mBAAmB,gBAEnD,OACI,eAAC,EAAD,CAAc1sD,aAAa,EAA3B,UACKysD,GACG,cAAC,EAAD,UACI,cAACxsD,EAAD,CAAWtI,GAAI,GAAf,SACI,cAACizC,GAAD,CAAc9tC,SAAU0vD,EACpBv1D,gBAAgB,EAChB2X,SAAS,WAAWtnB,KAAM2lC,YAAmB3lC,EAAM8C,IAAsBP,UAAWuR,MAAOqxD,QAI1GE,GACG,cAAC,EAAD,UACI,cAAC1sD,EAAD,CAAWtI,GAAI,GAAf,SAEI,cAAC,GAAD,CAAOrQ,KAAM2lC,YAAmB3lC,EAAM8C,IAAsBC,WAAYgR,WAAYsxD,EAAYruD,YAAaquD,EACzG11D,gBAAgB,EAChB6F,SAAU0vD,EAAsBnuD,QAAQ,iBAIvDyuD,GACG,cAAC,EAAD,UACI,cAAC7sD,EAAD,CAAWtI,GAAI,GAAf,SACI,cAAC,GAAD,CAAOrQ,KAAM2lC,YAAmB3lC,EAAM8C,IAAsBD,eAAgBkR,WAAYyxD,EACpF71D,gBAAgB,EAChBqH,YAAawuD,EAAgBhwD,SAAU0vD,EAAsBnuD,QAAQ,iBAIpFuuD,GACG,cAAC,EAAD,UACI,cAAC3sD,EAAD,CAAWtI,GAAI,GAAf,SACI,cAACo+C,GAAD,CACIzuD,KAAM2lC,YAAmB3lC,EAAM8C,IAAsBvB,qBACrD0sD,WAAYD,GACZl6C,MAAM,QACNnE,gBAAgB,EAChBoH,QAAQ,iBAKvBwuD,GACG,cAAC,EAAD,UACI,cAAC5sD,EAAD,CAAWtI,GAAI,GAAf,SACI,cAAC,GAAD,CACIrQ,KAAM2lC,YAAmB3lC,EAAM8C,IAAsBtB,oBACrDuS,WAAYwxD,EACZ51D,gBAAgB,EAChBqH,YAAauuD,EACb/vD,SAAU0vD,EACVnuD,QAAQ,qBChDrB0uD,OArBf,YAAiF,IAA5CnkD,EAA2C,EAA3CA,QAAS4a,EAAkC,EAAlCA,QAAcwpC,GAAoB,EAAzBjkD,IAAyB,EAApBikD,mBAClDC,EAAkBzpC,EAASA,EAAQjtB,OAAS,EAC5C22D,EAA2BF,EAAmBA,EAAkBz2D,OAAS,EAEzE42D,EAAkB,IAAMF,EACxB1rD,EAAa0rD,IAAoBC,EACjC9L,EAAiB7/C,EAAY,IAAMpI,KAAKkrC,MAAO8oB,EAAkBD,GAEvE,OACI,8BACI,sBAAKv5D,UAAU,sBAAf,8DAEI,cAAC,GAAD,CAAa8gD,SAAU2M,IACvB,qBAAKztD,UAAU,uBAAf,SACI,cAAC,GAAD,CAAkBa,MAAK,0CAAqCoU,EAAQthB,MAAQgK,MAAOiQ,EAAa,WAAa,uBC6alH4hB,OA7Zf,WAAwB,IAAD,MAEIy0B,sBAAft0C,EAFW,EAEXA,KAAMT,EAFK,EAELA,KACRy9B,EAAa1wB,SAAS/M,GAEtBhC,EAAUjL,uBACViJ,EAAUC,YAAQ,CACpBlF,KAAM,WAMNmF,GACAF,EAJA7B,OAIA6B,EAHA9F,UAGA8F,EAFAorB,MAEAprB,EADAE,cAbe,EAgBmBvO,mBAAS,MAhB5B,mBAgBZyS,EAhBY,KAgBCy1C,EAhBD,KAiBb9vC,EAAU,IAAIzF,KAAYF,GAC1BmqD,EAAW,oBAAGxkD,EAAQjF,UAAU28B,UAArB,aAAG,EAA+B+sB,aAAlC,QAA2C,GAC5DD,EAAYzoD,MAAK,SAACxF,EAAGoL,GAAJ,OAAUpL,EAAEqL,MAAQD,EAAEC,SAnBpB,MAqB2Bha,mBAAS,MArBpC,mBAqBZwS,EArBY,KAqBK+8C,EArBL,KAsBbuN,EAAU,IAAIjqD,KAAgBL,GAtBjB,EAwBqBxS,mBAAS,IAxB9B,mBAwBZ4yB,EAxBY,KAwBEC,EAxBF,KAyBbC,EAAYF,EAAa5qB,KAAI,SAAAjJ,GAAC,OAAI,IAAIf,GAASe,MAzBlC,EA2BiBiB,mBAAS,MA3B1B,mBA2BZqqC,EA3BY,KA2BA2jB,EA3BA,KA4Bbh7B,EAAU,IAAI7C,GAAUka,GA5BX,EA8B2BrqC,mBAAS,MA9BpC,mBA8BZ+8D,EA9BY,KA8BKC,EA9BL,OA+B+Bh9D,mBAAS,MA/BxC,mBA+BZw8D,EA/BY,KA+BOS,GA/BP,KAiEnBh8D,qBAAU,WACF67D,GAjCR,WACI,IAAII,EAAiB,OAAGpqC,QAAH,IAAGA,OAAH,EAAGA,EAAWjqB,QAAO,SAAA9J,GAAC,aAAGA,EAAEyH,YAA0C,iBAA5B,UAAAzH,EAAE+xB,aAAF,eAASnyB,kBAAkCqJ,KAAI,SAAAjJ,GACzG,GAAGA,EAAEyH,WACD,OAAOzH,EAAEjI,QAGbqmE,EAAmBnqC,EAAQoqC,sBAC3BC,EAAkBrqC,EAAQsqC,WAAWJ,GAAmBr0D,QAAO,SAAA8F,GAAM,IAAD,IAEpE,MAAmC,cAAhC,UAAAA,EAAEjS,kBAAF,eAAciC,gBAAkE,YAAlC,UAAAgQ,EAAE4hB,oBAAF,eAAgB5xB,eAEtD,KAGAgQ,KAIX4uD,EAAwB,OAAGJ,QAAH,IAAGA,OAAH,EAAGA,EAAkBt0D,QAAO,SAAA8F,GAEpD,OAAG,OAAC0uD,QAAD,IAACA,OAAD,EAACA,EAAiBv+D,MAAK,SAAAgY,GAAC,OAAIA,EAAEjZ,cAAgB8Q,EAAE9Q,gBAIxC8Q,EAHA,QAOfquD,EAAmBK,GACnBJ,GAAqBM,GAKjBC,KAEL,CAAC5qC,EAAayX,IArEE,OAuEmCrqC,mBAAS,MAvE5C,qBAuEZy9D,GAvEY,MAuESC,GAvET,MA8GbvvD,GAAWC,cA9GE,GA+GmBpO,oBAAS,GA/G5B,qBA+GZqyD,GA/GY,MA+GCC,GA/GD,MAgHb5jD,GAAQ,uCAAG,WAAOvQ,GAAP,eAAAwQ,EAAA,kEAET2jD,IAAe,IACW,IAAtBwK,EAAQ1pD,UAHH,gCAICxE,IAAUs6C,iBAAiBp2C,EAAMg9B,GAJlC,OAOLyf,EAAmB,2BACZ/8C,GADW,IAEdqR,WAAW,KATV,cAYH85C,EAAiBC,QAEnBz/D,EAAKw/D,EAAe7mE,MAAM+mE,wBAA0BJ,IAd/C,UAiBa30D,IAAQ8wB,WAAWz7B,EAAM,GAAI,CAAC,aAAc2xC,GAjBzD,eAkBT3hC,GACI3N,aAAK,CACD0K,QAAS,qBACTiE,SAAU,aArBT,kDA0BThF,QAAQuC,MAAR,MACAyB,GACI3N,aAAK,CACD0K,QAAS,KAAEA,QACXiE,SAAU,aA9BT,yBAkCTmjD,IAAe,GAlCN,6EAAH,sDA6Cd,SAASsL,KACL,OAAO9qC,EAAUh0B,MAAK,SAAAC,GAAC,MAAc,cAAVA,EAAE2Q,QA9Jd,OAiKW1P,oBAAS,GAjKpB,qBAiKZwO,GAjKY,MAiKHC,GAjKG,MAqKnBxN,qBAAU,WACN,sBAAC,4CAAA0N,EAAA,0DACkB,IAAZH,KAAoC,IAAhB6jD,GAD1B,iCAEmEr7C,QAAQC,IAAI,CACpErI,IAAUmI,WAAWjE,GACrBlE,IAAUgO,eAAe9J,EAAMg9B,GAC/BlhC,IAAUjC,IAAV,6BAAoCmG,EAApC,YAA4Cg9B,MALvD,sCAEcguB,EAFd,KAE+BtrD,EAF/B,KAEgDsgB,EAFhD,KAOOo1B,EAAe4V,GACfvO,EAAmB/8C,GACnBqgB,EAAgBC,GAEQ,GAApBA,EAAU/sB,OAXrB,0DAca0qB,EAAeqC,EAAU9qB,KAAI,SAAAjJ,GAAC,OAAIA,EAAER,QAdjD,UAe6BuK,IAAQ8L,iBAAiB6b,GAftD,QAeauC,EAfb,OAgBOg7B,EAAch7B,IAER+qC,EAAqBjrC,EAAU9qB,KAAI,SAAAjJ,GAAC,OAAI,IAAIf,GAASe,MAAID,MAAK,SAAAC,GAAC,MAAc,cAAVA,EAAE2Q,WAEnEquD,EAAmBv3D,WACnBk3D,IAAuB,IAEnBM,EAA0B,IAAI7tC,GAAU6C,GAASrmB,IAAvB,OAA2BoxD,QAA3B,IAA2BA,OAA3B,EAA2BA,EAAoBjnE,MAAM+mE,wBACnFH,GAAuBM,MAGf,IAAZxvD,IAEAC,IAAW,GA7BtB,2CAAD,KAiCD,CAACD,GAAQ6jD,KAEZ,IAAM0L,GAAqBH,KACrBK,GAAuBF,GAAqBthC,YAAmBshC,GAAmBjnE,KAAM8C,IAAsBE,qBAAuB,KAM3I,OACI,cAAC,IAAD,2BAAkBuU,GAAlB,aACI,cAAC,EAAD,UACI,qBAAKvX,KAAK,mBAAmBqM,UAAU,eAAvC,SACI,sBAAKA,UAAU,SAAf,UACI,qBAAKA,UAAU,aAAf,SACI,qBAAKA,UAAU,UAAf,SACI,sBAAKA,UAAU,qBAAf,UACI,qBAAKA,UAAU,mBAAf,SACI,qBAAKG,IAAI,yBAAyBO,IAAI,iBAAiB6C,MAAO,CAAEO,UAAW,cAE/E,sBAAK9D,UAAU,6BAAf,UACI,oBAAIA,UAAU,sBAAd,SAAqCiV,EAAQthB,OAC7C,mBAAGsM,KAAK,WAAR,yCAMfgV,EAAQ9D,WAAa,cAAC4e,GAAA,EAAD,KACpB9a,EAAQ9D,WACN,qBAAKnR,UAAU,iBAAf,SACI,sBAAKA,UAAU,eAAf,UACI,oBAAIA,UAAU,sBAAd,0BACgB,OAAf45D,QAAe,IAAfA,OAAA,EAAAA,EAAiBh3D,QAAS,EACvB,cAAC,GAAD,CAA2BqS,QAASA,EAAS4a,QAAS+pC,EAAiBxkD,IAAKukD,EAASN,kBAAmBA,IAC3G,KACD,qBAAKr5D,UAAU,YAAf,SACI,mCACKy5D,EAAY50D,KAAI,SAACmlD,GAAD,OACb,eAAC,EAAD,WACI,cAAC19C,EAAD,UACI,iCAAS09C,EAAK/yC,aAElB,cAAC3K,EAAD,UACI,sBACI9I,wBAAyB,CACrBC,OAAQumD,EAAKn8C,2BAQzC,sBAAK7N,UAAU,YAAf,WACwC,KAAjB,OAAlB46D,SAAkB,IAAlBA,QAAA,EAAAA,GAAoBtb,aACjB,cAAC,EAAD,CAAcjzC,aAAa,EACvBxL,MAAM,gCADV,SAEI,cAAC,EAAD,UACI,cAACyL,EAAD,CAAWtI,GAAI,GAAf,SACI,cAAC,GAAD,CACIwE,SAxD5B,SAAC/I,GACzB86D,GAA0C,SAAnB96D,EAAES,OAAOoG,QAwDoB3S,KAAMmnE,GACNx0D,OAA+B,IAAxBg0D,GAA+B,QAAiC,IAAxBA,GAAgC,QAAU,GACzF5yC,UAAW,CACP,CAAEphB,MAAO,OAAQmB,MAAO,kFACxB,CAAEnB,MAAO,QAASmB,MAAO,uEAQhDkoB,EAAU9qB,KAAI,SAAC+V,EAAUzW,GAGtB,IAA4B,IAAxBm2D,IAAkD,cAAjB1/C,EAASrO,MAAoD,YAA5BqO,EAAS8S,gBAC3E,OAAO,KAEX,IAAIqtC,EAAiB,KACrB,GAAKngD,EAASogD,gBAAkBrB,EAAQ1jD,WAAe2E,EAASqgD,qBAAuBtB,EAAQ1jD,UAAY,CACvG,IAAMilD,EAAavrC,EAAU/sB,SAAWuB,EAAQ,EAEhD,OAAQyW,EAASrO,MACb,IAAK,OACDwuD,EACI,cAAC,EAAD,CACIl6D,MAAO+Z,EAAS/Z,MAChBuC,SAAUwX,EAAShnB,YACnByY,aAAc6uD,EACd53D,eAAgBsX,EAASvX,WAJ7B,SAMI,cAAC,EAAD,UACI,cAACiJ,EAAD,CAAWtI,GAAI,GAAf,SACI,cAAC,GAAD,CACIrQ,KAAMinB,EAASjnB,KACf+T,WAAYkT,EAAS/Z,MACrB8J,YAAa,wBACbyd,eAAgBxN,EAASugD,sBAM7C,MACJ,IAAK,UACDJ,EACI,eAAC,EAAD,CACIl6D,MAAO+Z,EAAS/Z,MAChBwL,aAAc6uD,EACd53D,eAAgBsX,EAASvX,WAH7B,UAKI,cAAC,GAAD,CAAU1P,KAAMinB,EAASjnB,KAAM8T,MAAO2zD,KAAUxgD,EAAShnB,eAAiB,OAGlF,MACJ,IAAK,aAEGmnE,EADAT,GAEI,cAAC,EAAD,CACIz5D,MAAO+Z,EAAS/Z,MAChBwL,aAAc6uD,EACd53D,eAAgBsX,EAASvX,WAH7B,SAII,cAAC,EAAD,UACI,cAACiJ,EAAD,UACI,cAAC,GAAD,CAAkBsO,SAAUA,EAAUqS,OAAQ4C,EAAQrmB,IAAIoR,EAASjnB,cAMlE,6BACrB,MACJ,IAAK,WACD,IAAMs5B,EAAS4C,EAAQwrC,YAAYzgD,EAASjnB,KAAM0F,IAAsBP,QACxEiiE,EACI,cAAC,EAAD,CAAcl6D,MAAO+Z,EAAS/Z,MAAOwL,aAAc6uD,EAAY93D,SAAUwX,EAAShnB,YAAa0P,eAAgBsX,EAASvX,WAAxH,SACI,cAAC,EAAD,UACI,eAACiJ,EAAD,WACI,cAAC,GAAD,CACI3Y,KAAM2lC,YAAmB,GAAD,OAAI1e,EAASjnB,KAAb,YAAqB0F,IAAsBP,QAAUF,IAAwBjE,IACrG2R,MAAK,OAAE2mB,QAAF,IAAEA,OAAF,EAAEA,EAAQ/Q,KACnB,cAAC,GAAD,CACIvoB,KAAM2lC,YAAmB,GAAD,OAAI1e,EAASjnB,KAAb,YAAqB0F,IAAsBP,QAAU,cAC7EwN,MAAOsU,EAASrO,OACpB,cAAC,GAAD,CACI5Y,KAAM2lC,YAAmB,GAAD,OAAI1e,EAASjnB,KAAb,YAAqB0F,IAAsBP,QAAU,yBAC7EwN,OAAO,IACX,cAAC,GAAD,CACI3S,KAAM2lC,YAAmB,GAAD,OAAI1e,EAASjnB,KAAb,YAAqB0F,IAAsBP,QAAUF,IAAwBJ,eACrG8N,MAAOjN,IAAsBP,SACjC,cAAC,GAAD,CACInF,KAAM2lC,YAAmB,GAAD,OAAI1e,EAASjnB,KAAb,YAAqB0F,IAAsBP,QAAUF,IAAwBN,aACrGgO,OAAO,IACX,cAAC,GAAD,CAAqB3S,KAAI,UAAKinB,EAASjnB,KAAd,YAAsB0F,IAAsBP,iBAQ7F,OACI,qBAAKyK,MAAO,CAAEO,UAAW,QAAzB,SACKi3D,WAQrB,qBACI92B,WAAS,EACTjkC,UAAU,uBACV8D,UAAU,OAHd,SAMI,gCACI,mBAAG7D,KAAI,uCAAkC0sC,EAAlC,aAAyD3sC,UAAU,SAA1E,4BACA,cAAC,KAAD,CACIqL,QAAS6jD,GACTv7D,KAAK,OACL8T,MAAM,OACN8E,KAAK,SACLnN,QAASgM,EAAaG,IA3OlD,SAAClC,EAAQ5J,GACrBuH,QAAQwiB,IAAI,CACRngB,SACA5J,WA0OiCk6D,EAAQ1pD,WAAa0pD,EAAQ2B,aAC1B,cAAC,KAAD,CACIjwD,QAAS6jD,GACTv7D,KAAK,SACL8T,MAAM,SACNrI,QAlT3B,WACZu6D,EAAQ2B,aAEb,sBAAC,sBAAA9vD,EAAA,sEAESC,IAAU8vD,kBAAkB5rD,EAAMg9B,GAF3C,OAKGyf,EAAmB,2BACZ/8C,GADW,IAEdqR,WAAW,KAEf1V,GACI3N,aAAK,CACD0K,QAAS,uBACTiE,SAAU,aAZrB,0CAAD,MAkToC,cAAC,KAAD,CACIrY,KAAK,SACL8T,MAAM,SACNiD,QAAQ,OACRtL,QAnUvB,WACjBuuD,YAAO,CACHzgD,UACA0gD,aAAc,uCCrFpB7J,GAAe,MAwMNyX,OAnMf,WACoBv5D,uBAAhB,IAGMiJ,EAAUC,YAAQ,CACpBlF,KAAM,WAONmF,GAEAF,EANA7B,OAMA6B,EALA9F,UAKA8F,EAJA/E,UAIA+E,EAHAhF,SAGAgF,EAFAE,cAZiB,GAcjBF,EADAorB,MAEc54B,aAAY,SAACC,GAAD,OAAWA,EAAMC,QAC5BF,aAAY,SAACC,GAAD,OAAWA,EAAMwE,QAEAtF,oBAAS,IAlBpC,mBAkBdurD,EAlBc,KAkBIC,EAlBJ,OAoBiBxrD,mBAAS,MApB1B,mBAoBdyS,EApBc,KAoBDy1C,EApBC,KAqBf9vC,EAAU,IAAIzF,KAAYF,GAC1Bq9B,EAAa13B,EAAQ8f,YAtBN,EAwBal4B,mBAAS,MAxBtB,mBAwBd65D,EAxBc,KAwBHC,EAxBG,QAyBP,IAAIlD,GAAMiD,GAEsB75D,mBAAS,OA3BlC,mBA2BdwS,EA3Bc,KA2BG+8C,EA3BH,KA4Bfh3C,EAAM,IAAI1F,KAAgBL,GAC1Bk+C,EAAYziB,iBAAO,MAGnBJ,EAAe,IAAIpE,GAAkBzpC,mBAAS,MAAOknD,IAE3DrZ,EAAa7pC,MAAQoU,EAAQpU,MAE7B,IAAMk2D,EAAgBrsB,EAAaG,OAAOhuC,mBAAS,MAAOiuC,mBAAU,CAChE/iD,IAAOwD,eACPxD,IAAOuD,kBACR,kBAEG0rE,EAAetsB,EAAaG,OAAOhuC,mBAAS,MAAOiuC,mBAAU,CAC/D/iD,IAAOmH,QACPnH,IAAO4G,aACR,iBAGHmP,qBAAU,WACN,sBAAC,sCAAA0N,EAAA,sEACyBC,IAAUmI,WAAWmwC,IAD9C,cACS9uC,EADT,OAEG8vC,EAAe9vC,GACT03B,EAAa,IAAIn9B,KAAYyF,GAAS8f,YAH/C,SAKgDlhB,QAAQC,IAAI,CACrDrI,IAAU0rD,0BAA0BpT,GAAcpX,GAClDlhC,IAAUgO,eAAesqC,GAAcpX,GACvCjC,EAAakB,WAAWe,KAR/B,mCAKUz3B,EALV,KAKkBE,EALlB,eAUGg3C,EAAmBh3C,GACnBuhD,EAAazhD,GAXhB,2CAAD,KAaD,IAGH,IAAMs6B,EAAe,UAAM7C,EAAN,YAAoBA,EAAa,GAEhD3hC,EAAWC,cAEXyrB,EAAU,SAACrtB,EAAQ5J,KApEJ,EAwEqB5C,oBAAS,GAxE9B,mBAwEduyD,EAxEc,KAwECnC,EAxED,KA2Ef3E,EAAY,uCAAG,8BAAA98C,EAAA,6DACX+8C,EADW,+BAAA/8C,EAAA,MACQ,WAAOxQ,EAAMyE,GAAb,SAAA+L,EAAA,sEAEf7F,IAAQ8wB,WAAWz7B,EAAM,GAAI,GAAI2xC,GAFlB,uBAGflhC,IAAU+8C,kBAAkBzE,GAAcpX,GAH3B,OAKrB0b,GAAoB,GALC,2CADR,iEAUb4E,GAAiB,GACXvE,EAAiBt9C,EAAam9C,EAAkB7xB,GAXzC,SAYPgyB,IAZO,OAab19C,EACI3N,aAAK,CACD0K,QAAS,yBACTiE,SAAU,aAhBL,gDAoBbhF,QAAQuC,MAAR,MACAyB,EACI3N,aAAK,CACD0K,QAAS,KAAEA,QACXiE,SAAU,aAxBL,yBA4BbihD,GAAiB,GA5BJ,4EAAH,qDAwCZQ,EAAiB/iB,EAAa98B,YAAcwH,EAAIlF,YAAc,IAAM1K,KAAKkrC,MAAM,GAAK,GAAKhG,EAAauc,gBAAkB,KAAO7xC,EAAIlF,YAAc,EAAI,IAE3J,OAEI,cAAC,EAAD,UACI,sBAAKvc,KAAK,mBAAV,UACI,qBAAKqM,UAAU,aAAf,SACI,qBAAKA,UAAU,UAAf,SACI,sBAAKA,UAAU,qBAAf,UACI,qBAAKA,UAAU,mBAAf,SACI,qBAAKG,IAAI,yBAAyBO,IAAI,oBAAoB6C,MAAO,CAAEO,UAAW,aAElF,sBAAK9D,UAAU,6BAAf,UACI,qBAAIA,UAAU,sBAAd,UACKiV,EAAQthB,KACT,cAACy4C,GAAD,OAEJ,oBAAIpsC,UAAU,sBAAd,SAAqCwvC,IACrC,mBAAGvvC,KAAK,aAAR,2CAMfmoD,EACG,cAAC/Y,GAAD,CAAoBvH,OAjCrB,WACXugB,GAAoB,GACpBlnD,OAAOC,SAAS6e,QAAO,IA+ByBqvB,kBAAmB5E,IAGvD,sBAAK1qC,UAAU,UAAf,UACI,qBAAKA,UAAU,iCAAf,SACI,sBAAKA,UAAU,sBAAf,UACI,oBAAIA,UAAU,sBAAd,kCAIA,cAAC,GAAD,CAAa8gD,SAAU2M,IAEvB,sBAAKztD,UAAU,uBAAf,UACI,cAAC,GAAD,CAAkBa,MAAM,UAAUlD,MAAM,aACvC+sC,EAAae,SAAS/lC,QAAO,SAAAiO,GAAC,MAAe,eAAXA,EAAE9S,SAAwBgE,KAAI,SAAAwmB,GAAO,OACpE,cAAC,GAAD,CAAkBxqB,MAAOwqB,EAAQxqB,MAAOlD,MAAO0tB,EAAQqiC,gBAAiB9D,WAAYv+B,EAAQ3iB,SAEhG,cAAC,GAAD,CAAkB7H,MAAM,SAASlD,MAAOyX,EAAIlF,YAAc,WAAa,aAAc05C,WAAY2D,YAdjH,IAmBI,qBAAKvtD,UAAU,YAIf,qBAAKA,UAAU,iBAAiB0I,IAAKquD,EAAcruD,IAAnD,SACI,qBAAK1I,UAAU,sBAAf,SACI,cAAC,GAAD,CAAqBqrB,QAAS0rC,EAAe7nD,KAAMy9B,EAAYzgC,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAAS0rC,IAAmBvuD,SAAU,kBAAMuuD,EAAc5vB,0BAI3J,qBAAKnnC,UAAU,cAAc0I,IAAKsuD,EAAatuD,IAA/C,SACI,qBAAK1I,UAAU,sBAAf,SACI,cAAC,GAAD,CAAiBqrB,QAAS2rC,EAAc9nD,KAAMy9B,EAAYzgC,OAAQ,cAACqgC,GAAD,CAAkBlhB,QAAS2rC,IAAkBxuD,SAAU,kBAAMwuD,EAAa7vB,0BAKpJ,qBAAKz+B,IAAK6kD,EAAV,SACI,qBAAKvtD,UAAU,sBAAf,SACI,qBAAKA,UAAU,uBAAf,SACI,cAAC,GAAD,CAAyBZ,QAASkpD,EAAclzC,IAAKA,EAAKq2B,SAAUf,EAAcr/B,QAAS+jD,mBCrJhHqM,OApDf,YAA8D,IAA9BplC,EAA6B,EAA7BA,SAAUhL,EAAmB,EAAnBA,QAASnf,EAAU,EAAVA,OAEzChB,EAAUC,YAAQ,CACpBlF,KAAM,WAGSmF,GAAgBF,EAA3B/E,UAA2B+E,EAAhBE,cANsC,EAQ3BvO,oBAAS,GARkB,mBAQlDwO,EARkD,KASnDL,GATmD,KASxCC,eAEXM,EAAQ,uCAAG,WAAOvQ,GAAP,SAAAwQ,EAAA,sDACf6f,EAAQuX,YAAY5nC,EAAMgQ,GADX,2CAAH,sDAIR0rB,EAAU,SAACrtB,EAAQ5J,KAIzB3B,qBAAU,WAER,OADAqD,OAAOU,iBAAiB,eAAgB80B,GACjC,WACLx1B,OAAOW,oBAAoB,eAAgB60B,MAE5C,IACH,IAAMA,EAAY,SAAAl3B,GAChBA,EAAEC,iBACFD,EAAEu3B,YAAc,IAGlB,OACE,cAAC,IAAD,2BAAkB9rB,GAAlB,aACE,sBAAMK,SAAUH,EAAaG,EAAUmrB,GAAvC,SACE,cAACtD,GAAD,CACEvyB,MAAM,gBACNwyB,YAAY,EACZE,YAAanoB,EAAaG,EAAUmrB,GACpClD,cAAe6C,EACfhrB,QAASA,EACTa,OAAQA,EANV,SASE,cAAC,EAAD,CAAcrL,MAAM,cAAcwC,YAAU,EAA5C,SACI,cAAC,GAAD,CAAiBgoB,QAASA,cCgS3BqwC,OA3Tf,WAAkB,IAAD,EACPxwD,EAAUC,YAAQ,CAAElF,KAAM,WACLqwB,GAAmCprB,EAAtD7B,OAAsD6B,EAA9C9F,UAA8C8F,EAAnCorB,OAAOlrB,EAA4BF,EAA5BE,aAAcjF,EAAc+E,EAAd/E,UAE1C+G,EAAUjL,uBAOR0N,EAASs0C,sBAATt0C,KACF3E,EAAWC,cAZJ,EAcqBpO,oBAAS,GAd9B,mBAcNsU,EAdM,KAcKwqD,EAdL,OAeyB9+D,oBAAS,GAflC,mBAeNqyD,EAfM,KAeOC,EAfP,OAgByBtyD,mBAAS,MAhBlC,mBAgBNyS,EAhBM,KAgBOy1C,EAhBP,OAiB2BloD,mBAAS,IAjBpC,mBAiBN4yB,EAjBM,KAiBQC,EAjBR,OAkB+C7yB,mBAAS,MAlBxD,mBAkBN++D,EAlBM,KAkBkBC,EAlBlB,KAmBPC,EAAyB,IAAI1sD,GAAuBwsD,EAAwBtsD,GAC5E2F,EAAU,IAAIzF,KAAYF,GAC1Bq9B,EAAa13B,EAAQ8f,YACrB7lB,EAAOy9B,EAETlB,EAAW,IAAInF,GAAkBzpC,mBAAS,OAC1C0nD,EAAuB9Y,EAASZ,OAAOhuC,mBAAS,MAAO,KAAM,CAC7D9U,IAAOwD,eACPxD,IAAOuD,iBACPvD,IAAO+C,wBAEPwoE,EAAsB7nB,EAASZ,OAAOhuC,mBAAS,MAAO,KAAM,CAC5D9U,IAAOmH,QACPnH,IAAOoG,cACPpG,IAAOqG,eAEP2tE,EAAuBtwB,EAASZ,OAAOhuC,mBAAS,MAAO,KAAM4yB,EAAa5qB,KAAI,SAAA8O,GAAC,OAAIA,EAAEvY,SAEzF0C,qBAAU,WACN,sBAAC,kCAAA0N,EAAA,+EAEqCC,IAAUmI,WAAWjE,GAF1D,cAEagrD,EAFb,OAGa1lD,EAAU,IAAIzF,KAAYmrD,GAHvC,SAI+BlvD,IAAUjC,IAAV,6BAAoCmG,EAApC,YAA4CsF,EAAQ8f,cAJnF,cAIapF,EAJb,OAKOo1B,EAAe4V,GACfjrC,EAAgBC,GANvB,UAQwClkB,IAAUgO,eAAe9J,EAAMsF,EAAQ8f,aAR/E,QAQainC,EARb,OASOH,EAA0BG,GAE1BD,EAAqBl1B,WAAalX,EAAU9qB,KAAI,SAAA8O,GAAC,OAAIA,EAAEvY,QACvDqwC,EAASxE,aAAahyB,EAAQ8f,aAZrC,kDAeO/tB,QAAQuC,MAAR,MAfP,yBAiBOoyD,GAAa,GAjBpB,4EAAD,KAoBD,IAOH,IAAMpwD,EAAQ,uCAAG,WAAOvQ,GAAP,SAAAwQ,EAAA,sEAGT2jD,GAAe,IACa,IAAxBzsB,KACA1nC,EAAKjT,IAAOoG,eAAiB,QALxB,SAQawX,IAAQ8wB,WAAWz7B,EAAM,GAAI,CAAC,aAAc2xC,GARzD,8BASHlhC,IAAUuU,uBAAuBrQ,EAAMT,GATpC,OAWTm5C,IAAoB,GACpBr9C,EACI3N,aAAK,CACD0K,QAAS,qBACTiE,SAAU,aAfT,kDAoBThF,QAAQuC,MAAR,MACAyB,EACI3N,aAAK,CACD0K,QAAS,KAAEA,QACXiE,SAAU,aAxBT,yBA4BTmjD,GAAe,GA5BN,6EAAH,sDA+CRzsB,GAAsBpM,EAAM,kBAE5B+xB,GAAsB,WACxBn7C,EAAQa,KAAK,eAnHJ,GAwHmBlR,mBAAS,MAxH5B,qBAwHNo/D,GAxHM,MAwHIC,GAxHJ,MAuIb,OACI,cAAC,IAAD,2BAAkBhxD,GAAlB,aACI,cAAC,EAAD,UACI,qBAAKvX,KAAK,mBAAmBqM,UAAU,eAAvC,SACI,sBAAKA,UAAU,SAAf,UACI,qBAAKA,UAAU,aAAf,SACI,qBAAKA,UAAU,UAAf,SACI,sBAAKA,UAAU,qBAAf,UACI,qBAAKA,UAAU,mBAAf,SACI,qBAAKG,IAAI,yBAAyBO,IAAI,iBAAiB6C,MAAO,CAAEO,UAAW,cAE/E,sBAAK9D,UAAU,6BAAf,UACI,oBAAIA,UAAU,sBAAd,SAAqCiV,EAAQthB,OAC7C,mBAAGsM,KAAK,aAAR,2CAMfkR,GAAa,cAAC4e,GAAA,EAAD,KACZ5e,GACE,qBAAKnR,UAAU,iBAAf,SAEI,sBAAKA,UAAU,eAAf,UACI,oBAAIA,UAAU,sBAAd,iCACA,qBAAKA,UAAU,YAAf,SACI,6CACKiV,EAAQ+vC,qBADb,aACK,EAAuB0U,MAAM70D,KAAI,SAACmlD,GAAD,OAC9B,eAAC,EAAD,WACI,cAAC19C,EAAD,UACI,iCAAS09C,EAAK/yC,aAElB,cAAC3K,EAAD,UACI,sBACI9I,wBAAyB,CACrBC,OAAQumD,EAAKn8C,2BASzC,cAAC,GAAD,CAAqBqB,KAAMA,EAAMszC,kBAAkB,EAAOn3B,QAASk5B,IAEnE,cAAC,GAAD,CAAsBl5B,QAASioC,IAE/B,cAAC,GAAD,CAAa3/D,KAAM,cAAeiU,MAAO,CAAEwvB,SAAU,kBA7D7EjxB,EAAUpe,IAAOqG,eAAiB+X,EAAUpe,IAAOoG,gBACnD+tE,GAAY,OACL,IAEPA,GACI,qBAAK34D,MAAO,CAAEO,UAAW,SAAUzE,MAAO,OAA1C,2CAIG,OAqDiB,cAAC,EAAD,CAAciE,gBAAgB,EAC9BzC,MAAM,+BAA+BwL,aAAa,EADlD,SAEI,eAAC,EAAD,WACI,eAACC,EAAD,WACI,cAAC,GAAD,CAAenD,SAAUu5B,GAAqBzV,OAAQqmC,EAAoBn8B,iBAAiBpvC,IAAOoG,eAAgBuZ,WAAW,sBAC5Hu0D,MAEL,cAAC3vD,EAAD,CAAW23B,WAAS,EAAC52B,WAAW,WAAhC,SACI,cAAC,GAAD,CAAU1Z,KAAK,iBAAiB8T,MAAM,6CAIlD,cAAC,EAAD,CAAcnE,gBAAgB,EAC9BzC,MAAM,0BAA0BwL,aAAa,EAD7C,SAEI,cAAC,EAAD,UACI,eAACC,EAAD,WACI,cAAC,GAAD,CAAe2gB,OAAQqmC,EAAoBn8B,iBAAiBpvC,IAAOqG,cAAesZ,WAAW,iBAC5Fu0D,UAKb,qBAAKj8D,UAAU,YAAf,SACKyvB,EAAa5qB,KAAI,SAAC4qB,EAActrB,GAC7B,IAAIyW,EAAW,IAAI/f,GAAS40B,GAC5B,GAA0B,WAAtBA,EAAajC,MAAoB,CAAC,IAC5BpyB,EAAmCq0B,EAAnCr0B,KAAMmyB,EAA6BkC,EAA7BlC,KAAM5yB,EAAuB80B,EAAvB90B,MAAOkT,EAAgB4hB,EAAhB5hB,YACrBktD,EAAiB,KAEfG,EAAazrC,EAAa7sB,SAAWuB,EAAQ,EAEnD,OAAQopB,GACJ,IAAK,OACDwtC,EACI,cAAC,EAAD,CACIl6D,MAAOlG,EACPyI,SAAUyK,EACVxB,aAAc6uD,EAHlB,SAKI,cAAC,EAAD,UACI,cAAC5uD,EAAD,CAAWtI,GAAI,GAAf,SACI,cAAC,GAAD,CACIrQ,KAAMyH,EACNsM,WAAY/M,EACZgQ,YAAa,wBACb4e,UAAU,gBAM9B,MACJ,IAAK,UACDwxC,EACI,eAAC,EAAD,CACIl6D,MAAOlG,EACP0R,aAAc6uD,EAFlB,UAII,cAAC,GAAD,CAAUvnE,KAAMyH,EAAMqM,MAAO2zD,KAAUvtD,KAAiB,OAGhE,MACJ,IAAK,WACDktD,EACI,cAAC,EAAD,CAAcl6D,MAAOlG,EAAO0R,aAAc6uD,EAAY93D,SAAUyK,EAAhE,SACI,cAAC,EAAD,UACI,eAACvB,EAAD,WACI,cAAC,GAAD,CACI3Y,KAAM2lC,YAAmB,GAAD,OAAIl+B,EAAJ,YAAY/B,IAAsBP,QAAUF,IAAwBjE,MAChG,cAAC,GAAD,CACIhB,KAAM2lC,YAAmB,GAAD,OAAIl+B,EAAJ,YAAY/B,IAAsBP,QAAU,gBACxE,cAAC,GAAD,CACInF,KAAM2lC,YAAmB,GAAD,OAAIl+B,EAAJ,YAAY/B,IAAsBP,QAAU,yBACpEwP,cAAc,IAClB,cAAC,GAAD,CACI3U,KAAM2lC,YAAmB,GAAD,OAAIl+B,EAAJ,YAAY/B,IAAsBP,QAAUF,IAAwBJ,eAC5F8P,aAAcjP,IAAsBP,SACxC,cAAC,GAAD,CACInF,KAAM2lC,YAAmB,GAAD,OAAIl+B,EAAJ,YAAY/B,IAAsBP,QAAUF,IAAwBN,aAC5FgQ,cAAc,IAClB,cAAC,GAAD,CAAqB3U,KAAI,UAAKyH,EAAL,YAAa/B,IAAsBP,QACxDuK,WAAYuX,EAASvX,oBAQjD,OACI,qBAAKE,MAAO,CAAEO,UAAW,QAAzB,SACKi3D,UAOrB,qBACI92B,WAAS,EACTjkC,UAAU,uBACV8D,UAAU,OAHd,SAKI,gCACMg4D,EAAuBxrD,kBAAoB,uDAC7C,cAAC,KAAD,CACIjF,QAAS6jD,EACTv7D,KAAK,QACL8T,MAAM,QACN8E,KAAK,SACLnN,QAASgM,EAAaG,GArMlD,SAAClC,EAAQ5J,GACrBuH,QAAQwiB,IAAI,CACRngB,SACA5J,MAED4J,GACC2B,EAAS3N,aAAK,CACZ0K,QAAS,wDACTiE,SAAU,gBA8LwB7C,SAAU2yD,EAAuBxrD,mBAErC,cAAC,KAAD,CACI3c,KAAK,SACL8T,MAAM,SACNiD,QAAQ,OACRtL,QAxSvB,WACjBuuD,YAAO,CACHzgD,UACA0gD,aAAc,uCCmEXuO,OA1Ff,YAAiD,IAAzBxsD,EAAwB,EAAxBA,KAAMT,EAAkB,EAAlBA,KAAMmnB,EAAY,EAAZA,SAE1BnpB,EAAUjL,uBACViJ,EAAUC,YAAQ,CAAElF,KAAM,WACImF,GAAiBF,EAA7C+nB,SAA6C/nB,EAAnCorB,MAAmCprB,EAA5B/E,UAA4B+E,EAAjBE,cAJQ,EAMRvO,oBAAS,GAND,mBAMrCu/D,EANqC,KAMxBC,EANwB,KAiBtC9wD,EAAQ,uCAAG,WAAOvQ,GAAP,eAAAwQ,EAAA,6DACP8wD,EAASthE,EAAI,OADN,SAGPyQ,IAAU8wD,wBAAwB5sD,EAAMT,EAAMotD,GAHvC,OAIb3O,YAAO,CACHzgD,UACA0gD,aAAc,eANL,2CAAH,sDAWd,OACI,cAAC,IAAD,2BAAkB1iD,GAAlB,aACI,+BAEI,qBAAKlL,UAAU,iBAAf,SAEI,sBAAKA,UAAU,eAAf,UACI,oBAAIA,UAAU,sBAAd,2BAEA,gCACI,0EACA,qBAAKuD,MAAO,CAAEwT,aAAc,OAA5B,SACI,cAAC,GAAD,CAAOpjB,KAAK,SAAS+0B,WAAS,EAACL,KAAM,EAAGzpB,WAAW,SAI3D,sIAEA,qBAAIoB,UAAU,OAAd,UACI,qBAAIA,UAAU,KAAd,gEAAuEkP,EAAvE,qBACA,oBAAIlP,UAAU,KAAd,iGAEJ,mBAAGuD,MAAO,CAAEO,UAAW,QAAvB,SACI,kCACI,cAACwmB,GAAD,CAAgBlrB,QA5ChB,WACxBi9D,GAAcD,MA0CM,qEAGI,sBAAMp8D,UAAU,WAAhB,qBAKR,qBAAKA,UAAU,uBAAf,SACI,gCAEI,cAAC,KAAD,CACIrM,KAAK,UACL8T,MAAM,gBACN0B,UAAWizD,EACXh9D,QAASgM,EAAaG,KAGzB8qB,GACG,cAAC,KAAD,CACI1iC,KAAK,SACL8T,MAAM,SACNiD,QAAQ,OACRtL,QAASi3B,oBC4DlCmmC,OAhIf,WACI,IAAMtxD,EAAUC,YAAQ,CACpBlF,KAAM,WAFK,EAKQg+C,sBAAft0C,EALO,EAKPA,KAAMT,EALC,EAKDA,KALC,EAMiBrS,oBAAS,GAN1B,mBAMRsU,EANQ,KAMG7F,EANH,OAOuBzO,mBAAS,MAPhC,mBAORyS,EAPQ,KAOKy1C,EAPL,OAQ+BloD,mBAAS,MARxC,mBAQRwS,EARQ,KAQS+8C,EART,KAUTn3C,EAAU,IAAIzF,KAAYF,GAC1B6F,EAAc,IAAIzF,KAAgBL,GAGlCnC,EAAUjL,uBACVolD,EAAe,WACjBsG,YAAO,CACHzgD,UACA0gD,aAAc,gBAKhB6O,EAAkB,uCAAG,sBAAAjxD,EAAA,sEACjBC,IAAU8wD,wBAAwB5sD,EAAMT,GADvB,OAEvBy+C,YAAO,CACHzgD,UACA0gD,aAAc,eAJK,2CAAH,qDA8BxB,SAAS8O,IAEL,OACI,qBAAK18D,UAAU,iBAAf,SAEI,sBAAKA,UAAU,eAAf,UACI,oBAAIA,UAAU,sBAAd,6BADJ,iKAKI,qBACIikC,WAAS,EACTjkC,UAAU,uBACV8D,UAAU,OAHd,SAMI,gCACI,cAAC,KAAD,CACInQ,KAAK,UACL8T,MAAM,kBACNrI,QAASq9D,IAEb,cAAC,KAAD,CACI9oE,KAAK,SACL8T,MAAM,SACNiD,QAAQ,OACRtL,QAASioD,cAWrC,OA3DAvpD,qBAAU,WACN,sBAAC,8BAAA0N,EAAA,+EAEqCC,IAAUmI,WAAWjE,GAF1D,cAEagrD,EAFb,gBAGyBlvD,IAAUgO,eAAe9J,EAAMT,GAHxD,OAGakG,EAHb,OAKO2vC,EAAe4V,GACfvO,EAAmBh3C,GAN1B,kDASOpO,QAAQuC,MAAR,MATP,yBAWO+B,GAAW,GAXlB,4EAAD,KAcD,IA6CC,cAAC,IAAD,2BAAkBJ,GAAlB,aACI,cAAC,EAAD,UACI,qBAAKvX,KAAK,mBAAmBqM,UAAU,eAAvC,SACI,sBAAKA,UAAU,SAAf,UACI,qBAAKA,UAAU,aAAf,SACI,qBAAKA,UAAU,UAAf,SACI,sBAAKA,UAAU,qBAAf,UACI,qBAAKA,UAAU,mBAAf,SACI,qBAAKG,IAAI,yBAAyBO,IAAI,iBAAiB6C,MAAO,CAAEO,UAAW,cAE/E,sBAAK9D,UAAU,6BAAf,UACI,oBAAIA,UAAU,sBAAd,SAAqCiV,EAAQthB,OAC7C,mBAAGsM,KAAK,WAAR,yCAORkR,EACO,cAAC4e,GAAA,EAAD,IACF5a,EAAYc,WAAad,EAAYwnD,2BAA2B91D,SAASsO,EAAYtF,cACnF,cAAC6sD,EAAD,IACDvnD,EAAY2B,aAGf,cAAC,GAAD,CAAcuf,SAAUgxB,EAAc13C,KAAMA,EAAMT,KAAMA,IAFpD,oBAAIlP,UAAU,sBAAd,+ECcxB48D,OAnIf,WAA0B,IAAD,IAEE3Y,sBAAft0C,EAFa,EAEbA,KAAMT,EAFO,EAEPA,KACR2tD,EAAgB,iBAAaltD,EAAb,YAAqBT,GACrClE,EAAWC,cACXiC,EAAUjL,uBAEViJ,EAAUC,YAAQ,CAAElF,KAAM,WACjBmF,GAAiBF,EAAxBorB,MAAwBprB,EAAjBE,cARM,EASiBvO,mBAAS,MAT1B,mBASdyS,EATc,KASDy1C,EATC,OAUeloD,mBAAS,MAVxB,mBAUdigE,EAVc,KAUFC,EAVE,OAWmBlgE,oBAAS,GAX5B,mBAWdmgE,EAXc,KAWCC,EAXD,KAafhoD,EAAU,IAAIzF,KAAYF,GAC1BskD,EAAQ,IAAIH,GAAMqJ,GAExBh/D,qBAAU,WACN,sBAAC,kCAAA0N,EAAA,sEACmCqI,QAAQC,IAAI,CACxCrI,IAAUmI,WAAWjE,GACrBlE,IAAU0rD,0BAA0BxnD,EAAMT,KAHjD,mCACU+F,EADV,KACmBC,EADnB,KAMG6vC,EAAe9vC,GACf8nD,EAAc7nD,GAPjB,0CAAD,KASD,IAMH,IAAM3J,EAAQ,uCAAG,WAAOvQ,GAAP,eAAAwQ,EAAA,6DACPzD,EAAU/M,EAAI,QADP,kBAIHyQ,IAAU4d,KAAK,cAAe,CAAEtW,YAAapD,EAAMT,OAAMnH,YAJtD,OAKTk1D,GAAe,GAEfjyD,EACI3N,aAAK,CACD0K,QAAS,eACTiE,SAAU,aAVT,gDAeThB,EACI3N,aAAK,CACD0K,QAAS,KAAEA,QACXiE,SAAU,aAlBT,yDAAH,sDAgCd,OACI,cAAC,IAAD,2BAAkBd,GAAlB,aACI,+BACI,cAAC,EAAD,UACI,qBAAKvX,KAAK,mBAAmBqM,UAAU,eAAvC,SACI,sBAAKA,UAAU,SAAf,UACI,qBAAKA,UAAU,aAAf,SACI,qBAAKA,UAAU,UAAf,SACI,sBAAKA,UAAU,qBAAf,UACI,qBAAKA,UAAU,mBAAf,SACI,qBAAKG,IAAI,iBAAiBO,IAAI,iBAAiB6C,MAAO,CAAEO,UAAW,cAEvE,sBAAK9D,UAAU,6BAAf,UACI,qBAAIA,UAAU,sBAAd,UACKiV,EAAQthB,KADb,+BAGMigE,EAAMsJ,wBAHZ,aAGM,EAAwB1mD,QAAQ,MAEtC,mBAAGvW,KAAM48D,EAAT,uCAMhB,qBAAK78D,UAAU,iBAAf,SAEI,sBAAKA,UAAU,eAAf,UACI,qBAAKuD,MAAO,CAAEwT,aAAc,OAA5B,SACI,cAAC,GAAD,CAAOpjB,KAAK,UAAU+0B,WAAS,EAACL,KAAM,GAAIzpB,WAAW,EAAMyE,YAAY,EAAM8F,SAAU6zD,EACnFryD,YAAY,gHACZjD,WAAY,sBAAM1H,UAAU,sBAAhB,kDAGlBg9D,GACE,qBAAKh9D,UAAU,uBAAf,SACI,gCAEI,cAAC,KAAD,CACIrM,KAAK,OACL8T,MAAM,iBACNrI,QAASgM,EAAaG,KAG1B,cAAC,KAAD,CACI5X,KAAK,SACL8T,MAAM,SACNiD,QAAQ,OACRtL,QAvD/B,WACbuuD,YAAO,CACHzgD,UACA0gD,aAAciP,8B,gCClE1B,IAiCeM,GAjCK,WAClB,IAAMC,EAAQ1/D,aAAY,SAACC,GAAD,OAAWA,EAAMy/D,SACrCpyD,EAAWC,cAEXpN,EAAc,WAClBmN,EAASqyD,iBAGX,OACE,8BACE,cAACC,GAAA,EAAD,CACEC,aAAc,CACZC,SAAUJ,EAAMI,SAChBC,WAAYL,EAAMK,YAEpBpgE,KAAM+/D,EAAM//D,KACZoB,QAASZ,EACTkK,QAASq1D,EAAMr1D,QACf21D,iBAAkB,IAClBC,OACE,cAACr8C,GAAA,EAAD,CACE4oB,KAAK,QACLp/B,aAAW,QACXzL,MAAM,UACND,QAASvB,EAJX,SAME,cAAC,KAAD,CAAWkL,SAAS,iB,qBCuRjB60D,OAzSf,WACI,IAAM1yD,EAAUC,YAAQ,CAAElF,KAAM,WADnB,EAGUg+C,sBAAft0C,EAHK,EAGLA,KAAMT,EAHD,EAGCA,KAHD,EAImBrS,oBAAS,GAJ5B,mBAINsU,EAJM,KAIK7F,EAJL,OAKyBzO,mBAAS,MALlC,mBAKNyS,EALM,KAKOy1C,EALP,OAMiCloD,mBAAS,MAN1C,mBAMNwS,EANM,KAMW+8C,EANX,OAOuBvvD,mBAAS,MAPhC,mBAONigE,EAPM,KAOMC,EAPN,OAQqBlgE,mBAAS,MAR9B,mBAQNghE,EARM,KAQKC,EARL,KASPC,EAAiC,SAAhB,OAATF,QAAS,IAATA,OAAA,EAAAA,EAAWG,WAEnB/oD,EAAU,IAAIzF,KAAYF,GAC1B6F,EAAc,IAAIzF,KAAgBL,GAElC4uD,EAAoBhpD,EAAQipD,aAGlCpgE,qBAAU,WACN,sBAAC,sCAAA0N,EAAA,+EAEmDqI,QAAQC,IAAI,CACpDrI,IAAUmI,WAAWjE,GACrBlE,IAAUgO,eAAe9J,EAAMT,GAC/BzD,IAAU0rD,0BAA0BxnD,EAAMT,GAC1CzD,IAAU0yD,SAASxuD,KAN9B,mCAEcsF,EAFd,KAEuBG,EAFvB,KAE4BF,EAF5B,KAEoCkpD,EAFpC,KASOrZ,EAAe9vC,GACfm3C,EAAmBh3C,GACnB2nD,EAAc7nD,GACd4oD,EAAaM,GAZpB,kDAeOp3D,QAAQuC,MAAR,MAfP,yBAiBO+B,GAAW,GAjBlB,4EAAD,KAoBD,IAEH,IAAM4B,EAAUjL,uBACVolD,EAAe,WACjBsG,YAAO,CACHzgD,UACA0gD,aAAc,gBAKhByQ,EAAiB,uCAAG,sBAAA7yD,EAAA,sDACtB8yD,EAAkB,UADI,2CAAH,qDAIjBC,EAAuB,uCAAG,sBAAA/yD,EAAA,sEACtBC,IAAUuU,uBAAuBrQ,EAAMT,GADjB,OAE5By+C,YAAO,CACHzgD,UACA0gD,aAAc,eAJU,2CAAH,qDAQvB6O,EAAkB,uCAAG,sBAAAjxD,EAAA,sDACvB8yD,EAAkB,WADK,2CAAH,qDA7DX,EAiE+BzhE,mBAAS,MAjExC,mBAiEN2hE,EAjEM,KAiEUF,EAjEV,KAkEPG,EAAgB,uCAAG,sBAAAjzD,EAAA,sDAErB8yD,EAAkB,SAFG,2CAAH,qDAStB,SAASI,IACL,IAAMC,EAAmB,UAAYV,EAErC,OAAO,mBAAGh+D,KAAM0+D,EAAT,SAA4BV,IAUvC,SAASW,IAAqB,IAAD,EAEW/hE,oBAAS,GAFpB,mBAElBu/D,EAFkB,KAELC,EAFK,KAQzB,OACI,qBAAKr8D,UAAU,iBAAf,SAEI,sBAAKA,UAAU,eAAf,UACI,oBAAIA,UAAU,sBAAd,gCAEA,cAAC,GAAD,CAAciV,QAAS3F,EAAa4F,OAAQ4nD,EAAY3nD,YAAa9F,KAE3D,OAATwuD,QAAS,IAATA,OAAA,EAAAA,EAAWgB,kBACR,gCACI,oBAAI7+D,UAAU,sBAAd,0CACA,sBAAKuD,MAAO,CAAEyd,WAAY,OAA1B,UACI,qBAAKzd,MAAO,CAAE4J,QAAS,eAAgBg8C,cAAe,OAAtD,SACI,mBAAGlpD,KAAI,oBAAe0P,EAAf,YAAuBT,GAA9B,yBAEJ,qBAAK3L,MAAO,CAAE4J,QAAS,eAAgBg8C,cAAe,SAAU1+C,OAAQ,SAAxE,yBAGA,sBAAKlH,MAAO,CAAE4J,QAAS,eAAgBg8C,cAAe,OAAtD,UACI,8BAAMl0C,EAAQthB,OACd,mDAAekqE,QAAf,IAAeA,OAAf,EAAeA,EAAWziE,QAC1B,8BAAMyiE,EAAUgB,gBAAgBC,WAChC,8BAAMjB,EAAUgB,gBAAgBnwC,WAChC,gCACKmvC,EAAUgB,gBAAgB/9B,KAD/B,SAEK+8B,EAAUgB,gBAAgB5/B,MAF/B,QAGK4+B,EAAUgB,gBAAgBzgD,IAH/B,oBAUhB,gCACI,oBAAIpe,UAAU,sBAAd,oCACA,qBAAIA,UAAU,OAAd,UACI,oBAAIA,UAAU,KAAd,uHAEA,qBAAIA,UAAU,KAAd,iHACwB,cAAC0+D,EAAD,IADxB,UAKJ,oBAAI1+D,UAAU,sBAAd,wBACA,qBAAIA,UAAU,OAAd,UACI,oBAAIA,UAAU,KAAd,gNAKA,qBAAIA,UAAU,KAAd,4EAEU,cAAC0+D,EAAD,IAFV,gFAOJ,oBAAI1+D,UAAU,sBAAd,sCACA,qBAAIA,UAAU,OAAd,UACI,oBAAIA,UAAU,KAAd,4MAGA,oBAAIA,UAAU,KAAd,6GACA,oBAAIA,UAAU,KAAd,oLAEA,oBAAIA,UAAU,KAAd,+MAKH+9D,GACG,qCACI,oBAAI/9D,UAAU,sBAAd,6DACA,qBAAIA,UAAU,OAAd,UACI,oBAAIA,UAAU,KAAd,8QAGA,oBAAIA,UAAU,KAAd,qNAEA,oBAAIA,UAAU,KAAd,2IAGJ,8BACI,mBAAGC,KAAK,2DAAR,wBADJ,4GAQVkV,EAAYrF,WACV,qCACI,sBAAK9P,UAAU,uBAAf,UACI,cAAC,KAAD,CACIrM,KAAK,SACL8T,MAAM,SACNrI,QAASi/D,IAEb,cAAC,KAAD,CACI1qE,KAAK,UACL8T,MAAM,UACNrI,QAASq9D,IAGb,cAAC,KAAD,CACI9oE,KAAK,QACL8T,MAAM,QACNrI,QAASq/D,IAEb,cAAC,KAAD,CACI9qE,KAAK,SACL8T,MAAM,SACNiD,QAAQ,OACRtL,QAASioD,OAIG,UAAnBmX,GACG,oJAEoB,cAACE,EAAD,OAGJ,WAAnBF,GACG,qCACI,qBAAIx+D,UAAU,OAAd,UACI,oBAAIA,UAAU,KAAd,0DACA,oBAAIA,UAAU,KAAd,+OACA,oBAAIA,UAAU,KAAd,sHAEA,oBAAIA,UAAU,KAAd,uOAIA,oBAAIA,UAAU,KAAd,mKAGA,oBAAIA,UAAU,KAAd,wNAEA,oBAAIA,UAAU,KAAd,iMAGA,oBAAIA,UAAU,KAAd,8NAIJ,4BACI,kCACI,cAACsqB,GAAD,CAAgB32B,KAAK,eAAe6U,SAxJ5C,WACxB6zD,GAAcD,IAuJqF91D,MAAO81D,IAD9E,qEAGI,sBAAMp8D,UAAU,WAAhB,qBAIR,qBAAKA,UAAU,uBAAf,SACI,cAAC,KAAD,CAAQrM,KAAK,UAAU8T,MAAM,2BAA2BiD,QAAQ,OAAOvB,UAAWizD,EAAah9D,QAASm/D,SAMhG,YAAnBC,GACG,cAAC,GAAD,CAAc7uD,KAAMA,EAAMT,KAAMA,YAU5D,OACI,cAAC,IAAD,2BAAkBhE,GAAlB,aACI,cAAC,EAAD,UACI,qBAAKvX,KAAK,mBAAmBqM,UAAU,eAAvC,SACI,sBAAKA,UAAU,SAAf,UACI,qBAAKA,UAAU,aAAf,SACI,qBAAKA,UAAU,UAAf,SACI,sBAAKA,UAAU,qBAAf,UACI,qBAAKA,UAAU,mBAAf,SACI,qBAAKG,IAAI,iBAAiBO,IAAI,iBAAiB6C,MAAO,CAAEO,UAAW,cAEvE,sBAAK9D,UAAU,6BAAf,UACI,oBAAIA,UAAU,sBAAd,SAAqCiV,EAAQthB,OAC7C,mBAAGsM,KAAK,aAAR,2CAMfkR,GAAa,cAAC4e,GAAA,EAAD,KACZ5e,GAAa,cAACytD,EAAD,eC1QjCG,GAAeC,eAcrB,SAASC,GAAT,GAAoC,IAAbj9D,EAAY,EAAZA,SACfkL,EAAUjL,uBAUhB,OATAnE,qBAAU,WACR,IAAMohE,EAAWhyD,EAAQiyD,QAAO,WAC9Bh+D,OAAO2L,SAAS,EAAG,MAErB,OAAO,WACLoyD,OAED,CAAChyD,IAEG,cAAC,WAAD,UAAWlL,IAvBhBo9D,KAAQC,WAAWN,GAAc,CAC7BO,UAAW,CACTC,oBAAqB,OAGzBH,KAAQI,KAAK,CACXC,QAAS,WACTv9C,KAAM/gB,OAAOC,SAAS4M,SAAW7M,OAAOC,SAASs+D,SAmB1CC,+BAAWV,IAE1BW,IAASr3D,OACP,cAAC,IAAMs3D,WAAP,UACE,eAAC,IAAD,CAAUC,MAAOA,IAAjB,UACE,cAAC,GAAD,IACA,cAAC,EAAD,IACA,cAAC,IAAD,UACE,cAACb,GAAD,UACA,eAAC,SAAD,WACE,cAAC,GAAD,CAAgBc,KAAK,aAAa1+C,UAAWnQ,GAAWrE,WAAW,IACnE,cAAC,GAAD,CAAgBkzD,KAAK,UAAU1+C,UAAWnK,GAAQrK,WAAW,IAC7D,cAAC,GAAD,CAAgBkzD,KAAK,YAAY1+C,UAAWyH,GAAUjc,WAAW,IACjE,cAAC,GAAD,CAAgBkzD,KAAK,YAAY1+C,UAAWoI,GAAU5c,WAAW,IACjE,cAAC,GAAD,CAAgBkzD,KAAK,WAAW1+C,UAAWuP,GAAS/jB,WAAW,IAC/D,cAAC,GAAD,CAAgBkzD,KAAK,YAAY1+C,UAAWsQ,GAAU9kB,WAAW,IACjE,cAAC,GAAD,CAAgBkzD,KAAK,WAAW1+C,UAAWgpB,GAASx9B,WAAW,IAC/D,cAAC,GAAD,CAAgBkzD,KAAK,gBAAgB1+C,UAAWorB,GAAc5/B,WAAW,IACzE,cAAC,GAAD,CAAgBkzD,KAAK,qCAAqC1+C,UAAW2iC,KACrE,cAAC,GAAD,CAAgB+b,KAAK,kBAAkB1+C,UAAWqqC,KAClD,cAAC,GAAD,CAAgBqU,KAAK,gBAAgB1+C,UAAWysC,KAChD,cAAC,GAAD,CAAgBiS,KAAK,cAAc1+C,UAAW8F,KAC9C,cAAC,GAAD,CAAgB44C,KAAK,cAAc1+C,UAAWgyC,KAC9C,cAAC,GAAD,CAAgB0M,KAAK,oBAAoB1+C,UAAWo1C,KACpD,cAAC,GAAD,CAAgBsJ,KAAK,wBAAwB1+C,UAAWk2C,KACxD,cAAC,GAAD,CAAgBwI,KAAK,wBAAwB1+C,UAAWm6C,KACxD,cAAC,GAAD,CAAgBuE,KAAK,eAAe1+C,UAAWuuB,KAC/C,cAAC,GAAD,CAAgBmwB,KAAK,2BAA2B1+C,UAAWmO,KAC3D,cAAC,GAAD,CAAgBuwC,KAAK,qBAAqB1+C,UAAWq6C,KACrD,cAAC,GAAD,CAAgBqE,KAAK,uBAAuB1+C,UAAWm7C,KACvD,cAAC,GAAD,CAAgBuD,KAAK,qBAAqB1+C,UAAWu8C,KACrD,cAAC,GAAD,CAAgBmC,KAAK,wBAAwB1+C,UAAWu7C,KACxD,cAAC,QAAD,CAAOmD,KAAK,IAAI1+C,UAAW4uB,iBAMnCrwC,SAASC,eAAe,SAM1BhE,K,yNCjGA,IA2mBM4P,E,WAxmBJ,WAAYu0D,EAAMC,GAAU,IAAD,gCAqB3Bh0D,QArB2B,uCAqBjB,WAAOi0D,EAAU71D,EAAQ81D,GAAzB,qCAAA30D,EAAA,6DAAiC40D,EAAjC,gCACJ,EAAKH,UACPC,EAAWH,IAAK17D,KAAK,EAAK47D,QAASC,IAG/B9lD,EAAM,IAAImjC,IAAI2iB,EAAU,EAAKF,MAC3BK,EAAiBjmD,EAAjBimD,aAIRF,EAASA,GAAUG,EAAUC,QAAQC,IAErCr4D,EAAU,CACRg4D,SACAM,QAAS,CACPC,cAAc,UAAD,OAAY9iE,IAAK+iE,eAEhCC,aAAcR,EAAS,OAAS,QAK9BD,IAAWG,EAAUC,QAAQC,KAAOn2D,EACtC5O,OAAOy2B,QAAQ7nB,GAAQojC,SAAQ,YAAmB,IAAD,mBAAhBjjC,EAAgB,KAAXlE,EAAW,KAC3C1B,MAAMkgC,QAAQx+B,GAChBA,EAAMmnC,SAAQ,SAACozB,GAAD,OAAcR,EAAaS,OAAOt2D,EAAKq2D,MAErDR,EAAaS,OAAOt2D,EAAKlE,MAI7B65D,IAAWG,EAAUC,QAAQQ,MAC7BZ,IAAWG,EAAUC,QAAQS,KAC7Bb,IAAWG,EAAUC,QAAQU,SAE7B94D,EAAQnN,KAAOqP,GAGjBlC,EAAQiS,IAAMA,EAAI3d,WAtCV,mBAyCiBykE,IAAM/4D,GAzCvB,eAyCAw8B,EAzCA,yBA0CCA,EAAS3pC,MA1CV,qCA4CwB,OAA1B,2CAAK2pC,gBAAL,eAAez4B,QA5Cb,kCA6CEtO,IAAKW,SA7CP,6EArBiB,+DAwE3BiL,IAxE2B,uCAwErB,WAAO02D,EAAU71D,EAAQ+1D,GAAzB,SAAA50D,EAAA,+EACG,EAAKS,QAAQi0D,EAAU71D,EAAQi2D,EAAUC,QAAQC,IAAKJ,IADzD,2CAxEqB,+DA4E3B3lD,OA5E2B,uCA4ElB,WAAOylD,EAAU71D,GAAjB,SAAAmB,EAAA,+EACA,EAAKS,QAAQi0D,EAAU71D,EAAQi2D,EAAUC,QAAQU,SADjD,2CA5EkB,6DAgF3Bp3B,IAhF2B,uCAgFrB,WAAOq2B,EAAU71D,GAAjB,SAAAmB,EAAA,+EACG,EAAKS,QAAQi0D,EAAU71D,EAAQi2D,EAAUC,QAAQS,MADpD,2CAhFqB,6DAoF3B33C,KApF2B,uCAoFpB,WAAO62C,EAAU71D,GAAjB,SAAAmB,EAAA,+EACE,EAAKS,QAAQi0D,EAAU71D,EAAQi2D,EAAUC,QAAQQ,OADnD,2CApFoB,6DAwF3B/gD,uBAxF2B,uCAwFF,WAAOjN,EAAa7D,GAApB,SAAA1D,EAAA,+EAChBC,EAAUo+B,IAAV,gBAA+B,CACpCv3B,YAAaS,EACbhC,KAAM7B,KAHe,2CAxFE,6DA+F3BqtD,wBA/F2B,uCA+FD,WACxBxpD,EACA7D,EACAotD,GAHwB,SAAA9wD,EAAA,+EAKjBC,EAAUgP,OAAV,iBAAmC,CACxCnI,YAAaS,EACbhC,KAAM7B,EACNiyD,OAAQ7E,KARc,2CA/FC,+DA2G3Bf,kBA3G2B,uCA2GP,WAClBxoD,EACA7D,GAFkB,SAAA1D,EAAA,+EAIXC,EAAUgP,OAAV,eAAiC,CACtCnI,YAAaS,EACbhC,KAAM7B,KANU,2CA3GO,6DA2H3Bs5C,kBA3H2B,uCA2HP,WAClBz1C,GADkB,2BAAAvH,EAAA,6DAElB0D,EAFkB,+BAEXkyD,cAFW,kBAIX31D,EAAUo+B,IAAV,sBAAqC,CAC1Cv3B,YAAaS,EACbhC,KAAM7B,KANU,2CA3HO,2DAqI3B62C,iBArI2B,uCAqIR,WACjBhzC,EACA7D,GAFiB,SAAA1D,EAAA,+EAIVC,EAAU4d,KAAV,eAA+B,CACpC/W,YAAaS,EACbhC,KAAM7B,KANS,2CArIQ,6DA+I3BtC,WAAa,WACX,OAAOnB,EAAUjC,IAAI,aAhJI,KA2J3B63D,qBA3J2B,uCA2JJ,WACrBtuD,EACA7D,GAFqB,SAAA1D,EAAA,+EAIdC,EAAUjC,IAAV,0CAC8BuJ,EAD9B,wBACyD7D,KAL3C,2CA3JI,6DAyK3BuK,eAzK2B,uCAyKV,WAAO1G,EAAa7D,GAApB,eAAA1D,EAAA,sEACMC,EAAUjC,IAAV,0CACgBuJ,EADhB,wBAC2C7D,IAFjD,UAIM,IAHfvD,EADS,QAIJ/I,OAJI,yCAKN,MALM,gCAMR+I,EAAO,IANC,2CAzKU,6DAkL3BwrD,0BAlL2B,uCAkLC,WAC1BpkD,EACA7D,GAF0B,SAAA1D,EAAA,+EAInBC,EAAUjC,IAAV,oCACwBuJ,EADxB,wBACmD7D,KALhC,2CAlLD,6DA2L3B2tC,uBA3L2B,uCA2LF,mCAAArxC,EAAA,6DACvBjQ,EADuB,EACvBA,YACAwD,EAFuB,EAEvBA,GACAmQ,EAHuB,EAGvBA,KAEMoyD,EAAO,CACX,qBAAsB/lE,EACtB,YAAawD,GAGXmQ,IACFoyD,EAAK,eAAiBpyD,GAXD,kBAchBzD,EAAUjC,IAAV,QAEL83D,GACA,IAjBqB,2CA3LE,2DAiN3BC,wBAjN2B,uCAiND,2CAAA/1D,EAAA,6DACxBsxC,EADwB,EACxBA,KACAvhD,EAFwB,EAExBA,YACAwD,EAHwB,EAGxBA,GACAmQ,EAJwB,EAIxBA,KAEIgxD,EANoB,QAOpB,EAAKD,UACPC,EAAWH,IAAK17D,KAAK,EAAK47D,QAASC,IAG/B9lD,EAAM,IAAImjC,IAAI2iB,EAAU,EAAKF,MAC3BK,EAAiBjmD,EAAjBimD,cAEFmB,EAAW,IAAIC,UACZX,OAAO,OAAQhkB,GACxBujB,EAAaS,OAAO,qBAAsBvlE,GAC1C8kE,EAAaS,OAAO,YAAa/hE,GAE7BmQ,GACFmxD,EAAaS,OAAO,cAAe5xD,GApBb,kBAuBjBgyD,IAAM,CACXf,OAAQ,OACR/lD,IAAKA,EAAI3d,WACTzB,KAAMwmE,EACNf,QAAS,CACP,eAAgB,sBAChBC,cAAc,UAAD,OAAY9iE,IAAK+iE,iBAE/B3kE,MAAK,qBAAGhB,SA/Ba,4CAjNC,2DAmP3B4R,WAAa,WACT,OAAOnB,EAAUjC,IAAI,aApPE,KAuP3BkC,cAAgB,SAACrB,GACb,OAAOoB,EAAU4d,KAAK,wBAAyBhf,IAxPxB,KAiQ3BuJ,WAAa,SAACjE,GACZ,OAAOlE,EAAUjC,IAAV,mBAA0BmG,KAlQR,KA4Q3B+xD,WAAa,SAACnmE,EAAa2T,GACzB,OAAOzD,EAAUjC,IAAI,kBAAmB,CACpCjO,YAAaA,EACb2T,KAAMA,KA/Qe,KA0R3B6sB,sBA1R2B,uCA0RH,WAAOxgC,EAAa2T,GAApB,eAAA1D,EAAA,sEACF,EAAKk2D,WAAWnmE,EAAa2T,GAD3B,cAClB/G,EADkB,yBAEfA,EAAQtD,KAAI,SAACgW,GAChB,IAAM8mD,EAAa,CACfl6D,MAAOoT,EAAOzf,KACdkL,MAAOuU,EAAOoT,OAElB,GAAIpT,EAAOvF,MAAM,CAAC,IAAD,gBACIuF,EAAOvF,OADX,IACb,2BAA+B,CAAC,IAAvB00C,EAAsB,QAC3B2X,EAAW3X,EAAK/yC,UAAY+yC,EAAK/7B,OAFxB,+BAKjB,OAAO0zC,MAZW,2CA1RG,6DA+S3BxD,SAAW,SAACxuD,GACV,OAAOlE,EAAUjC,IAAV,wBAA+BmG,KAhTb,KAwT3BK,UAAY,SAACL,EAAMT,GACjB,OAAOzD,EAAUjC,IAAV,0BAAiCmG,EAAjC,YAAyCT,KAzTvB,KA4T3B4f,cAAgB,SAACnf,GACb,OAAOlE,EAAUjC,IAAV,uBAA8BmG,KA7Td,KAgU3BwG,WAAa,SAACxG,GACV,OAAOlE,EAAUjC,IAAV,mBAA0BmG,KAjUV,KAoU3BwL,QAAU,SAACpc,GACT,OAAO0M,EAAUjC,IAAV,gBAAuBzK,KArUL,KAgV3By5C,YAAc,SAACv9B,EAAUtL,GACvB,OAAOlE,EAAUjC,IAAV,qBAA4BmG,EAA5B,qBAA6CsL,KAjV3B,KAqV3BzJ,iBArV2B,sBAqVR,gCAAAhG,EAAA,6DAGXuT,EAAY,CAChBh3B,IAAOC,WACPD,IAAOE,UACPF,IAAOI,UACPJ,IAAOS,aACPT,IAAOU,eACPV,IAAOa,mBACPb,IAAOc,cACPd,IAAOW,iBACPX,IAAOY,mBACPZ,IAAOe,WACPf,IAAOwG,iBACPxG,IAAOyG,eACPzG,IAAO0G,kBACP1G,IAAO2G,gBACP3G,IAAOoD,iBAGPpD,IAAOK,WACPL,IAAOO,kBAGPP,IAAOwC,IACPxC,IAAOsD,SACPtD,IAAOqB,yBACPrB,IAAO2K,yBACP3K,IAAO6K,uBACP7K,IAAOmG,qBACPnG,IAAOgC,qBACPhC,IAAOiC,iBACPjC,IAAOkC,iBACPlC,IAAOmC,uBACPnC,IAAOoC,iBACPpC,IAAOqC,cACPrC,IAAOyC,iBACPzC,IAAO6C,YAGP7C,IAAO+G,gBACP/G,IAAOgH,WACPhH,IAAO+B,qBACP/B,IAAOsB,yBACPtB,IAAO4B,eACP5B,IAAOgB,UAGPhB,IAAOkD,kBACPlD,IAAOiD,mBAGDgQ,EAAO,CACX,sBAAuB+jB,EAAUla,KAAI,SAAC9J,GAAD,OACnCsM,IAAeC,eAAevM,OAvDnB,SA2DM0Q,EAAUjC,IAAI,qBAAsBxO,GA3D1C,cA2DT2Q,EA3DS,yBA4DRA,GA5DQ,2CArVQ,KAyZ3Bi2D,iBAzZ2B,uCAyZR,WAAO7iD,GAAP,eAAAvT,EAAA,6DACXxQ,EAAO,CACX,sBAAuB+jB,EAAUla,KAAI,SAAC9J,GAAD,OACnCsM,IAAeC,eAAevM,OAHjB,SAMJ0Q,EAAUjC,IAAI,qBAAsBxO,GANhC,mFAzZQ,2DAwa3Bm2C,oBAxa2B,uCAwaL,WAAOp+B,EAAa7D,EAAM6P,GAA1B,eAAAvT,EAAA,6DACdq2D,EAAQ,CACZruD,aAAc,CAACT,GACf7D,KAAMA,EACNoe,aAAcvO,EAAUla,KAAI,SAAC9J,GAAD,OAAcsM,IAAeC,eAAevM,OAJtD,SAOP0Q,EAAUjC,IAAI,qBAAsBq4D,GAP7B,mFAxaK,+DAkb3BC,iBAlb2B,sBAkbR,sBAAAt2D,EAAA,sEACJC,EAAUjC,IAAI,iCADV,mFAlbQ,KAsb3Bu4D,4BAtb2B,sBAsbG,gCAAAv2D,EAAA,sEACR,EAAKhC,IAAI,oDADD,OAI5B,IAAQ2F,KAHJiV,EADwB,OAE5Bpd,QAAQwiB,IAAI,0BAA2BpF,GACnC49C,EAAU,GACE59C,EACdpd,QAAQwiB,IAAI,OAAQpF,EAAQjV,GAAMxB,QACP,SAAxByW,EAAQjV,GAAMxB,QAA6C,SAAxByW,EAAQjV,GAAMxB,QAA6C,QAAxByW,EAAQjV,GAAMxB,QACrFq0D,EAAQj0D,KAAKqW,EAAQjV,IAPG,OAU5BnI,QAAQwiB,IAAI,+BAAgCw4C,GAVhB,kBAWrBA,GAXqB,2CAtbH,KA2c3BC,gBA3c2B,sBA2cT,oEAAAz2D,EAAA,sDAAO02D,EAAP,+BAA0B,GAAIC,EAA9B,uBAAmCjzD,EAAnC,uBAEhBgzD,EAAgB,cAAoB,MACpCA,EAAgB,UAAe,EAE1BA,EAAgB,gBACZA,EAAgB,QAGrB9nD,EAAM,kBATM,KAUR+nD,EAVQ,OAWT,IAXS,MAYT,IAZS,QAiBT,IAjBS,QAoBT,IApBS,QAuBT,IAvBS,gCAaZ/nD,EAAG,sBACH8nD,EAAgB,WAAiB,aAC1BA,EAAgB,cAfX,oCAkBZ9nD,EAAM,4BAlBM,oCAqBZ8nD,EAAgB,sBAA2B,EArB/B,6EA6BZhzD,EA7BY,iBA8BdgzD,EAAiB,eAAiBhzD,EA9BpB,yCAiCc89B,YAAoB,OAjClC,QAiCRQ,EAjCQ,OAkCd00B,EAAiB,eAAiB10B,EAlCpB,cAsC+B,kBAApC00B,EAAgB,cACzBA,EAAgB,aAAmB,GAvCrB,UAyCO,EAAK14D,IAAI4Q,EAAK8nD,GAzCrB,QAyCVv9B,EAzCU,OA0CZ5wB,EAAW4wB,EAAShgB,eAExB3d,QAAQwiB,IAAI,iCAAkCmb,GA5C9B,KA8CRw9B,EA9CQ,OA+CT,IA/CS,MAgDT,IAhDS,MAiDT,IAjDS,QAoDT,IApDS,QAsDT,IAtDS,gCAkDZpuD,EAAW4wB,EAlDC,oFA2DJ,IAARw9B,GAAqB,IAARA,EA3DD,iBAyEd,IAZMzuD,EAAkB,GAGpB0uD,EAAgBruD,EACpB/M,QAAQwiB,IAAI,oBAAqB44C,EAAex/D,QAG5Cy/D,EAAmBD,EAAe18D,QAAO,SAAA48D,GAAa,MAAoC,UAAnB,OAAbA,QAAa,IAAbA,OAAA,EAAAA,EAAe1qD,iBAC7E5Q,QAAQwiB,IAAI,sBAAuB64C,EAAiBz/D,QAEpDmR,EAAWsuD,EAEHt9D,EAAI,EAAGA,EAAIgP,EAASnR,OAAQmC,IAE5BkQ,EAAUlB,EAAShP,GAEzB2O,EAAgB3F,KAAK,EAAKvE,IAAL,mBAAqByL,EAAQ3C,eA7EtC,iBA+EQuB,QAAQC,IAAIJ,GA/EpB,QA+ER0Q,EA/EQ,OAgFdrQ,EAAWqQ,EAAQvf,KAAI,SAACoQ,EAAQ9Q,GAC9B,OAAO,2BACF8Q,GACAmP,EAAQjgB,OAnFD,yBAwFW0P,QAAQC,IAAKC,EAASlP,IAAT,uCAAa,WAAM09D,EAAap+D,GAAnB,iCAAAqH,EAAA,6DAC7Cg3D,EAD6C,OAC7BD,QAD6B,IAC7BA,OAD6B,EAC7BA,EAAazxD,cAC7Bq7B,EAAes2B,IAAMD,EAAe,QACpCE,GAA2B,OAAZv2B,QAAY,IAAZA,OAAA,EAAAA,EAAcp7B,OAAQ7B,EAEvCyzD,IAA2B,OAAXJ,QAAW,IAAXA,OAAA,EAAAA,EAAazxD,gBAAiB,IAAInV,MACpD,qBAAGoV,OAAoB2xD,KAN0B,SAU1Bj3D,EAAUjC,IAAI,cAAe,CAACuJ,YAAawvD,EAAYz0D,KAAMoB,KAAMwzD,IAVzC,cAU7CE,EAV6C,OAW7CC,EAAYD,EAAW,GAAGz8C,cAXmB,UAmB1B1a,EAAUjC,IAAI,yBAA0B,CAACuJ,YAAawvD,EAAYz0D,KAAM6f,MAAO,cAAeze,KAAMwzD,IAnB1E,eAmB7C90D,EAnB6C,OAsB/Cg/C,EAAW,GACXjtC,EAAmB,GAEnBgjD,IACFhjD,EAAmBgjD,EAAartD,MAAMzQ,KAAI,gBAAGgJ,EAAH,EAAGA,YAAH,MAAsB,CAC9DvH,MAAO80D,IAAUvtD,QAEnB++C,GAAuB,OAAZ+V,QAAY,IAAZA,GAAA,UAAAA,EAAcG,gBAAd,eAAwBnnE,MAAK,kBAAuB,QAAvB,EAAGmS,UAA8By0D,EAAYQ,aAGnFnW,EAAW7iD,IAAO6iD,EAASpwD,MAAM2N,OAAO,kBAhCO,kBAmC5C,CAEL/O,KAAMmnE,EAAYnnE,KAClB0S,KAAMy0D,EAAYz0D,KAClBL,mBAAoB80D,EAAYS,qBAEhCn1D,YAAa00D,EAAY10D,YACzBizC,SAAU,EACV8L,WAEAmC,MAAO,uBACPkU,aAAc,UACdC,aAAa,EACbC,cAAc,EACdC,mBAAmB,EACnBC,YAAa,IACb1jD,mBACAyC,UAAU,EACV7U,QAASs1D,EACTr1D,aAAcI,EACdA,WAAYA,EACZsB,MAAkB,OAAZi9B,QAAY,IAAZA,OAAA,EAAAA,EAAcp7B,OAAQ7B,IAxDqB,4CAAb,0DAxFxB,eAwFVmE,EAxFU,OAqJVuT,EAAaphB,KAAK6e,KACtByU,OAAO6L,EAAS9f,YApmBW,IA8cb,kBAyJT,CAAExR,eAAcuT,eAzJP,4CA1chB3rB,KAAK+kE,KAAO,IAAIziB,IAAIyiB,GACpB/kE,KAAKglE,QAAUA,E,8CAGjB,WACE,MAAO,CACLO,IAAK,MACLO,KAAM,OACNC,IAAK,MACLC,OAAQ,Y,2BAIZ,WACE,OAAO,IAAIX,EACTtB,gDACAA,e,KAulBsBsE,gBAEb73D,O,q4BChnBFkiD,EAAS,SAAC,GAA+B,IAA7BzgD,EAA4B,EAA5BA,QAAS0gD,EAAmB,EAAnBA,aAC1B1gD,EAAQ9L,SAASzD,OAASuP,EAAQ9L,SAASzD,MAAMsQ,KACjDf,EAAQa,KAAKb,EAAQ9L,SAASzD,MAAMsQ,MAEpCf,EAAQa,KAAK6/C,GAAgB,eASxB/pB,EAAS,SAAClZ,GACnB,MAAW,QAAPA,GAAwB,GAAPA,GAWZoqC,EAAY,SAACpqC,GACtB,MAAY,SAARA,IAA0B,IAARA,GAGV,UAARA,IAA2B,IAARA,GAGhB,MAQEyR,EAAU,SAACzR,GACpB,MAAW,QAAPA,GAAwB,GAAPA,EACV,OAEJ,SAOEmZ,EAAkB,SAACnZ,GAC5B,MAAY,SAARA,IAA0B,IAARA,EACX,OAEC,UAARA,IAA2B,IAARA,EACZ,QAEJ,MAGE44C,EAAmB,WAC5B,OAAOC,wBAAc,CAAEC,MAAO,yBAGrB9oB,EAAkB,WAE3B,OAAO0D,KASE+iB,EAAiB,WAC1B,OAAOtoC,OAAO/uB,MAASI,OAAO,UAWrBmvB,EAAqB,SAACoqC,EAAgB/nB,GAC/C,MAAM,GAAN,OAAU+nB,EAAV,YAA4B/nB,IAenBl1C,EAA6B,SAACqyC,GACvC,OAAQA,GAAa,IAAIjb,MAAM,KAAK,IAG3Bj3B,EAA0B,SAACkyC,GACpC,IAAM6qB,GAAgB7qB,GAAa,IAAIjb,MAAM,KAE7C,OAD8B8lC,EAAa/gE,OAAS,EACrB+gE,EAAa,GAAG9lC,MAAM,KAAK,GAAK,MAGtD12B,EAAkB,WAC3B,IAAMy8D,EAAkB,IAAIC,gBAAgB1iE,OAAOC,SAASs+D,QAE5D,OADejkE,OAAOqoE,YAAYF,EAAgB1xC,YAIzCiJ,EAAgB,SAACpgC,EAAUgpE,GACpC,IAAMlqC,EAAiBkqC,GAAyBjE,IAAMkE,WAAW7hE,KACjE,OAAOmD,IAAKu0B,EAAD,iBAA2B9+B,EAA3B,YAUF0V,EAAuB,SAACwE,EAASE,GAAiB,IAAD,EAElDuL,EAAsFvL,EAAtFuL,UAAWD,EAA2EtL,EAA3EsL,YAAaE,EAA8DxL,EAA9DwL,SAAUwF,EAAoDhR,EAApDgR,cAAeke,EAAqClvB,EAArCkvB,mBAAoBzsB,EAAiBzC,EAAjByC,aACzE1L,EAAS+3D,IAAOC,SAGhBxjD,IACAxU,EAAS+3D,IAAOE,aAEhB1jD,IACAvU,EAAS+3D,IAAOG,WAEpB,IAAMC,EAAqD,QAA9BpvD,EAAQlF,mBAAgD,QAAjBkF,EAAQnH,KACrD,OAAlBqY,IAA4C,IAAlBA,GAA8Bk+C,GAAyB3jD,IAClFxU,EAAS+3D,IAAOK,YAGpB,IACM3kD,EAAgB,UADF,IAAInQ,IAAYyF,GACCjF,UAAUmF,EAAYpE,aAArC,aAAG,EAAyC2oD,MAAM70D,KAAI,gBAAGgJ,EAAH,EAAGA,YAAH,MAAsB,CAAEvH,MAAO80D,IAAUvtD,OAErH,OAAO,2BACAoH,GADP,IAEI/I,SACAiU,oBAAqBhL,EACrBxH,OAAQwH,EAAYxH,OACpBJ,QAAS4H,EAAYgR,cACrB3Y,aAAc,KACdI,WAAY,KACZsB,KAAMiG,EAAYpE,KAClBtD,mBAAoBwH,EAAQ+tD,qBAC5B90D,cAA6C,QAA9B+G,EAAQlF,kBACvByQ,YAAa,CACTE,YACAD,cACAE,WACAwF,gBACAke,qBACAzsB,gBAEJqH,WAAY,CACR00C,YAAax+C,EAAYwC,mBACzB7H,UAA+C,eAAnCqF,EAAYwC,oBAA0E,SAAnCxC,EAAYwC,mBAC3Eo3C,MAAO,GACPxvC,mBAAoB,KACpBD,uBAAwB,KACxBJ,oBAAqB,MAEzBS,iBAAkBA,EAClB4kD,aA5Ce,QAuDhB,SAASr+C,EAAoBs+C,EAAkBvvD,GAAwB,IAAD,EAAdwvD,EAAc,uDAAJ,GAC/DrvD,EAAMovD,EAAiB7oE,MAAK,SAAA6P,GAAC,OAAIA,EAAEsC,MAAQmH,EAAQnH,QACzD,GAAIsH,EACA,OAAOA,EAEX,IAAMsvD,EAAc,CAChBv+C,cAAa,iBAAEs+C,QAAF,IAAEA,OAAF,EAAEA,EAASt+C,qBAAX,QAA4B,KACzCzF,WAAW,EACXD,aAAa,EACb4jB,mBAAoB,KACpBzsB,aAAc,KACd+I,SAAU,KACV5P,KAAI,OAAE0zD,QAAF,IAAEA,OAAF,EAAEA,EAAS1zD,MAEnB,OAAON,EAAqBwE,EAASyvD,GAQlC,IAAMxwD,EAAyB,uCAAG,WAAOvD,GAAP,+BAAAnF,EAAA,6DAAoB0D,EAApB,+BAA2B,KAE1Dy1D,EAF+B,+BAAAn5D,EAAA,MAEd,WAAOyJ,GAAP,uBAAAzJ,EAAA,6DACbo5D,EAAO,IAAIp1D,IAAYyF,GACvB03B,EAFa,OAEAz9B,QAFA,IAEAA,IAAQ01D,EAAK7vC,YAFb,SAGKtpB,IAAUjC,IAAV,6BAAoCo7D,EAAKj1D,KAAzC,YAAiDg9B,IAHtD,UAGbhd,EAHa,OAInB1a,EAAQzH,aAAe,KACvByH,EAAQrH,WAAa,OACjB+hB,EAAU/sB,OAAS,GANJ,wBAOT+qB,EAA2B,UAAnB1Y,EAAQtH,OAAqB,UAAY,cAPxC,UAQUlC,IAAUjC,IAAI,yBAA0B,CAAEuJ,YAAa6xD,EAAKj1D,KAAMge,MAAOA,EAAOze,KAAMy9B,IARhG,QAQT/+B,EARS,OASfqH,EAAQzH,aAAemiB,EAAU7Z,MAAK,SAAAla,GAAC,MAAuC,aAApCA,EAAE6xB,gBAAgBjyB,iBAC5DyZ,EAAQrH,WAAaA,EAVN,eAYnBqH,EAAQ0a,UAAYA,EAZD,kBAcZ1a,GAdY,4CAFc,+DAkBHpB,QAAQC,IAAInD,EAAY9L,KAAI,SAAA+L,GAAC,OAAI+zD,EAAe/zD,OAlB7C,cAkB/Bi0D,EAlB+B,yBAmB9BA,GAnB8B,2CAAH,sDAsBzBC,EAAsB,SAACn0D,GAAoC,IAAvBo0D,EAAsB,uDAAX,OACxD,OAAOp0D,EAAY9L,KAAI,SAAAoQ,GACnB,IAAI+vD,EAAa/vD,EAAQ8vD,GAIzB,YAHyB96D,GAArBgL,EAAQ8vD,KACRC,EAAa/vD,EAAO,MAEjBxJ,IAAU41D,qBAAqB2D,EAAY/vD,EAAQ/F,MAAMlT,KAAzD,+BAAAwP,EAAA,MAA8D,WAAMy5D,GAAN,eAAAz5D,EAAA,yDAE5D5G,MAAMkgC,QAAQmgC,IAA8BA,EAAyBriE,OAFT,uBAG7DoE,QAAQwiB,IAAI,uCAHiD,6CAKtDvU,GALsD,IAMzD/I,OAAQ+3D,IAAOC,YAN0C,cASjEl9D,QAAQwiB,IAAI,2CACNrJ,EAAsB8kD,EAAyB,GAVY,kBAW1Dx0D,EAAqBwE,EAASkL,IAX4B,2CAA9D,uDAaF+kD,OAAM,kBAAMjwD,SASZoD,EAAyB,SAACpD,EAASC,GAC5C,IAAIhG,EAGAoQ,EAFAC,EAAqB,EACrBwvC,EAAQ,GAEZ75C,EAAOu4B,SAAQ,SAAA03B,GAAuB,IAC1B9uD,EAAiC8uD,EAAjC9uD,KAAME,EAA2B4uD,EAA3B5uD,iBAAkBxF,EAASo0D,EAATp0D,KAChCwO,GAAsBhJ,EACtBrH,EAAO6B,EACPg+C,EAAMhhD,KAAKsI,MAGfiJ,EAAsB,UAAMyvC,EAAM1qD,KAAK,KAAjB,YAAyB6K,GAG/C,IAGMY,EAHkB4jD,IAAMx+C,EAAQ,oBACdw+C,IAAMx+C,EAAQ,mBAEN,EAGhC,OAAO,2BACAD,GADP,IAEIgK,WAAW,2BACJhK,EAAQgK,YADL,IAENnP,YACAi/C,QACAxvC,qBACAD,yBACAJ,oBAAqBhK,OAKpBkwD,EAA2B,SAACz0D,GAAoC,IAAvBo0D,EAAsB,uDAAX,OAC7D,OAAOp0D,EAAY9L,KAAI,SAAAoQ,GAEnB,IAAI+vD,EAAa/vD,EAAQ8vD,GAIzB,YAHyB96D,GAArBgL,EAAQ8vD,KACRC,EAAa/vD,EAAO,MAEjBxJ,IAAU0rD,0BAA0B6N,EAAY/vD,EAAQ/F,MAC1DlT,MAAK,SAAAkjB,GAAmB,OAAI7G,EAAuBpD,EAASiK,MAC5DgmD,OAAM,kBAAMjwD,SAelB,IAmBM+3B,EAAmB,uCAAG,WAAOr9B,GAAP,mBAAAnE,EAAA,yDAC1BmE,EAD0B,yCAEpB,MAFoB,gCAMNlE,IAAUmI,WAAWjE,GANf,UAMrBhE,EANqB,OAOrB62D,EAAgB72D,EAAOmF,cAPF,yCASA,MATA,YAWrB5B,EAAOuzD,IAAMD,EAAe,QAAQzxD,MAXf,wBAcvB/J,QAAQwiB,IAAI,iBAAkBta,GAdP,kBAehBA,GAfgB,iCAkBpB,MAlBoB,yCAqB3BlI,QAAQuC,MAAR,MArB2B,kBAsBpB,MAtBoB,0DAAH,uD,gHC5VnB8kD,EAAb,WAMI,WAAYrzD,GAAO,oBACfC,KAAKE,MAAQH,EAPrB,0CAcI,WACI,OAAqB,MAAdC,KAAKE,QAfpB,gBAqBI,WACI,OAAOF,KAAKE,MAAM4V,OAtB1B,uBA4BI,WACI,OAAO9V,KAAKE,MAAMo1D,cA7B1B,iBAoCI,WAAY,IAAD,EACP,iBAAOt1D,KAAKE,MAAMma,aAAlB,QAA2B,KArCnC,sBA8CI,SAAS/E,GAA2B,IAAhBxc,EAAe,uDAAR,OACvB,GAAkB,MAAdkH,KAAKE,MACL,OAAO,KACX,GAA4B,MAAvBF,KAAKE,MAAM2nE,SACZ,OAAO,KAEX,IAN+B,EAMzBuC,EAAc90D,EAAU2c,cANC,cAQHjyB,KAAKE,MAAM2nE,UARR,IAQ/B,2BAAiD,CAAC,IAAvCwC,EAAsC,QACzCC,EAAoBD,EAAcx3D,KAAKof,cAC3C,IAAIq4C,IAAsBF,GACI,OAArBE,GAA8C,YAAhBF,GACT,WAArBE,GAAkD,QAAhBF,IAGvCC,EAAcjvD,KAAK6W,gBAAkBn5B,EAAKm5B,cAG9C,OAAO,IAAIs4C,EAAaF,EAAerqE,KAAKiU,OAlBjB,8BAoB/B,OAAO,OAlEf,qBAuIM,SAAQqB,GAA2D,IAAhDxc,EAA+C,uDAAxC,OAAQoW,EAAgC,uDAAvB,uBACnCs7D,EAAQxqE,KAAK42D,SAASthD,EAAWxc,GACvC,OAAY,MAAR0xE,EACO,KAEJ17D,IAAO07D,EAAKtqE,MAAMqB,MAAM2N,OAAOA,KA5I9C,8BAwFI,SAAiBu7D,GACb,IAAIC,EAAM1qE,KAAKE,MAAMyqE,eACrB,IAAK,IAAM7gE,KAAK4gE,EACZ,GAAGA,EAAI5gE,GAAG3J,MAAQsqE,EACd,OAAOC,EAAI5gE,GAAGkpB,MAGtB,OAAO,OA/Ff,sBAsGI,WAGI,OAAOhzB,KAAK42D,SAAS,YAAa,SAAW52D,KAAK42D,SAAS,WAzGnE,oBAiHI,WACI,OAAO52D,KAAK42D,SAAS,SAlH7B,qBAyHI,WACI,OAAuB,MAAnB52D,KAAKmV,YAGFnV,KAAKmV,WAAWC,WA7H/B,yBAgJI,WAA2B,IAAftc,EAAc,uDAAP,OACf,OAAOkH,KAAK42D,SAAS,MAAO99D,KAjJpC,gCAwJI,WAAkC,IAAfA,EAAc,uDAAP,OACtB,IAAKkH,KAAKuuD,SACN,MAAO,CACHz1D,KAAMA,EACN64D,SAAU,MAGlB,IAAIiZ,EAAe5qE,KAAK6qE,YAAY/xE,GACpC,OAAK8xE,EAME,CACH9xE,KAAMA,EAAO,IAAM8xE,EAAa32D,KAChC09C,SAAUiZ,EAAahxD,aAPhB,CACH9gB,KAAMA,EACN64D,SAAU,UAnK1B,KAgLO4Y,E,WAOH,WAAYxqE,EAAMkU,GAAM,oBACpBjU,KAAKE,MAAQH,EACbC,KAAK2oB,MAAQ1U,E,6CAOjB,WACI,OAAOnF,IAAO9O,KAAKE,MAAMqB,MAAM2N,OAAO,kB,gBAM1C,WACI,OAAO,IAAI3N,KAAKvB,KAAKE,MAAMqB,Q,gBAM/B,WACI,OAAOvB,KAAKE,MAAMkb,O,gBAMtB,WACI,IAAM0vD,EAAc9qE,KAAKlH,KAAKm5B,cAC9B,MAAmB,QAAf64C,GAAwC,QAAfA,GAAwC,UAAfA,GAA4BA,EAG3E9qE,KAAK2oB,MAAQ,EAFT3oB,KAAK2oB,Q,oBASpB,WACI,IAAI9mB,EAAMN,KAAKM,MACf,OAAO7B,KAAKiP,MAAQpN,M,KAMbuxD,O,+HC9OFhxD,EAAO,SAAC,GAAD,IAAG0K,EAAH,EAAGA,QAASiE,EAAZ,EAAYA,SAAZ,8CAA2B,WAAOhB,GAAP,SAAAQ,EAAA,sDAE7CR,EAAS,CACPuB,KAAM,OACNy5D,QAAS,CACPj+D,UACAiE,cANyC,2CAA3B,uDAWPqxD,EAAQ,yDAAM,WAAOryD,GAAP,SAAAQ,EAAA,sDACzBR,EAAS,CACPuB,KAAM,UAFiB,2CAAN,wD,iECFN05D,MAPf,YAAsD,IAAhCx+D,EAA+B,EAA/BA,MAAO7T,EAAwB,EAAxBA,YAAgByO,EAAQ,uCAEnD,OACE,gDAAQrC,UAAU,SAASyH,MAAOA,EAAOqD,aAAYlX,GAAiByO,GAAtE,aAA8EoF,MCD5Ey+D,EAAa,SAAC7jE,GAAD,OAAW,cAAC,EAAD,aAAQqI,QAAQ,QAAWrI,KACnD8jE,EAAc,SAAC9jE,GAAD,OAAW,cAAC,EAAD,eAAYA,KACrC+jE,EAAiB,SAAC/jE,GAAD,OAAW,cAAC,EAAD,aAAQqI,QAAQ,YAAerI,KAC3DgkE,EAAc,SAAChkE,GAAD,OAAW,cAAC,EAAD,eAAYA,KAErCikE,EAAiB,CACrBC,MAAO,QACPC,QAAS,UACTC,KAAM,OACNC,MAAO,SA0BMC,IAvBI,SAAC,GAAkD,IAAD,IAA/Cj8D,eAA+C,MAArC47D,EAAeC,MAAsB,EAAZlkE,EAAY,2BACnE,OAAQqI,GACN,KAAK47D,EAAeE,QAClB,OAAO,cAAC,EAAD,eAAoBnkE,IAC7B,KAAKikE,EAAeC,MAClB,OAAO,cAAC,EAAD,eAAiBlkE,IAC1B,KAAKikE,EAAeG,KAClB,OAAO,cAAC,EAAD,eAAgBpkE,IACzB,KAAKikE,EAAeI,MAClB,OAAO,cAAC,EAAD,eAAiBrkE,IAC1B,QACE,MAAM,IAAImF,MAAJ,gDACqCkD,EADrC,4BACgEjP,OAAOC,OACzE4qE,GACAjiE,KAAK,W,8wBC5BTuiE,EAAmB,CACvBz1D,WAAW,EACXjC,KAAM,KACNoC,iBAAiB,EACjBgD,OAAQ,GACRuyD,0BAA0B,eACrBnyE,IAAkBs8B,QAAO,SAAC81C,EAAKC,GAEhC,OADAD,EAAKC,GAAsB,GACpBD,IACP,M,4DCgBOE,G,mBAAkB,CAC7BC,aAAc,eACdC,wBAAyB,0BACzBC,mBAAoB,qBACpBC,gCAAiC,kCACjCC,mCAAoC,uCAmBzBC,EAAuB,SAACn2D,GAAD,8CAAe,WAAOnG,GAAP,SAAAQ,EAAA,sDACjDR,EAAS,CACPuB,KAAMy6D,EAAgBE,wBACtB/1D,cAH+C,2CAAf,uDAOvBo2D,EAAc,SAAC,GAAD,IAAG5zE,EAAH,EAAGA,KAAM2S,EAAT,EAASA,MAAT,8CAAqB,WAAO0E,GAAP,SAAAQ,EAAA,sDAC9CR,EAAS,CACPuB,KAAMy6D,EAAgBC,aACtBr7C,MAAO,CACLj4B,OACA2S,WAL0C,2CAArB,uDAUdV,EAA8B,SAAC,GAAD,IAAGjS,EAAH,EAAGA,KAAMoL,EAAT,EAASA,GAAT,8CAAkB,WAC3DiM,GAD2D,SAAAQ,EAAA,sDAG3DR,EAAS,CACPuB,KAAMy6D,EAAgBI,gCACtBzzE,OACAoL,OANyD,2CAAlB,uDAU9B0pC,EAAiC,yDAAM,WAAOz9B,GAAP,SAAAQ,EAAA,sDAClDR,EAAS,CACPuB,KAAMy6D,EAAgBK,qCAF0B,2CAAN,uDAMjCG,EAAsB,uCAAG,8CAAAh8D,EAAA,sDAKpC,IAJM7N,EAAQmiE,EAAMkE,WACdyD,EAAchsE,OAAOy2B,QAAQv0B,EAAMwE,KAAK0kE,2BAE1Ca,EAAW,GACN3iE,EAAI,EAAGA,EAAI0iE,EAAY7kE,OAAQmC,IAEtC,IAF4C,EAAD,YACR0iE,EAAY1iE,GADJ,GACpChK,EADoC,KAC1B2L,EAD0B,KAElC8pB,EAAI,EAAGA,EAAI9pB,EAAe9D,OAAQ4tB,IACnCzxB,EAAK2H,EAAe8pB,GACpBvD,EAFwC,2BAGzC5lB,IAAesgE,gBAAgB5sE,IAHU,IAI5CmhB,GAAInd,IAENiI,QAAQwiB,IAAI,iDAAkDyD,GAC9Dy6C,EAAS35D,KAAKtC,IAAUgP,OAAV,UAA4BwS,IAdV,gBAiB9BpZ,QAAQC,IAAI4zD,GAjBkB,2CAAH,qDAoBtBj2D,EAAmB,SAACsN,GAAD,IAAY7P,EAAZ,uDAAmB,KAAnB,8CAA4B,WAAOlE,GAAP,yBAAAQ,EAAA,6DAC1DR,EAAS,CACPuB,KAAMy6D,EAAgBE,wBACtB/1D,WAAW,IAGbnK,QAAQwiB,IAAI,qCAAuCta,GAE/ClU,EAAO,CACT,sBAAuB+jB,EAAUla,KAAI,SAAC9J,GAAD,OACnCsM,IAAeC,eAAevM,MAEhC,cAAgBmU,GAEdA,IACFlU,EAAO,CACL,sBAAuB+jB,EAAUla,KAAI,SAAC9J,GAAD,OACnCsM,IAAeC,eAAevM,QAjBsB,SAsBtC0Q,IAAUjC,IAAI,UAAWxO,GAtBa,OA2B1D,IAAS4wB,KALLiE,EAtBsD,OAwBpD+3C,EAAcvgE,IAAewgE,iBAAiBh4C,GAI9CjE,IAAU7jC,IAAO8I,iBACjB+6B,IAAU7jC,IAAO6I,eACjBg7B,IAAU7jC,IAAO+I,oBAEnB82E,EAAYh8C,GAAO/mB,KAAI,SAACq0C,GACnBA,EAASnC,SAASzwC,MAEnB4yC,EAAS4uB,iBAAkB,EAG3B5uB,EAAS4uB,iBAAkB,KAtCuB,OA4CtDvgB,EAAeqgB,EAAY7/E,IAAOkH,gBAClBs4D,EAAa3kD,OAAS,IAClC0kD,EAAkBC,EAAa7hD,QAAO,SAAAqiE,GAAE,aAA2B,QAAvB,UAAAA,EAAG37C,gBAAH,eAAa9lB,UAC/DihD,EAAeA,EAAa7hD,QAAO,SAAAqiE,GAAE,aAA2B,QAAvB,UAAAA,EAAG37C,gBAAH,eAAa9lB,UAElDghD,GAAmBA,EAAgB1kD,OAAS,IAC9CglE,EAAY7/E,IAAOiH,iBAAmBs4D,EACtCsgB,EAAY7/E,IAAOkH,cAAgBs4D,IAIvCv8C,EAAS,CACPuB,KAAMy6D,EAAgBG,mBACtB7yD,OAAQszD,IAGV58D,EAAS,CACPuB,KAAMy6D,EAAgBE,wBACtB/1D,WAAW,IA9D6C,kBAgEnD0e,GAhEmD,4CAA5B,uDAoE1Bm4C,EAA+B,uCAAG,WACtC/6C,EACAg7C,GAFsC,iBAAAz8D,EAAA,yDAIhCsxC,EACJmrB,GACAA,EAAuB5vE,IAA0BD,OAC7C2G,EAAKkuB,EAAO50B,IAA0B1D,IAEvCs4B,EAAO1zB,aAAee,IAAoBf,YAAc0zB,EAAO1zB,aAAeiB,IAAkBjB,aAAeujD,EAT9E,gCAU9BrxC,IAAU81D,wBAAwB,CACtCxiE,KACA+9C,OACAvhD,YAAa0xB,EAAOvyB,YACpBwU,KAAM+d,EAAOlc,OAdqB,2CAAH,wDAmB/Bm3D,EAAiB,uCAAG,WACxBC,GADwB,2EAAA38D,EAAA,yDAExB48D,EAFwB,+BAEX,GACblgC,EAHwB,+BAGX,GACbh5B,EAJwB,oCAIjBjF,EAMDma,EAAU,IAIZgkD,EAAWxlE,OAdS,wBAelBitB,EAAU,GACdu4C,EAAW36B,SAAQ,SAACvyC,GAElB,GAAIO,OAAOmpC,KAAKujC,GAAgBthE,SAAS3L,GAAY,CAAC,IAAD,EACjCO,OAAOy2B,QAAQi2C,GAAgBxsE,MAC/C,mCAAEZ,EAAF,iBAAmBA,IAAaG,KADzBoL,EAD0C,oBAK7C2mB,EAAS5lB,IAAeghE,6BAC5BntE,EACAoL,EACA,CAAE4I,SAEA+d,IACF+6C,EAAgC/6C,EAAQ3mB,GACxCupB,EAAQ9hB,KAAKkf,QA9BG,KAmCtB7I,EAnCsB,UAmCH3Y,IAAUo+B,IAAI,UAAWha,GAnCtB,yBAmCd9hB,KAnCc,2BAuCpBu6D,EAA2B,KAG/Bz4C,EAAUp0B,OAAOy2B,QAAQi2C,GAAgBn3C,QACvC,SAACu3C,EAAD,GAAmC,IAAD,mBAArBxtE,EAAqB,KAAXuL,EAAW,KAEhC,GAAI4hC,EAAWrhC,SAAS9L,GAAW,OAAOwtE,EAG1C,GAAI3jE,MAAMkgC,QAAQx+B,GAChB,IAAK,IAAInC,EAAQ,EAAGA,EAAQmC,EAAM1D,OAAQuB,IAAS,CACjD,IAAMqkE,EAAiBliE,EAAMnC,GAC7B,GAAKqkE,EAAL,CACA,IAAMzpE,EAAE,OAAGypE,QAAH,IAAGA,OAAH,EAAGA,EAAgBtsD,GAErBusD,EAAsB,kBAAP1pE,EAGrB,GAAI0pE,EAAO,CAELA,IAAOH,EAAyBvpE,GAAM,GAG1C,IAAMkuB,EAAS5lB,IAAeghE,6BAC5BttE,EACAytE,EACA,CAAEzpE,OAEJipE,EAAgC/6C,EAAQu7C,GACxCD,EAAUx6D,KAAKkf,SAGd,CACL,IAAMA,EAAS5lB,IAAeghE,6BAC5BttE,EACAuL,EACA,CAAE4I,SAGA+d,IAEF+6C,EAAgC/6C,EAAQ3mB,GACxCiiE,EAAUx6D,KAAKkf,IAInB,OAAOs7C,IAET,KAEU3lE,OAzFY,kCA0FD6I,IAAUo+B,IAAI,UAAWha,GA1FxB,QA0FhBlkB,EA1FgB,OA2FtByY,EAAQrW,KAAKpC,GA3FS,QA8FpB+7D,EAAW,GAGN3iE,EAAI,EAjGW,aAiGRA,EAAIrQ,IAAkBkO,QAjGd,oBAkGhBmkE,EAAqBryE,IAAkBqQ,GACvC2jE,EAAmBP,EAAepB,GAnGlB,wDAuGbv2C,EAAI,EAvGS,aAuGNA,EAAIk4C,EAAiB9lE,QAvGf,oBAwGdwD,EAAkBsiE,EAAiBl4C,GAxGrB,2DA0GdzxB,EAAKqH,EAAgB8V,GACC,kBAAPnd,EA3GD,iBA6GZkuB,EAAS5lB,IAAeghE,6BAC5BtB,EACA3gE,EACA,CAAE8I,SAhHc,KAkHV63D,EAlHU,cAmHXh/E,IAAO6G,YAnHI,UAsHX7G,IAAO6I,eAtHI,OAuHX7I,IAAO+I,oBAvHI,OAwHX/I,IAAO8I,gBAxHI,UA4HX9I,IAAOkH,cA5HI,OA6HXlH,IAAOiH,gBA7HI,UAoIXjH,IAAOmH,QApII,UAuIXnH,IAAO8G,UAvII,UA0IX9G,IAAOwI,SA1II,2BAoHdm3E,EAAS35D,KAAKtC,IAAU4d,KAAV,qBAAqC4D,IApHrC,yCA0Hdy6C,EA1Hc,UA0HMj8D,IAAU4d,KAAV,mBAAmC4D,GA1HzC,gCA0HLlf,KA1HK,mDA8HsB,kBAAzBkf,EAAO07C,eAChB17C,EAAO07C,aAAe,MAGxBjB,EAAS35D,KAAKtC,IAAU4d,KAAV,iBAAiC4D,IAlIjC,oCAqIdy6C,EAAS35D,KAAKtC,IAAU4d,KAAV,iBAAiC4D,IArIjC,oCAwIdy6C,EAAS35D,KAAKtC,IAAU4d,KAAV,eAA+B4D,IAxI/B,oCA2Idy6C,EAAS35D,KAAKtC,IAAU4d,KAAV,gBAAgC4D,IA3IhC,iEAuGuBuD,IAvGvB,wBAiGsBzrB,IAjGtB,yCAmJlB8O,QAAQC,IAAI4zD,GAnJM,QAsJlB/pE,EAAQmiE,EAAMkE,WACdyD,EAAchsE,OAAOy2B,QAAQv0B,EAAMwE,KAAK0kE,2BAE9Ca,EAAW,GAEF3iE,EAAI,EA3JW,aA2JRA,EAAI0iE,EAAY7kE,QA3JR,+BA4Ja6kE,EAAY1iE,GA5JzB,GA4JfhK,EA5Je,KA4JL2L,EA5JK,KA6Jb8pB,EAAI,EA7JS,aA6JNA,EAAI9pB,EAAe9D,QA7Jb,oBA8Jd7D,EAAK2H,EAAe8pB,IAEtB83C,EAAyBvpE,GAhKT,wDAiKdkuB,EAjKc,2BAkKf5lB,IAAesgE,gBAAgB5sE,IAlKhB,IAmKlBmhB,GAAInd,EACJgS,KAAM7B,IAERlI,QAAQwiB,IAAI,4CAA6CyD,GACzDy6C,EAAS35D,KAAKtC,IAAUgP,OAAV,UAA4BwS,IAvKtB,QA6JqBuD,IA7JrB,wBA2JgBzrB,IA3JhB,yCA0KlB8O,QAAQC,IAAI4zD,GA1KM,iCA4KjBtjD,GA5KiB,4CAAH,sDA+KVqS,EAAa,SAAC0xC,GAAD,2BAAoBS,EAApB,iCAAoBA,EAApB,gEAA6B,WAAO59D,GAAP,SAAAQ,EAAA,sEAExC08D,EAAiB,WAAjB,GAAkBC,GAAlB,OAAqCS,IAFG,mFAA7B,uDAKbC,EAAmB,SAACv0D,GAAD,8CAAY,WAAOtJ,GAAP,SAAAQ,EAAA,sDAC1CR,EAAS,CACPuB,KAAMy6D,EAAgBG,mBACtB7yD,WAHwC,2CAAZ,uDCnX1Bw0D,EAAoB,CACxBzrE,MAAM,EACN0K,QAAS,KACTiE,SAAU,UACVyxD,WAAY,SACZD,SAAU,UCEGuL,cAAgB,CAC7BnrE,KCLyB,WAAuC,IAAtCD,EAAqC,uDAA7BqrE,IAAkBrL,EAAW,uCAC7D,OAAQA,EAAOpxD,MAEb,KAAK08D,IAAgBC,MAInB,OAFAC,aAAaC,QAAQ,UAAUzL,EAAO0L,SAE/B,2BACF1rE,GADL,IAEEF,YAAY,EACZ4rE,QAAS1L,EAAO0L,UAGpB,KAAKJ,IAAgBK,OAGnB,OADAH,aAAaI,WAAW,WACjB,2BACF5rE,GADL,IAEEF,YAAY,EACZ4rE,QAAS,KAGb,KAAKJ,IAAgBO,cAArB,IACUt9D,EAAWyxD,EAAXzxD,OAER,OAAO,2BACFvO,GADL,IAEE+O,UAAWR,IAGf,QACE,OAAO,eAAIvO,KDzBjBwE,KELyB,WAAuC,IAAtCxE,EAAqC,uDAA7BipE,EAAkBjJ,EAAW,uCAC/D,OAAQA,EAAOpxD,MACb,KAAKy6D,EAAgBE,wBAArB,IACU/1D,EAAcwsD,EAAdxsD,UACR,OAAO,2BACFxT,GADL,IAEEwT,cAEJ,KAAK61D,EAAgBK,mCACnB,OAAO,2BACF1pE,GADL,IAEEkpE,0BAA0B,eACrBnyE,IAAkBs8B,QAAO,SAAC81C,EAAKC,GAEhC,OADAD,EAAKC,GAAsB,GACpBD,IACP,OAGR,KAAKE,EAAgBI,gCACnB,OAAQ,WAAK,IACHzzE,EAAcgqE,EAAdhqE,KAAOoL,EAAO4+D,EAAP5+D,GACf,OAAGpL,GAAQoL,GAAM6F,MAAMkgC,QAAQnnC,EAAMkpE,0BAA0BlzE,MAAWgK,EAAMkpE,0BAA0BlzE,GAAMkT,SAAS9H,GAChH,2BACFpB,GADL,IAEEkpE,0BAA0B,2BACrBlpE,EAAMkpE,2BADc,kBAEtBlzE,EAFsB,sBAEXgK,EAAMkpE,0BAA0BlzE,IAFrB,CAE4BoL,QAKhDpB,EAZH,GAeV,KAAKqpE,EAAgBC,aACnB,OAAQ,WACN,IAAMr7C,EAAQ+xC,EAAO/xC,MACbj4B,EAAgBi4B,EAAhBj4B,KAAM2S,EAAUslB,EAAVtlB,MAEd,OAAI3S,EACK,2BACFgK,GADL,IAEE2W,OAAO,2BACF3W,EAAM2W,QADL,kBAEH3gB,EAFG,2BAGCgK,EAAM2W,OAAO3gB,IAHd,IAIF2S,cAMC3I,EAjBH,GAoBV,KAAKqpE,EAAgBG,mBACnB,IAAM7yD,EAASqpD,EAAOrpD,OACtB,OAAO,2BACF3W,GADL,IAEE2W,WAGJ,QACE,OAAO,eAAK3W,KFzDhBy/D,MGR0B,WAAwC,IAAvCz/D,EAAsC,uDAA9BmrE,EAAmBnL,EAAW,uCACjE,OAAQA,EAAOpxD,MACb,IAAK,OAAL,MACgCoxD,EAAOqI,QAA7Bj+D,EADV,EACUA,QAASiE,EADnB,EACmBA,SACjB,OAAO,2BACFrO,GADL,IAEEoK,UACAiE,WACA3O,MAAM,IAEV,IAAK,QACH,OAAO,2BACFM,GADL,IAEEN,MAAM,IAGV,QACE,OAAO,eACFM,O,SCRL8rE,EAAoBtoE,OAAOuoE,sCAAwCC,IAEnE7J,EAAQ8J,YACZC,EACAJ,EACEK,YACIC,OAMKpkE,EAAUqkE,YAAmBC,EAAiBnK,EAAM90D,UAElD80D,S,6DCrBTtwD,E,WAMF,WAAYxU,GAAM,oBACdC,KAAK2uC,UAAU5uC,G,0CAOnB,WACI,OAAqB,MAAdC,KAAKE,Q,gBAGhB,WAAW,IAAD,EACN,iBAAOF,KAAKE,aAAZ,aAAO,EAAYC,O,gBAEvB,WAAW,IAAD,EACN,iBAAOH,KAAKE,aAAZ,aAAO,EAAY2S,O,uBAGvB,WAAkB,IAAD,EACb,iBAAO7S,KAAKE,aAAZ,aAAO,EAAY0S,c,wBAGvB,WAAmB,IAAD,EACd,iBAAO5S,KAAKE,aAAZ,aAAO,EAAY+uE,sB,uBAMvB,SAAUlvE,GACNC,KAAKE,MAAQH,I,uBAQjB,WAAkB,IAAD,EACb,iBAAOC,KAAK+pD,qBAAZ,aAAO,EAAoB91C,O,wBAO/B,WACI,IAAKjU,KAAKE,MAAO,OAAO,KACxB,IAAKF,KAAKE,MAAM2V,cAAe,OAAO,KACtC,GAAuC,GAAnC7V,KAAKE,MAAM2V,cAAclO,OAAa,OAAO,KAEjD,IACMunE,EADiBlvE,KAAKE,MAAM2V,cAAcE,MAAK,SAACxF,EAAEoL,GAAH,OAASA,EAAE7F,KAAOvF,EAAEuF,QACjC,GACxC,OAAO,IAAIs9C,IAAc8b,K,mBAO7B,WACI,OAAKlvE,KAAKE,OACLF,KAAKE,MAAM2V,cAET7V,KAAKE,MAAM2V,cAAcjM,KAAI,SAAA8O,GAAC,OAAI,IAAI06C,IAAc16C,MAHnC,IAAI/O,Q,uBAahC,SAAUsK,GACN,OAAOjU,KAAKmvE,QAAQzuE,MAAK,SAAAgY,GAAC,OAAIA,EAAEzE,OAASA,O,yBAQ7C,WACI,OAAOjU,KAAKkxC,e,sBAQhB,WAAiB,IAAD,MACZ,2BAAOlxC,KAAK+pD,qBAAZ,aAAO,EAAoB6M,SAAS,oBAApC,kBAAoD52D,KAAK+pD,qBAAzD,aAAoD,EAAoB6M,SAAS,W,qBAOrF,WACI,OAAuB,MAAnB52D,KAAKmV,YAEFnV,KAAKmV,WAAWC,a,KAMhBb,O,gCCxHf,kCAGO,IAAMsX,EAAQ,CACnBujD,aAAc,MACdtjD,eAAgB,MAChBE,OAAQ,KACRD,WAAY,KACZE,eAAgB,SAChBojD,MAAO,QACPnjD,KAAM,OACNojD,IAAK,MACLlX,KAAM,S,mJCuBFmX,EAA8B,SAAC95C,GACjC,OAAOj1B,OAAOy2B,QAAQxB,GAAKM,QAAO,SAACy5C,EAAD,GAA2B,IAAD,mBAAhBjgE,EAAgB,KAAXlE,EAAW,KAGxD,GAAIkE,EAAIyI,WAAW,KAEf,OAAOw3D,EAEX,IAAI1kD,EAAWzf,EASf,MARwB,kBAAbyf,IAEPA,EAAQ,OAAGzf,QAAH,IAAGA,OAAH,EAAGA,EAAOA,OAElBkE,IAAQvU,IAAuBK,QAC/ByvB,GAAYA,GAAY,IAAI4C,QAAQ,eAAgB,KAExD8hD,EAAOjgE,GAAOub,EACP0kD,IACR,KAGcpjE,E,mGAEjB,SAAsBtM,GAAW,IAAD,EAC5B,OAAO,UAAAN,IAAmBM,UAAnB,eAA8BL,cAAeK,I,qCAGxD,SAA+BA,GAC3B,OAAOsM,EAAeC,eAAevM,GAAUS,gB,8BAGnD,SAAwBq0B,GACpB,OAAOA,EAAQmB,QAAO,SAAC05C,EAAWC,GAE9B,IACI5vE,EADE6vE,EAAU,OAAGD,QAAH,IAAGA,OAAH,EAAGA,EAAYpxE,WAG/B,GAAIqxE,IAAe1wE,IAAkBX,WACjC,OAAQoxE,EAAW1zE,IAAwBjB,OACvC,KAAKiD,IAAkBE,OACnB4B,EAAWhT,IAAO8I,gBAClB,MACJ,KAAKoI,IAAkBC,KACnB6B,EAAWhT,IAAO6I,cAClB,MACJ,KAAKqI,IAAkBG,UACnB2B,EAAWhT,IAAO+I,wBAMzB,GAAI85E,IAAetwE,IAAoBf,WAAY,CAEpD,IAAIsxE,EAAE,OAAGF,QAAH,IAAGA,OAAH,EAAGA,EAAYjwE,YAAYc,cAEjC,OAAQmvE,EAAWtyE,IAA0BG,gBACzC,KAAKK,IAAwBE,KACzB,OAAQ8xE,GACJ,KAAKxjE,EAAeyjE,wBAAwB/iF,IAAOqJ,0BAC/C2J,EAAWhT,IAAOqJ,yBAClB,MACJ,KAAKiW,EAAeyjE,wBAAwB/iF,IAAOwJ,+BAC/CwJ,EAAWhT,IAAOwJ,8BAClB,MACJ,KAAK8V,EAAeyjE,wBAAwB/iF,IAAO8J,yCAC/CkJ,EAAWhT,IAAO8J,wCAClB,MACJ,KAAKwV,EAAeyjE,wBAAwB/iF,IAAO0J,qCAC/CsJ,EAAWhT,IAAO0J,oCAClB,MACJ,KAAK4V,EAAeyjE,wBAAwB/iF,IAAO4J,sCAC/CoJ,EAAWhT,IAAO4J,qCAClB,MACJ,KAAK0V,EAAeyjE,wBAAwB/iF,IAAO2I,iBAC/CqK,EAAWhT,IAAO2I,gBAClB,MACJ,KAAK2W,EAAeyjE,wBAAwB/iF,IAAOoK,iCAC/C4I,EAAWhT,IAAOoK,gCAClB,MACJ,KAAKkV,EAAeyjE,wBAAwB/iF,IAAOsK,4BAC/C0I,EAAWhT,IAAOsK,2BAK1B,MACJ,KAAKwG,IAAwBG,UACzB,OAAQ6xE,GACJ,KAAKxjE,EAAeyjE,wBAAwB/iF,IAAOsJ,+BAC/C0J,EAAWhT,IAAOsJ,8BAClB,MACJ,KAAKgW,EAAeyjE,wBAAwB/iF,IAAO4I,sBAC/CoK,EAAWhT,IAAO4I,qBAK1B,MACJ,KAAKkI,IAAwBC,OACzB,OAAQ+xE,GACJ,KAAKxjE,EAAeyjE,wBAAwB/iF,IAAOoJ,6BAC/C4J,EAAWhT,IAAOoJ,4BAClB,MACJ,KAAKkW,EAAeyjE,wBAAwB/iF,IAAOuJ,kCAC/CyJ,EAAWhT,IAAOuJ,iCAClB,MACJ,KAAK+V,EAAeyjE,wBAAwB/iF,IAAO6J,4CAC/CmJ,EAAWhT,IAAO6J,2CAClB,MACJ,KAAKyV,EAAeyjE,wBAAwB/iF,IAAOyJ,wCAC/CuJ,EAAWhT,IAAOyJ,uCAClB,MACJ,KAAK6V,EAAeyjE,wBAAwB/iF,IAAO2J,yCAC/CqJ,EAAWhT,IAAO2J,wCAClB,MACJ,KAAK2V,EAAeyjE,wBAAwB/iF,IAAO0I,mBAC/CsK,EAAWhT,IAAO0I,kBAClB,MACJ,KAAK4W,EAAeyjE,wBAAwB/iF,IAAOqK,+BAC/C2I,EAAWhT,IAAOqK,8BAClB,MACJ,KAAKiV,EAAeyjE,wBAAwB/iF,IAAOmK,oCAC/C6I,EAAWhT,IAAOmK,0CAUjC,GAAI04E,IAAepwE,IAAkBjB,WAAY,CAClD,IAAIsxE,EAAE,OAAGF,QAAH,IAAGA,OAAH,EAAGA,EAAYjwE,YAAYc,cACjC,OAAQmvE,EAAW/xE,IAAwBJ,gBACvC,KAAKa,IAAsBN,KACvB,OAAQ8xE,GACJ,KAAKxjE,EAAeyjE,wBAAwB/iF,IAAOuK,0BAC/CyI,EAAWhT,IAAOuK,yBAClB,MACJ,QACIyI,GAAqB,OAAV4vE,QAAU,IAAVA,OAAA,EAAAA,EAAYjwE,aAAc,IAAMrB,IAAsBN,KAGzE,MACJ,KAAKM,IAAsBP,OACvB,OAAQ+xE,GACJ,KAAKxjE,EAAeyjE,wBAAwB/iF,IAAOwK,6BAC/CwI,EAAWhT,IAAOwK,4BAClB,MACJ,QACIwI,GAAqB,OAAV4vE,QAAU,IAAVA,OAAA,EAAAA,EAAYjwE,aAAc,IAAMrB,IAAsBP,cASjFiC,EAAWsM,EAAe0jE,YAAf,OAA2BJ,QAA3B,IAA2BA,OAA3B,EAA2BA,EAAYjwE,aAIjDK,IACDA,EAAQ,OAAG4vE,QAAH,IAAGA,OAAH,EAAGA,EAAYjwE,aAI3B,IAAI4L,EAAK,OAAGqkE,QAAH,IAAGA,OAAH,EAAGA,EAAYv8C,SAkBxB,GAfI,CAACrmC,IAAOI,WAAW0e,SAAS9L,KAC5BuL,EAAQyD,IAAOzD,GAAO6D,OAAO,eAI7B9C,EAAe2jE,cAAcjwE,KAActB,IAAiBF,YACvC,kBAAV+M,IACPA,EAAkB,UAAVA,GAQZ,CAACve,IAAO6G,YACP7G,IAAO+I,mBACP/I,IAAO6I,cACP7I,IAAO8I,gBACP9I,IAAOmH,QACPnH,IAAOkH,aACPlH,IAAO8G,UACP9G,IAAOwI,SACPxI,IAAOuJ,iCACPvJ,IAAOwJ,8BACPxJ,IAAO6J,2CACP7J,IAAO8J,wCACP9J,IAAO2J,wCACP3J,IAAO4J,qCACP5J,IAAOyJ,uCACPzJ,IAAO0J,oCACP1J,IAAOwK,4BACPxK,IAAOuK,yBACPvK,IAAOmK,mCACPnK,IAAOoK,iCACN0U,SAAS9L,GAAW,CACtB,IAAMgE,EAAE,OAAG4rE,QAAH,IAAGA,OAAH,EAAGA,EAAYzuD,GAClBtX,MAAMkgC,QAAQ4lC,EAAU3vE,MACzB2vE,EAAU3vE,GAAY,IAE1B,IAAIkyB,EAAS,CAAEluB,MACftD,OAAOy2B,QAAQy4C,GAAYl9B,SAAQ,YAAoC,IAAD,mBAAjCw9B,EAAiC,KAAfC,EAAe,KAC9D,CAACnxE,IAAiBD,MAAM9E,KAAM+E,IAAiBD,MAAM/E,MAAOgF,IAAiBD,MAAMhF,QAAQ+R,SAASokE,KACpGC,EAAYpyC,OAAOoyC,IAEvBj+C,EAAOg+C,GAAoB,CACvB3kE,MAAO4kE,MAGfR,EAAU3vE,GAAUgT,KAAKkf,OAGpB,CACLpzB,IAAiBN,WACjBQ,IAAiBR,WACjBgB,IAAoBhB,WACpBe,IAAoBf,WACpBU,IAAiBV,WACjBa,IAAoBb,WACpBiB,IAAkBjB,YACpBsN,SAAS+jE,IACFF,EAAU3vE,KACX2vE,EAAU3vE,GAAY,IAE1BU,OAAOy2B,QAAQy4C,GAAYl9B,SAAQ,YAA2B,IAAD,mBAAxB09B,EAAwB,KAAfD,EAAe,KACzDR,EAAU3vE,GAAUowE,GAAW,CAC3B7kE,MAAO4kE,OAKfR,EAAU3vE,GAAY,CAClBuL,SAIR,OAAOokE,IAER,M,yBAGP,SAAmBnvE,GAEf,IAAMoQ,EAASlQ,OAAOy2B,QAAQz3B,KACzBkB,MAAK,mCAAYyvE,GAAZ,mBAA2C,OAAZA,QAAY,IAAZA,OAAA,EAAAA,EAAc1wE,cAAe,IAAIc,iBAAmBD,GAAe,IAAIC,iBAChH,GAAImQ,EAEA,OAFQ,YACWA,EADX,Q,2BAMhB,SAAqB5Q,GACjB,IAAM6f,EAAWngB,IAAmBM,GACpC,cAAO6f,QAAP,IAAOA,OAAP,EAAOA,EAAUrhB,a,8BAerB,SAAwBwB,GAAW,IAAD,EAE9B,SADqB,UAACN,IAAmBM,UAApB,aAAC,EAA8BjB,S,2BAIxD,SAAqB42B,GACjB,MAAsB,kBAARA,GAAoBA,GAAOA,EAAIjpB,QAA+B,kBAAdipB,EAAIpqB,OAAsBoqB,EAAIpqB,S,0CAGhG,SAAoCvL,EAAUuL,GAA0C,IAAD,6DAAnB,CAAEvH,QAAIkL,GAAnBlL,EAAgC,EAAhCA,GAAImQ,EAA4B,EAA5BA,KAInD0L,EAAWngB,IAAmBM,GA4BlC,GAvBK6f,IACoB,kBAAVtU,IACPsU,EAAW,CACPrhB,WAAY,OACZmB,YAAaK,IAIA,mBAAVuL,GAAuBvL,EAASkY,WAAW,eAClD2H,EAAW,CACPrhB,WAAY,UACZmB,YAAaK,GAIK,kBAAVuL,GAAsBA,IAClCsU,EAAW,CACPrhB,WAAY,aACZmB,YAAaK,KAKpB6f,EAAL,CAKA,IAAMrhB,EAAU,UAAGqhB,SAAH,aAAG,EAAUrhB,WACzBmB,EAAW,UAAGkgB,SAAH,aAAG,EAAUlgB,YAMxB4L,IAAyC,IAAhCA,EAAM+kE,wBAChB3wE,EAAcA,EAAYiuB,QAAZ,WAAwBriB,EAAM8mB,cAAgB,KAK3D7zB,IAAeE,IAAiBF,YAAgC,mBAAV+M,GAAiC,OAAVA,IAE7EA,EAAiB,GAATA,GAAgC,GAATA,MAAyBsU,EAASlhB,YAAa,OAE9EH,IAAeE,IAAiBF,YAAgC,kBAAV+M,GAAgC,OAAVA,IAE5EA,EAAiB,QAATA,GAAkC,SAATA,MAA0BsU,EAASlhB,YAAa,OAEjFH,IAAeD,IAAcC,YAA+B,mBAAV+M,IAElDA,GAAkB,IAAVA,EAAkB,QAAU,QAEpC/M,IAAeK,IAAiBL,aAEhC+M,EAAQ2V,SAAS3V,IAGjB5L,IAAgBD,IAAmB1S,IAAOwC,KAAKmQ,cAC/C4L,GAASA,GAAS,IAAIu3B,MAAM,KAAKx5B,KAAK,KAEtC,CAACtc,IAAOK,WAAYL,IAAOQ,gBAAiBR,IAAOyE,2BAA4BzE,IAAOoF,6BAA6B0Z,SAAS9L,KAC5HuL,GAASA,GAAS,IAAIqiB,QAAQ,eAAgB,KAElD,IAAI2iD,EAA0B,CAC1Bl9C,SAAU9nB,EACV4V,GAAInd,EACJgS,KAAM7B,GAGV,GAAqB,kBAAV5I,GAAsBA,IAAUe,EAAekkE,cAAcjlE,GAGpEglE,EAAuB,aACnBpvD,GAAInd,GACDyrE,EAA4BlkE,SAGlC,GAAIe,EAAekkE,cAAcjlE,GAAQ,CAAC,IAAD,EAE1CglE,EAA0B,CACtBl9C,SAAQ,UAAE9nB,SAAF,aAAE,EAAOA,OAGzB,IAAMklE,EAAa,CACfjyE,aACAmB,cACAqW,KAAM7B,GAEJ+d,EAAM,2BACLu+C,GACAF,GAGP,OAAOr+C,EAtEHjmB,QAAQykE,KAAR,gCAAsC1wE,EAAtC,iF,kCAyER,gB,KAvXiBsM,EAwPVsgE,gBAAkB,SAAC5sE,GACtB,IAAM6f,EAAWngB,IAAmBM,GACpC,OAAK6f,EAIE,CACHrhB,WAJY,OAAGqhB,QAAH,IAAGA,OAAH,EAAGA,EAAUrhB,WAKzBmB,YAJa,OAAGkgB,QAAH,IAAGA,OAAH,EAAGA,EAAUlgB,aAFR,K,oDC/SxBgV,E,WAMF,WAAY1U,GAAO,oBACfC,KAAKE,MAAQH,E,6CAGjB,WAAkB,IAAD,EACb,iBAAOC,KAAKE,aAAZ,aAAO,EAAYmX,c,gBAGvB,WAAW,IAAD,EACN,iBAAOrX,KAAKE,aAAZ,aAAO,EAAY4V,O,qBAGvB,WAAgB,IAAD,EACX,iBAAO9V,KAAKE,aAAZ,aAAO,EAAYulB,Y,qBAOvB,WACI,OAAKzlB,KAAKE,Q,oBAQd,WACI,OAAkB,MAAdF,KAAKE,MACE,KAEJqB,KAAKI,MAAM3B,KAAKE,MAAMwlB,Y,kBAGjC,WAAa,IAAD,EACR,iBAAO1lB,KAAKE,aAAZ,aAAO,EAAYwS,S,4BAOvB,WACI,OAAO1S,KAAK2xD,SAAWpwD,KAAKM,Q,uBAMhC,WAAkB,IAAD,EACb,OAAmC,KAA5B,UAAA7B,KAAKE,aAAL,eAAYslB,e,qBAGvB,WACI,MAAuB,UAAhBxlB,KAAKilB,S,uBAGhB,WAAkB,IAAD,EACb,iBAAOjlB,KAAKE,aAAZ,aAAO,EAAYwc,qB,wBAGvB,WAAmB,IAAD,EACd,iBAAO1c,KAAKE,aAAZ,aAAO,EAAYyc,e,yBAGvB,WAAoB,IAAD,EACf,iBAAO3c,KAAKE,aAAZ,aAAO,EAAYipC,0B,8BAGvB,WAAyB,IAAD,EACpB,iBAAOnpC,KAAKE,aAAZ,aAAO,EAAYkpC,qB,sCAGvB,WAEI,MADe,CAAC,YAAa,WAAY,S,wBAI7C,WACI,MAA4B,UAArBppC,KAAK04D,c,qBAGhB,WACI,MAA4B,eAArB14D,KAAK04D,aAAqD,SAArB14D,KAAK04D,c,uBAMrD,WACI,MAAuB,UAAhB14D,KAAKilB,QAA2C,SAArBjlB,KAAK04D,gB,KAKhCjkD,O,2HClGXsvD,kjBAL0C0M,E,EAA5CC,2CACsBC,E,EAAtBC,qBACyBC,E,EAAzBC,wBACsCC,E,EAAtCC,qCACyCC,E,EAAzCC,wCAGIC,EAAW,CACfC,MAAO,CACLC,aAAcZ,EAEdtxC,YAAa4xC,EACbztC,eAAgB2tC,GAElBK,YAAa,CACXD,aAAc,CACZE,UAAU,WAAD,OAAaZ,EAAb,yBAAwCA,EAAxC,4BAAsEF,IAEjFtxC,YAAa,CACXoyC,UAAU,WAAD,OAAaZ,EAAb,yBAAwCA,EAAxC,4BAAsEI,IAEjFztC,eAAgB,CACdiuC,UAAU,WAAD,OAAaZ,EAAb,yBAAwCA,EAAxC,4BAAsEM,KAMnFO,gBAAgB,GAAD,OAAKb,EAAL,kBAUXc,EAAiB,CACrB9uE,KAAM,CACJ+uE,SAAUb,EAEVc,iBAAkB,CAACR,EAASK,kBAG9BI,MAAO,CACLC,cAAe,eACfC,wBAAwB,GAE1BC,OAAQ,CACNC,cAAe,CACbC,eAAgB,SAACl5E,EAAO+T,EAASolE,GAC/B,IAAIA,EAGJ,OAAQn5E,GACN,KAAKo5E,IAAc5lE,MAGnB,KAAK4lE,IAAcC,KAGnB,KAAKD,IAAcE,QAGnB,KAAKF,IAAcG,QAEjB,YAONC,EAAU,2BACXd,GADW,IAEd9uE,KAAK,2BACA8uE,EAAe9uE,MADhB,IAEF4uE,UAAWJ,EAASG,YAAYD,aAAaE,UAC7CiB,sBAAuBtsE,OAAOC,SAASssE,WAIrCC,EAAqB,2BACtBjB,GADsB,IAEzB9uE,KAAK,2BACA8uE,EAAe9uE,MADhB,IAEF4uE,UAAWJ,EAASG,YAAYnyC,YAAYoyC,UAC5CoB,YAAazsE,OAAOC,SAASssE,WAI3BG,EAAwB,2BACzBnB,GADyB,IAE5B9uE,KAAK,2BACA8uE,EAAe9uE,MADhB,IAEF4uE,UAAWJ,EAASG,YAAYhuC,eAAeiuC,UAC/CoB,YAAazsE,OAAOC,SAASssE,WAU3BI,EAAe,CACnBC,OAAQ,CAAC,SAAU,YAafC,EAAe,IAAIZ,IAA6BI,GAChDS,EAA0B,IAAIb,IAClCO,GAEIO,EAA6B,IAAId,IACrCS,GAGFG,EACGG,wBACAnyE,MAAK,SAACoyE,GAEDA,GACFzoE,IAAQ0qC,WAMX60B,OAAM,SAAC37D,GAENvC,QAAQuC,MAAMA,MAIlB,IAwBM8mC,EAAK,uCAAG,4BAAA7kC,EAAA,6DACZxE,QAAQwiB,IAAI,gBAAiBskD,GADjB,SAEME,EAAaK,cAAcP,GAFjC,cAENQ,EAFM,OAGZtnE,QAAQwiB,IAAI8kD,GAHA,kBAILA,GAJK,2CAAH,qDAoBL3N,EAAa,WACjB,IAAI0I,EASJ,OARA5tE,OAAOy2B,QAAQi3C,cAAc17B,SAAQ,YAAmB,IAAD,mBAAXnnC,GAAW,WACrD,IACE,IAAMioE,EAAc/qB,KAAK5mD,MAAM0J,GACkB,YAA7CioE,EAAYC,eAAehzE,gBAC7B6tE,EAAUkF,EAAYE,QAExB,MAAOv2C,QAEJmxC,GAGHqF,EAAc,SAACrF,GACnB,IAAIsF,EACEC,GAAYvF,GAAW,IAAIxrC,MAAM,KACvC,IAAK+wC,EAAShsE,SAAWgsE,EAAS,GAChC,OAAO,KAET,IACED,EAAenrB,KAAK5mD,MAAMiyE,EAAO5gE,KAAK2gE,EAAS,GAAI,UAAUnyE,YAC7D,MAAOy7B,IAGT,OAAOy2C,GAoCM,KACbt+B,QACA9xC,OA3Ea,WAEb,OADAoH,IAAQpH,SACDyvE,EAAac,eAAehB,IA0EnCiB,gBAPsB,WACtB,QAASpO,KAOTpwB,YAtCkB,WAClB,IAAM84B,EAAU1I,IACVgO,EAAeD,EAAYrF,GACjC,GAA4B,kBAAjBsF,GAA6BA,EACtC,OAAOA,EAAaK,KAmCtBrO,aACArmC,aAvBmB,WACnB,IAAM+uC,EAAU1I,IACVgO,EAAeD,EAAYrF,GACjC,GAC0B,kBAAjBsF,GACPA,GACA/pE,MAAMkgC,QAAQ6pC,EAAaM,SAC3BN,EAAaM,OAAOrsE,OAEpB,OAAO+rE,EAAaM,OAAO,IAe7B70C,YA3EkB,WAClB,OAAO6zC,EAAwBI,cAAcP,IA2E7CvvC,eAxEqB,WACrB,OAAO2vC,EAA2BG,cAAcP,IAwEhD3vE,mBAnCyB,WACzB,IAAMkrE,EAAU1I,IACVgO,EAAeD,EAAYrF,GACjC,GAA4B,kBAAjBsF,GAA6BA,EAEtC,OAAwB,IAAjBA,EAAaO,Q,yDCzOxB,qBAGe,oBAAGhlC,EAAH,EAAGA,KAAH,OAAc,cAAC,IAAD,CAAkBA,KAAOA,M,iTCWzC+5B,EAAS,CAClBkL,MAAO,QACPhL,YAAa,aACbG,WAAY,aACZJ,SAAU,WACVkL,QAAS,UACThL,UAAW,YACXiL,UAAW,OACXC,eAAgB,YAGPC,EACF,QAYX,SAASC,EAAT,GAAsC,IAAhBvvE,EAAe,EAAfA,KAAMwH,EAAS,EAATA,MAExB,OACI,mBAAGxH,KAAMA,EAAMD,UAAU,SAAzB,SAAmCyH,IAub5BgoE,IA5af,YAA2L,EAAlK7wD,SAAmK,IAAD,MAAxJ1S,EAAwJ,EAAxJA,OAAQ9Q,EAAgJ,EAAhJA,KAAM0S,EAA0I,EAA1IA,KAAMmR,EAAoI,EAApIA,WAAY7f,EAAwH,EAAxHA,QAASmlE,EAA+G,EAA/GA,aAA4Br1D,GAAmF,EAAjGwgE,aAAiG,EAAnFxgE,MAAMsR,EAA6E,EAA7EA,YAA6E,IAAhEtS,qBAAgE,aAAzC1J,aAAyC,MAAjC,EAAiC,MAA9B6d,gBAA8B,SAAXpV,EAAW,gKACjLy8C,EAAcx7C,EAAgB,KAAO,IAAIsB,IAAYvC,GACrD+3C,EAAa,OAAG0E,QAAH,IAAGA,OAAH,EAAGA,EAAa15C,UAAUd,GAEvCyqD,EAAU,IAAIjqD,IAAJ,OAAoBzC,QAApB,IAAoBA,OAApB,EAAoBA,EAASkT,qBAEvCjT,EAAUjL,uBACV+I,EAAWC,cAEjB,SAAS0kE,IACL,OAAQ7hE,GACJ,KAAKgZ,IAAMC,eACP,MAAO,kBACX,KAAKD,IAAMG,OACP,MAAM,WAAN,OAAkB/X,GACtB,KAAK4X,IAAME,WACP,MAAM,eAAN,OAAsB9X,GAC1B,KAAK4X,IAAMI,eACP,MAAM,mBAAN,OAA0BhY,GAC9B,KAAK4X,IAAMK,KACP,MAAM,SAAN,OAAgBjY,GACpB,KAAK4X,IAAMyjD,IACP,MAAM,mBAAN,OAA0Br7D,GAC9B,KAAK4X,IAAMusC,KACP,MAAM,SAAN,OAAgBnkD,GACpB,QACI,MAAM,gBAAN,OAAuBpB,EAAvB,YAA+BoB,IAS3C,SAAS0gE,EAAT,GAA+B,IAAVnoE,EAAS,EAATA,MACXooE,EAAOF,IACb,OAAO,cAACH,EAAD,CAAYvvE,KAAM4vE,EAAMpoE,MAAOA,IAG1C,SAASqoE,EAAT,GAA6C,IAAVroE,EAAS,EAATA,MAC/B,OAAQqG,GACJ,KAAKgZ,IAAMC,eACX,KAAKD,IAAMI,eACX,KAAKJ,IAAMK,KACX,KAAKL,IAAMyjD,IACX,KAAKzjD,IAAMusC,KACP,OAAO,cAACmc,EAAD,CAAY/nE,MAAOA,EAAOxH,KAAI,kBAAa6N,KACtD,QACI,OAAO,cAAC0hE,EAAD,CAAY/nE,MAAOA,EAAOxH,KAAM,UAAY6N,EAAO,IAAMoB,KAI5E,SAAS6gE,EAAT,GAAoC,IAARtoE,EAAO,EAAPA,MACxB,OAAO,cAAC+nE,EAAD,CAAY/nE,MAAOA,EAAOxH,KAAM,UAAY6N,EAAO,IAAMoB,IAGpE,SAAS8gE,EAAT,GAA8B,IAARvoE,EAAO,EAAPA,MAClB,OAAO,cAAC+nE,EAAD,CAAY/nE,MAAOA,EAAOxH,KAAM,UAAY6N,EAAO,IAAMoB,IAGpE,SAAS+gE,EAAT,GAAgC,IAARxoE,EAAO,EAAPA,MACpB,OAAO,cAAC+nE,EAAD,CAAY/nE,MAAOA,EAAOxH,KAAM,YAAc6N,EAAO,IAAMoB,IAGtE,IAAMghE,EAAiB,uCAAG,sBAAA1kE,EAAA,sEAChBC,IAAU8vD,kBAAkBztD,EAAMoB,GADlB,OAEtBtP,SAASwB,SAAS6e,SAFI,2CAAH,qDAKjBkwD,EAAsB,uCAAG,4BAAA3kE,EAAA,0DAEvBsC,EAFuB,0CAIbrC,IAAUs6C,iBAAiBj4C,EAAMoB,GAJpB,OAMb6wD,EAAO4P,IACbziE,EAAQa,KAAK,CACTC,SAAU+xD,EAAMpiE,MAAO,CACnBsQ,KAAMf,EAAQ9L,SAAS4M,YATZ,gDAanBhD,EACI3N,YAAK,CACD0K,QAAS,KAAEA,QACXiE,SAAU,aAhBC,gCAqBvBhF,QAAQykE,KAAR,2DAAiErwE,IArB1C,yDAAH,qDA+BtBilB,EAAwB,WAG1B,MAA0B,UAAnBs5C,EAAQz5C,QAKnB,IAAKhU,EACD,OAAO,cAAC,IAAD,IAIX,GAAIytD,EAAQz5C,SAAWqvD,GAA6C,aAAzB5V,EAAQ9pD,aAC/C,OAAO,qBAAK7P,UAAU,uCAAf,8BASX,SAASowE,IACL,OAAIC,EAAsBxpE,SAAS8yD,EAAQ9pD,cAGnC,sBAAK7P,UAAU,sCAAf,UACI,qBAAKA,UAAU,oBAAf,SACK25D,EAAQ/pD,gBAEb,cAACggE,EAAD,CAAWnoE,MAAM,YAGtB,KAGX,IAAM4oE,EAAwB,CAAC,UAAW,WAAY,YAAa,WAAY,qBAAsB,UAAW,UAAW,UAAW,WAAY,UAAW,WAAY,SAAU,QAInL,GAAIniE,GAAiByrD,EAAQz5C,SAAWqvD,EAAkB,CACtD,OAAQ5V,EAAQhG,aACZ,IAAK,WACD,OACI,qBAAK3zD,UAAU,uCAAf,4BAIR,IAAK,QACD,OACI,qBAAKA,UAAU,6CAAf,SACI,cAAC8vE,EAAD,CAAyBroE,MAAM,qBAG3C,IAAK,aACD,OACI,sBAAKzH,UAAU,sCAAsCuD,MAAO,CAAElE,MAAO,yBAArE,UACI,sBAAKW,UAAU,oBAAf,UACI,cAAC,IAAD,IACA,+CAEJ,cAAC8vE,EAAD,CAAyBroE,MAAM,YAG3C,IAAK,gBACD,iBAAO2oE,WAAP,QACI,qBAAKpwE,UAAU,uCAAf,0CAIR,IAAK,OACL,IAAK,OACL,QACI,IAAIswE,GAAgBF,IACpB,GAAIE,GACA,OAAOA,GAKnB,OAAI3W,EAAQ1pD,UAEJ,sBAAKjQ,UAAU,yCAAf,WAC4B,IAAvBiN,EAAQW,YAA8C,OAAvBX,EAAQW,WAClC,qBAAK5N,UAAU,oBAAf,mBACA,qBAAKA,UAAU,oBAAoBuD,MAAO,CAAElE,MAAO,WAAnD,yBAEN,cAACuwE,EAAD,CAAWnoE,MAAM,SAEhBkyD,EAAQ2B,aACL,cAAC,IAAD,CAAQl8D,QAAS8wE,EAAmBzoE,MAAM,cASlD,0CAEKyE,IAAW+3D,EAAOC,WAAa7hD,GAC5B,qBAAKriB,UAAU,oBAAf,sBAIJ,cAAC4vE,EAAD,CAAWnoE,MAAM,kBAWjC,OACI,qCAKM4Y,KAAyD,YAAnB,OAAXG,QAAW,IAAXA,OAAA,EAAAA,EAAa5I,cAMR,SAAnB,OAAX4I,QAAW,IAAXA,OAAA,EAAAA,EAAa5I,cACT,qBAAK5X,UAAU,yCAGfkM,IAAW+3D,EAAOkL,MACd,sBAAKnvE,UAAU,oCAAoCuD,MAAO,CAAElE,MAAO,WAAnE,UACI,sBAAKW,UAAU,oBAAf,UACI,cAAC,IAAD,IADJ,qBAIA,cAAC,IAAD,CAAQZ,QAASA,EAASqI,MAAM,WAChC,cAACmoE,EAAD,CAAWnoE,MAAM,YAGpByE,IAAW+3D,EAAOE,aAAkC,SAAnBxK,EAAQz5C,QAAsBhS,GAAkBmS,IAc7EnU,IAAW+3D,EAAOE,aAAgB9jD,KAA8C,SAAnBs5C,EAAQz5C,SAAqBhS,GAA2C,OAAzBjB,EAAQO,eAAkD,IAAzBP,EAAQO,aAMjJtB,IAAW+3D,EAAOE,cAAgB9jD,KAA8C,SAAnBs5C,EAAQz5C,QAAqBhS,IAA0C,IAAzBjB,EAAQO,cACpH,sBAAKxN,UAAU,yCAAf,UACI,qBAAKA,UAAU,oBAAoBuD,MAAO,CAAElE,MAAO,WAAnD,yBACA,cAACuwE,EAAD,CAAWnoE,MAAM,YARrB,sBAAKzH,UAAU,yCAAf,UACI,qBAAKA,UAAU,oBAAf,mBACA,cAAC4vE,EAAD,CAAWnoE,MAAM,YAhBzB,sBAAKzH,UAAU,yCAAf,UAQI,qBAAKA,UAAU,oBAAf,yBACA,cAAC4vE,EAAD,CAAWnoE,MAAM,YA7BjC,sBAAKzH,UAAU,6CAAf,UACI,cAAC+vE,EAAD,CAAmBtoE,MAAM,WACzB,cAACqoE,EAAD,CAAyBroE,MAAM,gBA4CrC4Y,KAA6C,QAAlBs5C,EAAQz5C,QACjC,8BACI,sBAAKlgB,UAAU,yCAAf,UACI,qBAAKA,UAAU,oBAAf,mBACA,cAAC4vE,EAAD,CAAWrsE,MAAO,CAAEwT,aAAc,QAAWtP,MAAM,OAAO0B,UAAQ,UAI3E+C,IAAW+3D,EAAOE,aAAej4D,IAAW+3D,EAAOG,YAAcl2D,GAAmC,SAAlByrD,EAAQz5C,SAAsBG,KAC/G,qBAAKrgB,UAAU,qCAAf,SACI,cAAC,IAAD,CAAQZ,QAAS8wE,EAAmBzoE,MAAM,aAI7CyE,IAAW+3D,EAAOG,YAClBnlD,IAAU,OAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAYnP,WACvB,sBAAK9P,UAAU,sCAAsCuD,MAAO,CAAElE,MAAO,yBAArE,UACI,sBAAKW,UAAU,oBAAf,UACI,cAAC,IAAD,IACC8N,IAASgZ,IAAMC,eAAiB,uBAAyB,+CAG7DjZ,IAASgZ,IAAMC,gBAA+C,SAAnB,OAAV9H,QAAU,IAAVA,OAAA,EAAAA,EAAYrH,cAC1C,6BACE9J,IAASgZ,IAAMC,eACb,cAAC+oD,EAAD,CAAyBroE,MAAM,OAAMiD,QAAQ,YAC3C,cAAColE,EAAD,CAAyBroE,MAAM,UAAUiD,QAAQ,YAE1DoD,GAAQgZ,IAAMC,gBACX,cAAC6oD,EAAD,CAAWnoE,MAAM,YAGzB,sBAAKzH,UAAU,wCAAwCuD,MAAO,CAAElE,MAAO,WAAvE,UACI,sBAAKW,UAAU,oBAAf,UACI,cAAC,IAAD,IADJ,eAIA,cAAC4vE,EAAD,CAAWnoE,MAAM,SAAQ,2BAKpCyE,IAAW+3D,EAAOK,YACf,sBAAKtkE,UAAU,yCAAyCuD,MAAO,CAAElE,MAAO,WAAxE,UACI,sBAAKW,UAAU,oBAAf,UACI,cAAC,IAAD,IADJ,aAEeukE,GAAgB,qCAC1BA,GACG,gCACI,uBACCA,QAIZ//D,EAAQ,KAAO0J,GACZ,cAAC,IAAD,CAAQzG,MAAM,QAAQ0B,UAAQ,QAKxCkX,KAA2BnU,IAAW+3D,EAAOC,YAAcjlD,GAAsC,GAAxBA,EAAWnP,aAAyB0Q,GAAwC,GAAzBA,EAAYE,WAAiD,GAA3BF,EAAYC,cAA0BD,IAClM,sBAAKxgB,UAAU,uCAAf,UACI,qBAAKA,UAAU,oBAAf,uBAG8B,KAAhB,OAAbglD,QAAa,IAAbA,OAAA,EAAAA,EAAe/0C,YACZ,qCACI,sBAAKjQ,UAAU,oBAAf,sCACuBglD,QADvB,IACuBA,GADvB,UACuBA,EAAe50C,kBADtC,aACuB,EAA2ByE,eAElD,cAAC,IAAD,CAAQpN,MAAM,QAAQ0B,UAAQ,QAGR,KAAhB,OAAb67C,QAAa,IAAbA,OAAA,EAAAA,EAAe/0C,YAAuBzL,EAAQ,IAC3C,gCAEQ0J,GACA,cAAC0hE,EAAD,CAAWnoE,MAAM,gBAEnByG,GACE,cAAC,IAAD,CAAQ9O,QAAS+wE,EAAwB1oE,MAAM,gBAUlE4Y,MAA4Bs5C,EAAQ9pD,aAAa6c,MAAM,EAAE,GAAGlxB,cAAcqL,SAAS,KAChF,sBAAK7G,UAAU,uCAAf,UACI,qBAAKA,UAAU,oBAAf,SACK25D,EAAQ/pD,gBAGa,aAAzB+pD,EAAQ9pD,cAAyD,QAAzB8pD,EAAQ9pD,aAC7C,cAACmgE,EAAD,CAAavoE,MAAOkyD,EAAQrpD,iBAAmB,SAAW,UAC7D,KAED,sBAAKtQ,UAAU,6CAAf,UACI,qBAAKA,UAAU,oBAAf,6BAGA,cAACiwE,EAAD,CAAexoE,MAAM,kBAIhC,KAGA4Y,KAA2Bs5C,EAAQ9pD,aAAa6c,MAAM,EAAE,GAAGlxB,cAAcqL,SAAS,KAC/E,qBAAK7G,UAAU,uCAAf,SACI,qBAAKA,UAAU,uCAAf,SACK25D,EAAQ/pD,kBAGpB,MAECyQ,KAA0E,SAAxC,OAAPpT,QAAO,IAAPA,GAAA,UAAAA,EAASkT,2BAAT,eAA8BvI,eACvD,sBAAK5X,UAAU,wCAAwCuD,MAAO,CAAElE,MAAO,WAAvE,UACI,sBAAKW,UAAU,oBAAf,UACI,cAAC,IAAD,IADJ,sBAIA,cAAC4vE,EAAD,CAAWnoE,MAAM,YAIpBqG,IAASgZ,IAAME,aAAe9a,IAAW+3D,EAAOoL,WAAanjE,IAAW+3D,EAAOqL,iBAChF,sBAAKtvE,UAAU,wCAAf,UACI,qBAAKA,UAAU,oBAAoBuD,MAAO,CAAElE,MAAO,kBAAnD,SACI,cAAC,IAAD,MAEJ,8FAGA,cAACuwE,EAAD,CAAWnoE,MAAM,YAIW,OAA/BkyD,EAAQ4W,oBACT,sBAAKvwE,UAAU,wCAAf,UACI,qBAAKA,UAAU,oBAAoBuD,MAAO,CAAElE,MAAO,kBAAnD,SACI,cAAC,IAAD,MAEJ,uDAC2Bs6D,EAAQ4W,sBAEnC,cAACX,EAAD,CAAWnoE,MAAM,iB,wECzdrC,mBAEe,sBACX,qBAAKzH,UAAU,cAAf,SACI,cAAC,IAAD,Q,oDCJR,gFAEIqpE,EAAUF,aAAaqH,QAAQ,WAE7B1kE,EAAY,CACfC,SAAU,WACVjE,SAAU,WACVqE,OAAQ,SACRQ,QAAS,WAINq8D,EAAmB,CACtBK,QAASA,GAAWzrE,IAAKmxE,mBAAqB,GAC9CtxE,aAAc4rE,EACd38D,UAAWZ,EAAUa,U,mMCfXs8D,EAAkB,CAC3BC,MAAO,QACPI,OAAQ,SACRE,cAAe,iBAGNn5B,EAAQ,SAACg5B,GAAD,8CAAa,WAAMr+D,GAAN,SAAAQ,EAAA,sDAC9BR,EAAS,CACLuB,KAAM08D,EAAgBC,MACtBG,YAH0B,2CAAb,uDAOR9qE,EAAS,yDAAM,WAAMyM,GAAN,SAAAQ,EAAA,sDACxBR,EAAS,CACLuB,KAAM08D,EAAgBK,SAFF,2CAAN,uDAMTz9D,EAAe,SAACK,GAAD,8CAAY,WAAMlB,GAAN,SAAAQ,EAAA,sDACpCR,EAAS,CACLuB,KAAM08D,EAAgBO,cACtBt9D,WAHgC,2CAAZ,yD","file":"static/js/main.5cd01ece.chunk.js","sourcesContent":["\r\nexport const FIELDS = {\r\n    FIRST_NAME: 'FIRST_NAME',\r\n    LAST_NAME: 'LAST_NAME',\r\n    MIDDLE_INITIALS: 'MIDDLE_INITIALS',\r\n    BIRTHDATE: 'BIRTHDATE',\r\n    HOME_PHONE: 'HOME_PHONE',\r\n    RESIDENCE_ADDRESS: 'RESIDENCE_ADDRESS',\r\n    PERMANENT_ADDRESS: 'PERMANENT_ADDRESS',\r\n    ALTERNATE_PHONE: 'ALTERNATE_PHONE',\r\n    GENDER__MALE: 'GENDER__MALE',\r\n    GENDER__FEMALE: 'GENDER__FEMALE',\r\n    GENDER__TRANSMAN: 'GENDER__TRANSMAN',\r\n    GENDER__TRANSWOMAN: 'GENDER__TRANSWOMAN',\r\n    GENDER__NON_BINARY: 'GENDER__NON_BINARY',\r\n    GENDER__OTHER: 'GENDER__OTHER',\r\n    GENDER__NA: 'GENDER__NA',\r\n    GED_SCORE: \"GED_SCORE\",\r\n    GED_IN_PROGRESS_FLAG: \"GED_IN_PROGRESS_FLAG\",\r\n    ASPIRE__MEMBER: 'ASPIRE__MEMBER',\r\n    ASPIRE__ADVISOR: 'ASPIRE__ADVISOR',\r\n    ASPIRE__SITE: 'ASPIRE__SITE',\r\n    CORRECTIONAL_FACILITY_HS: 'CORRECTIONAL_FACILITY_HS',\r\n    CORRECTIONAL_FACILITY_CC: 'CORRECTIONAL_FACILITY_CC',\r\n    CORRECTIONAL_FACILITY_RELEASE_DATE: 'CORRECTIONAL_FACILITY_RELEASE_DATE',\r\n    CORRECTIONAL_FACILITY_TYPE: 'CORRECTIONAL_FACILITY_TYPE',\r\n    CORRECTIONAL_FACILITY_NAME: 'CORRECTIONAL_FACILITY_NAME',\r\n    CORRECTIONAL_FACILITY_VERIFICATION_ALLOW: 'CORRECTIONAL_FACILITY_VERIFICATION_ALLOW',\r\n    FIFTH_YEAR_SENIOR: 'FIFTH_YEAR_SENIOR',\r\n    HIGHSCHOOL_GPA: 'HIGHSCHOOL_GPA',\r\n    ACT: 'ACT',\r\n    SAT: 'SAT',\r\n    HIGHSCHOOL_GRAD_DATE: 'HIGHSCHOOL_GRAD_DATE',\r\n    ETHNICITY__AM_INDIAN: 'RaceAmIndianFlag',\r\n    ETHNICITY__ASIAN: 'RaceAsianFlag',\r\n    ETHNICITY__BLACK: 'RaceBlackFlag',\r\n    ETHNICITY__HAWAIIAN_PI: 'RaceNativeHiPiFlag',\r\n    ETHNICITY__WHITE: 'RaceWhiteFlag',\r\n    ETHNICITY__NA: 'RaceNAFlag',\r\n    ETHNICITY__OTHER: 'EthnicOther',\r\n    FAFSA_FILING_DATE: 'FAFSA_FILING_DATE',\r\n    SSN: 'SSN',\r\n    TEST_APPLICATION: 'TEST_APPLICATION',\r\n    OREGON_RESIDENT: 'OREGON_RESIDENT',\r\n    WORKING__CURRENT: 'WORKING__CURRENT',\r\n    WORKING__NEXT_YEAR: 'WORKING__NEXT_YEAR',\r\n    FOSTER_CARE: 'FOSTER_CARE',\r\n    EARLY_LEARNING_MAJOR: 'EARLY_LEARNING_MAJOR',\r\n    COLLEGE_DUAL_ENROLLED: 'COLLEGE_DUAL_ENROLLED',\r\n    OSAC_REFERRAL: 'OSAC_REFERRAL',\r\n    PUBLICITY_RELEASE: 'PUBLICITY_RELEASE',\r\n    PRIVACY_AGREEMENT: 'PRIVACY_AGREEMENT',\r\n    MAILING_ADDRESS: 'MAILING_ADDRESS',\r\n    CERTIFY_IDENTITY: 'CERTIFY_IDENTITY',\r\n    CITIZENSHIP_STATUS: 'CITIZENSHIP_STATUS',\r\n    HISPANIC: 'HISPANIC',\r\n    COLLEGE_STANDING: 'COLLEGE_STANDING',\r\n    COLLEGE_CHOICE: 'COLLEGE_CHOICE',\r\n    PRIMARY_CONTACT: 'PRIMARY_CONTACT',\r\n    PRIMARY_PHONE_CELL_FLAG: 'PRIMARY_PHONE_CELL_FLAG',\r\n    ALTERNATE_PHONE_CELL_FLAG: 'ALTERNATE_PHONE_CELL_FLAG',\r\n    COLLEGE_HISTORY_COMPLETE: 'COLLEGE_HISTORY_COMPLETE',\r\n    MARITAL_STATUS: 'MARITAL_STATUS',\r\n    PARENTS_MARITAL_STATUS: 'PARENTS_MARITAL_STATUS',\r\n    ED_LEVEL_FATHER: 'ED_LEVEL_FATHER',\r\n    ED_LEVEL_MOTHER: 'ED_LEVEL_MOTHER',\r\n    FIRST_GEN_IMMIGRANT: 'FIRST_GEN_IMMIGRANT',\r\n    IsReceivingERDCSubsidy: 'IsReceivingERDCSubsidy',\r\n    ERDCSubsidyExpirationDate: 'ERDCSubsidyExpirationDate',\r\n    CHILD_CARE_PROVIDER__NAME: 'CHILD_CARE_PROVIDER__NAME',\r\n    CHILD_CARE_PROVIDER__ADDRESS: 'CHILD_CARE_PROVIDER__ADDRESS',\r\n    CHILD_CARE_PROVIDER__STATE: 'CHILD_CARE_PROVIDER__STATE',\r\n    CHILD_CARE_PROVIDER__CITY: 'CHILD_CARE_PROVIDER__CITY',\r\n    CHILD_CARE_PROVIDER__ZIP: 'CHILD_CARE_PROVIDER__ZIP',\r\n    CHILD_CARE_PROVIDER__PHONE: 'CHILD_CARE_PROVIDER__PHONE',\r\n    CHILD_CARE_PROVIDER__START_DATE: 'CHILD_CARE_PROVIDER__START_DATE',\r\n    CHILD_CARE_PROVIDER__NEW: 'CHILD_CARE_PROVIDER__NEW',\r\n    CHILD_CARE_PROVIDER__LISTED: 'CHILD_CARE_PROVIDER__LISTED',\r\n    CHILD_CARE_PROVIDER__REGISTERED: 'CHILD_CARE_PROVIDER__REGISTERED',\r\n    CHILD_CARE_PROVIDER__PARENT: 'CHILD_CARE_PROVIDER__PARENT',\r\n\r\n    // Fields need to be added -> Child Care Grant Application\r\n    CHILD_CARE_PROVIDER2__NAME: 'CHILD_CARE_PROVIDER2__NAME',\r\n    CHILD_CARE_PROVIDER2__ADDRESS: 'CHILD_CARE_PROVIDER2__ADDRESS',\r\n    CHILD_CARE_PROVIDER2__STATE: 'CHILD_CARE_PROVIDER2__STATE',\r\n    CHILD_CARE_PROVIDER2__CITY: 'CHILD_CARE_PROVIDER2__CITY',\r\n    CHILD_CARE_PROVIDER2__ZIP: 'CHILD_CARE_PROVIDER2__ZIP',\r\n    CHILD_CARE_PROVIDER2__PHONE: 'CHILD_CARE_PROVIDER2__PHONE',\r\n    CHILD_CARE_PROVIDER2__START_DATE: 'CHILD_CARE_PROVIDER2__START_DATE',\r\n    CHILD_CARE_PROVIDER2__NEW: 'CHILD_CARE_PROVIDER2__NEW',\r\n    CHILD_CARE_PROVIDER2__LISTED: 'CHILD_CARE_PROVIDER2__LISTED',\r\n    CHILD_CARE_PROVIDER2__REGISTERED: 'CHILD_CARE_PROVIDER2__REGISTERED',\r\n    CHILD_CARE_PROVIDER2__PARENT: 'CHILD_CARE_PROVIDER2__PARENT',\r\n\r\n    NATIONAL_GUARD__UNIT: 'NATIONAL_GUARD__UNIT',\r\n    NATIONAL_GUARD__CREDITS_PRESUMMER: 'NATIONAL_GUARD__CREDITS_PRESUMMER',\r\n    NATIONAL_GUARD__CREDITS_FALL: 'NATIONAL_GUARD__CREDITS_FALL',\r\n    NATIONAL_GUARD__CREDITS_WINTER: 'NATIONAL_GUARD__CREDITS_WINTER',\r\n    NATIONAL_GUARD__CREDITS_SPRING: 'NATIONAL_GUARD__CREDITS_SPRING',\r\n    NATIONAL_GUARD__CREDITS_POSTSUMMER: 'NATIONAL_GUARD__CREDITS_POSTSUMMER',\r\n\r\n    // OTSG QUESTIONS\r\n    OTSG__ATTENDING_FALL_TERM: 'OTSG__ATTENDING_FALL_TERM',\r\n    OTSG__ATTENDING_WINTER_TERM: 'OTSG__ATTENDING_WINTER_TERM',\r\n    OTSG__ATTENDING_SPRING_TERM: 'OTSG__ATTENDING_SPRING_TERM',\r\n    OTSG__ENROLLED_TRIBE: 'OTSG__ENROLLED_TRIBE',\r\n\r\n    UNDERGRAD_GPA: 'UNDERGRAD_GPA',\r\n    GRADUATE_GPA: 'GRADUATE_GPA',\r\n    FINISHED_COMM_COLLEGE: 'FINISHED_COMM_COLLEGE',\r\n    FINISHED_BACHELORS_DEGREE: 'FINISHED_BACHELORS_DEGREE',\r\n    PRONOUNS__FEMALE: 'PRONOUNS__FEMALE',\r\n    PRONOUNS__MALE: 'PRONOUNS__MALE',\r\n    PRONOUNS__NEUTRAL: 'PRONOUNS__NEUTRAL',\r\n    PRONOUNS__OTHER: 'PRONOUNS__OTHER',\r\n    CAREER_GOAL: 'CAREER_GOAL',\r\n    OTHER_NAMES: 'OTHER_NAMES',\r\n    AGE_CHILD: 'AGE_CHILD',\r\n    HIGHSCHOOL_TYPE: 'HIGHSCHOOL_TYPE',\r\n    HIGHSCHOOL: 'HIGHSCHOOL',\r\n\r\n    CURRENT_COLLEGE: 'CURRENT_COLLEGE',\r\n    PAST_COLLEGE: 'PAST_COLLEGE',\r\n    DEGREES: 'DEGREES',\r\n\r\n    CHAFEE__PRESUMMER_1: 'CHAFEE__PRESUMMER_1',\r\n    CHAFEE__FALL_1: 'CHAFEE__FALL_1',\r\n    CHAFEE__WINTER_1: 'CHAFEE__WINTER_1',\r\n    CHAFEE__SPRING_1: 'CHAFEE__SPRING_1',\r\n    CHAFEE__POSTSUMMER_1: 'CHAFEE__POSTSUMMER_1',\r\n    CHAFEE__PRESUMMER_2: 'CHAFEE__PRESUMMER_2',\r\n    CHAFEE__FALL_2: 'CHAFEE__FALL_2',\r\n    CHAFEE__WINTER_2: 'CHAFEE__WINTER_2',\r\n    CHAFEE__SPRING_2: 'CHAFEE__SPRING_2',\r\n    CHAFEE__POSTSUMMER_2: 'CHAFEE__POSTSUMMER_2',\r\n    CHAFEE__FOSTER_CARE: 'CHAFEE__FOSTER_CARE',\r\n    CHAFEE__FOSTER_DHS: 'CHAFEE__FOSTER_DHS',\r\n    CHAFEE__FOSTER_OTHER_STATE: 'CHAFEE__FOSTER_OTHER_STATE',\r\n    CHAFEE__FOSTER_TRIBAL: 'CHAFEE__FOSTER_TRIBAL',\r\n    CHAFEE__ADOPTED: 'CHAFEE__ADOPTED',\r\n    CHAFEE__TRIBE: 'CHAFEE__TRIBE',\r\n    CHAFEE__OTHER_STATE_ID: 'CHAFEE__OTHER_STATE_ID',\r\n    CHAFEE__FOSTER_QUALIFIED: 'CHAFEE__FOSTER_QUALIFIED',\r\n    CHAFEE__ADOPTION_FINALIZED: 'CHAFEE__ADOPTION_FINALIZED',\r\n\r\n    COMM_COLLEGE_START_TERM: 'COMM_COLLEGE_START_TERM',\r\n    CHILDREN: 'CHILDREN',\r\n    NATIONAL_GUARD__BRANCH: 'NATIONAL_GUARD__BRANCH',\r\n    PROOF_GPA__UPLOAD: 'PROOF_GPA__UPLOAD',\r\n    PROOF_GPA__MAIL: 'PROOF_GPA__MAIL',\r\n    PROOF_GPA__REGISTRAR: 'PROOF_GPA__REGISTRAR',\r\n\r\n    ACTIVITY_WORK: 'ACTIVITY_WORK',\r\n    ACTIVITY_SCHOOL: 'ACTIVITY_SCHOOL',\r\n    ACTIVITY_VOLUNTEER: 'ACTIVITY_VOLUNTEER',\r\n    HAS_NO_SCHOOL_ACTIVITIES: 'HAS_NO_SCHOOL_ACTIVITIES',\r\n    HAS_NO_VOLUNTEER_ACTIVITIES: 'HAS_NO_VOLUNTEER_ACTIVITIES',\r\n    HAS_NO_WORK_ACTIVITIES: 'HAS_NO_WORK_ACTIVITIES',\r\n    ACTIVITIES_COMPLETE: 'ACTIVITIES_COMPLETE',\r\n    FALL_HS_TRANSCRIPTS_DIGITAL: 'FALL_HS_TRANSCRIPTS_DIGITAL',\r\n    FALL_HS_TRANSCRIPTS_MAIL: 'FALL_HS_TRANSCRIPTS_MAIL',\r\n    FALL_HS_TRANSCRIPTS_REGISTRAR: 'FALL_HS_TRANSCRIPTS_REGISTRAR',\r\n\r\n    FALL_COLLEGE_TRANSCRIPTS_DIGITAL: 'FALL_COLLEGE_TRANSCRIPTS_DIGITAL',    \r\n    FALL_COLLEGE_TRANSCRIPTS_MAIL: 'FALL_COLLEGE_TRANSCRIPTS_MAIL',\r\n\r\n    FALL_COLLEGE_TRANSCRIPTS_PRIOR_DIGITAL: 'FALL_COLLEGE_TRANSCRIPTS_PRIOR_DIGITAL',    \r\n    FALL_COLLEGE_TRANSCRIPTS_PRIOR_MAIL: 'FALL_COLLEGE_TRANSCRIPTS_PRIOR_MAIL',\r\n\r\n    FALL_COLLEGE_TRANSCRIPTS_RECENT_DIGITAL: 'FALL_COLLEGE_TRANSCRIPTS_RECENT_DIGITAL',    \r\n    FALL_COLLEGE_TRANSCRIPTS_RECENT_MAIL: 'FALL_COLLEGE_TRANSCRIPTS_RECENT_MAIL',\r\n\r\n    FALL_COLLEGE_TRANSCRIPTS_DURING_HS_DIGITAL: 'FALL_COLLEGE_TRANSCRIPTS_DURING_HS_DIGITAL',    \r\n    FALL_COLLEGE_TRANSCRIPTS_DURING_HS_MAIL: 'FALL_COLLEGE_TRANSCRIPTS_DURING_HS_MAIL',\r\n\r\n    ESSAY_1: 'ESSAY_1',\r\n    ESSAY_2: 'ESSAY_2',\r\n    ESSAY_3: 'ESSAY_3',\r\n    ESSAY_4: 'ESSAY_4',\r\n    SPRING_COLLEGE_TRANSCRIPTS_DIGITAL: 'SPRING_COLLEGE_TRANSCRIPTS_DIGITAL',\r\n    SPRING_COLLEGE_TRANSCRIPTS_MAIL: 'SPRING_COLLEGE_TRANSCRIPTS_MAIL',\r\n    SPRING_HS_TRANSCRIPTS_DIGITAL: 'SPRING_HS_TRANSCRIPTS_DIGITAL',\r\n    SPRING_HS_TRANSCRIPTS_MAIL: 'SPRING_HS_TRANSCRIPTS_MAIL',\r\n    CHILD_CARE_EXPENSES_MAIL: 'CHILD_CARE_EXPENSES_MAIL',\r\n    CHILD_CARE_EXPENSES_DIGITAL: 'CHILD_CARE_EXPENSES_DIGITAL',\r\n    FUND_UPLOAD_MAIL: \"FUND_UPLOAD_MAIL\",\r\n    FUND_UPLOAD_DIGITAL: \"FUND_UPLOAD_DIGITAL\",\r\n\r\n    IS_NATIONAL_GUARD_MEMBER: \"IS_NATIONAL_GUARD_MEMBER\",\r\n    IS_TEACHER_CANDIDATE_MEMBER: \"IS_TEACHER_CANDIDATE_MEMBER\",\r\n    HAS_DEPENDENT_CHILDREN: \"HAS_DEPENDENT_CHILDREN\",   \r\n\r\n    TEACHER_WORKING: \"TeacherWorking\",\r\n    TEACHER_WORKING20HOURS: 'TeacherWorking20Hours',\r\n    TEACHER_WORKINGKTHRU12: 'TeacherWorkingKthru12',\r\n    TEACHER_ROLE: 'TeachingRole',\r\n    TEACHER_DISTRICT: 'TeachingDistrict',\r\n    UNLISTED_TEACHER_DISTRICT: 'UnlistedTeachingDistrict',\r\n    TEACHER_FLUENCY: 'TeacherFluency',\r\n    TEACHER_LISENCE_BEGIN: 'TeacherLicenseBegin',\r\n    TEACHER_LICENSE_COMPLETE: 'TeacherLicenseProgramComplete',\r\n    TEACHER_LICENSE_TYPE: 'TeacherLicenseType',\r\n    TEACHER_LICENSE_ENDORSEMENTS: 'TeacherLicenseEndorsements',\r\n    TEACHER_SCHOLARS_REFERRAL: 'TeacherScholarsAppReferral'\r\n}\r\n\r\n/**\r\n * how do the transcript answer fields tie together to make a specific question answer\r\n */\r\nexport const TRANSCRIPT_QUESTIONS = {\r\n    // spring grades, most colleges\r\n    SPRING_COLLEGE: {\r\n        name : \"SpringCollegeTranscripts\",\r\n        description: \"College Transcripts\",\r\n        mailField : FIELDS.SPRING_COLLEGE_TRANSCRIPTS_MAIL,\r\n        uploadField : FIELDS.SPRING_COLLEGE_TRANSCRIPTS_DIGITAL,\r\n        term : 'SPRING',\r\n        level: 'College'\r\n    },\r\n    SPRING_HS: {\r\n        name : \"SpringHighSchoolTranscript\",\r\n        description: \"High School Transcripts\",\r\n        mailField : FIELDS.SPRING_HS_TRANSCRIPTS_MAIL,\r\n        uploadField : FIELDS.SPRING_HS_TRANSCRIPTS_DIGITAL,\r\n        term : 'SPRING',\r\n        level: 'HighSchool'       \r\n    },\r\n    // fall grades, all colleges up to fall\r\n    FALL_COLLEGE: {\r\n        name : \"FallCollegeTranscripts\",\r\n        mailField : FIELDS.FALL_COLLEGE_TRANSCRIPTS_MAIL,\r\n        uploadField : FIELDS.FALL_COLLEGE_TRANSCRIPTS_DIGITAL,\r\n        level: 'College'\r\n    },\r\n    // fall grades within last 10 years\r\n    FALL_COLLEGE_RECENT:{\r\n        name: \"FallCollegeRecentTranscripts\",\r\n        description: \"Recent College Transcripts\",\r\n        mailField : FIELDS.FALL_COLLEGE_TRANSCRIPTS_RECENT_MAIL,\r\n        uploadField : FIELDS.FALL_COLLEGE_TRANSCRIPTS_RECENT_DIGITAL,\r\n        level: 'College'\r\n    },\r\n    // fall grades, over 10 years ago\r\n    FALL_COLLEGE_PRIOR:{\r\n        name: \"FallCollegePriorTranscripts\",\r\n        description: \"Prior College Transcripts\",\r\n        mailField : FIELDS.FALL_COLLEGE_TRANSCRIPTS_PRIOR_MAIL,\r\n        uploadField : FIELDS.FALL_COLLEGE_TRANSCRIPTS_PRIOR_DIGITAL,\r\n        level: 'College' \r\n    },\r\n    // any fall grades taken while also attending high school\r\n    FALL_COLLEGE_DURING_HS: {\r\n        name: \"FallCollegeDuringHighSchoolTranscripts\",\r\n        description: \"College Transcripts From During High School\",\r\n        mailField : FIELDS.FALL_COLLEGE_TRANSCRIPTS_DURING_HS_MAIL,\r\n        uploadField : FIELDS.FALL_COLLEGE_TRANSCRIPTS_DURING_HS_DIGITAL,\r\n        level: 'College'   \r\n    },\r\n    FALL_HS: {\r\n        name: \"FallHighSchoolTranscript\",\r\n        description: \"High School Transcript\",\r\n        mailField : FIELDS.FALL_HS_TRANSCRIPTS_MAIL,\r\n        uploadField : FIELDS.FALL_HS_TRANSCRIPTS_DIGITAL,\r\n        registrarField : FIELDS.FALL_HS_TRANSCRIPTS_REGISTRAR,\r\n        level: 'HighSchool'    \r\n    },\r\n    PROOF_OF_GPA: {\r\n        name: \"ProofOfGpa\",\r\n        description: \"Proof of GPA\",\r\n        mailField : FIELDS.PROOF_GPA__MAIL,\r\n        uploadField : FIELDS.PROOF_GPA__UPLOAD,\r\n        registrarField : FIELDS.PROOF_GPA__REGISTRAR,    \r\n        level: 'HighSchool'  \r\n    },\r\n    CHILDCARE_EXPENSES: {\r\n        name: \"ProofOfChildcareExpense\",\r\n        description: \"Proof of Child Care Expenses\",\r\n        mailField : FIELDS.CHILD_CARE_EXPENSES_MAIL,\r\n        uploadField : FIELDS.CHILD_CARE_EXPENSES_DIGITAL,\r\n        level: 'Document'  \r\n    }\r\n};\r\n\r\n\r\n\r\nexport const REPEATABLE_FIELDS = [\r\n    FIELDS.AGE_CHILD,\r\n    FIELDS.OTHER_NAMES,\r\n    FIELDS.ACTIVITY_SCHOOL,\r\n    FIELDS.ACTIVITY_VOLUNTEER,\r\n    FIELDS.ACTIVITY_WORK,\r\n    FIELDS.PAST_COLLEGE,\r\n    FIELDS.CURRENT_COLLEGE,\r\n    FIELDS.DEGREES,\r\n    FIELDS.CHILDREN,\r\n    FIELDS.TEACHER_LICENSE_ENDORSEMENTS\r\n    // FIELDS.SPRING_COLLEGE_TRANSCRIPTS_DIGITAL,\r\n];\r\n\r\nexport const ID = 'Id';\r\n\r\nexport const AnswerTypeAddressProps = {\r\n    ID,\r\n    ADDRESS: 'Address',\r\n    COUNTY: 'CountyId',\r\n    STATE: 'StateId',\r\n    CITY: 'CityId',\r\n    ZIP: 'Zip',\r\n    UNLISTED_STATE_NAME: 'UnlistedStateName',\r\n    UNLISTED_CITY_NAME: 'UnlistedCityName',\r\n}\r\n\r\nexport const UNLISTED_COLLEGECODE = \"999999\";\r\n\r\nexport const AnswerTypeCollegeProps = {\r\n    ID,\r\n    SCHOOL_CODE: 'SchoolCode',\r\n    START_TERM: 'StartTerm',\r\n    START_YEAR: 'StartYear',\r\n    END_TERM: 'StopTerm',\r\n    END_YEAR: 'StopYear',   \r\n    CREDITS: 'CreditsEarned',\r\n    DEGREE: 'DegreeEarned',\r\n    CODE: 'SchoolCode',\r\n    UNLISTED_CODE: 'UnlistedCode',\r\n    UNLISTED_NAME: 'UnlistedName',\r\n    UNLISTED_STATE_NAME: 'UnlistedStateName',\r\n    UNLISTED_CITY_NAME: 'UnlistedCityName',\r\n    ADDRESS: 'Address',\r\n    COUNTY: 'CountyId',\r\n    STATE: 'StateId',\r\n    CITY: 'CityId',\r\n    ZIP: 'Zip',\r\n    TYPE: 'Type',\r\n}\r\n\r\nexport const AnswerTypeContactProps = {\r\n    ID,\r\n    LAST_NAME: 'LastName',\r\n    FIRST_NAME: 'FirstName',\r\n    RELATION: 'RelationshipTypeId',\r\n    RELATION_UNLISTED: 'UnlistedRelationship',\r\n    INCLUDE_EMAILS: 'IncludeInEmails',\r\n    EMAIL: 'Email',\r\n    CITY: 'CityId',\r\n    COUNTY: 'CountyId',\r\n    STATE: 'StateId',\r\n    UNLISTED_STATE_NAME: 'UnlistedStateName',\r\n    UNLISTED_CITY_NAME: 'UnlistedCityName',\r\n    ZIP: 'Zip',\r\n    ADDRESS: 'Address',\r\n    PHONE: 'HomePhone',\r\n    SEND_TEXTS: 'IsHomePhoneText',\r\n    LOCATION_NAME: 'LocationName'\r\n}\r\n\r\nexport const AnswerTypeMemberProps = {\r\n    ID,\r\n    FULL_NAME: 'FullName',\r\n    RELATION: 'RelationshipCode',\r\n    RELATION_UNLISTED: 'UnlistedRelationship',\r\n    INCLUDE_EMAILS: 'IncludeInEmails',\r\n    EMAIL: 'Email',\r\n    UNLISTED_STATE_NAME: 'UnlistedStateName',\r\n    UNLISTED_CITY_NAME: 'UnlistedCityName',\r\n    PHONE: 'HomePhone',\r\n    LOCATION_NAME: 'LocationName',\r\n    QUALIFIED_BY_MEMBER: 'IsQualifiedByMembership'\r\n}\r\n\r\nexport const AnswerTypeNameProps = {\r\n    ID,\r\n    FIRST_NAME: 'FirstName',\r\n    LAST_NAME: 'LastName',\r\n    MIDDLE_NAME: 'MiddleName'\r\n}\r\n\r\nexport const AnswerTypeHighschoolProps = {\r\n    ID,\r\n    SCHOOL_CODE: 'SchoolCode',\r\n    START: 'AttendedStart',\r\n    END: 'AttendedStop',\r\n    CREDITS: 'CreditsEarned',\r\n    DEGREE: 'DegreeEarned',\r\n    UNLISTED_CODE: 'UnlistedCode',\r\n    UNLISTED_NAME: 'UnlistedName',\r\n    UNLISTED_STATE_NAME: 'UnlistedStateName',\r\n    UNLISTED_CITY_NAME: 'UnlistedCityName',\r\n    ADDRESS: 'Address',\r\n    COUNTY: 'CountyId',\r\n    STATE: 'StateId',\r\n    CITY: 'CityId',\r\n    ZIP: 'Zip',\r\n    TYPE: 'Type'\r\n}\r\n\r\nexport const AnswerTypeActivityProps = {\r\n    ID,\r\n    TITLE: 'Title',\r\n    START_DATE: 'StartDate',\r\n    END_DATE: 'StopDate',\r\n    FREQUENCY: 'FrequencyCode',\r\n    TYPE: 'ActivityTypeCode',\r\n    ACCOMPLISHMENTS: 'Accomplishments',\r\n    HOURS_PER_UNIT: 'HoursPerUnit',\r\n    TOTAL_HOURS: 'TotalHours'\r\n}\r\n\r\nexport const AnswerTypeDegreeProps = {\r\n    ID,\r\n    PRIMARY_MAJOR: 'CIPMajorId',\r\n    SECONDARY_MAJOR: 'CIPMajorId2',\r\n    EXPECTED_GRADUATION_DATE: 'GraduationDate',\r\n    DEGREE: 'DegreeId',\r\n}\r\n\r\nexport const AnswerTypeChildProps = {\r\n    ID,\r\n    AMOUNT: 'AverageCareExpense',\r\n    BIRTHDATE: 'BirthDate',\r\n    CITIZENSHIP: 'CitizenshipCode',\r\n    FIRST_NAME: 'FirstName',\r\n    GENDER: 'GenderCode',\r\n    CHILD_CARE_NEEDED: 'IsChildCareNeeded',\r\n    EXTRA_CARE_NEEDED: 'IsExtraCareNeeded',\r\n    LAST_NAME: 'LastName',\r\n    MIDDLE_INITIAL: 'MiddleInitial',\r\n    _FILE: '_FILE'\r\n}\r\n\r\nexport const AnswerTypeTranscriptProps = {\r\n    ID,\r\n    IS_SELECTED: 'IsSelected',\r\n    IS_FILE_AVAILABLE: 'IsFileAvailable',\r\n    DELIVERY_TYPE: 'DeliveryType',\r\n    SCHOOL_CODE: 'SchoolCode',\r\n    SCHOOL_ANSWER_ID: 'SchoolAnswerId',\r\n    REVIEW_STATUS_DESCRIPTION: 'ReviewStatusDescription',\r\n    IS_CERTIFIED: 'IsCertified',\r\n    _FILE: '_FILE'\r\n}\r\n\r\nexport const AnswerTypeDocumentProps = {\r\n    ID,\r\n    IS_SELECTED: 'IsSelected',\r\n    IS_CERTIFIED: 'IsCertified',\r\n    IS_FILE_AVAILABLE: 'IsFileAvailable',\r\n    DELIVERY_TYPE: 'DeliveryType',\r\n    REVIEW_STATUS_DESCRIPTION: 'ReviewStatusDescription',\r\n    _FILE: '_FILE'\r\n}\r\n\r\nexport const TranscriptDeliveryTypes = {\r\n    UPLOAD: 'Upload',\r\n    MAIL: 'Mail',\r\n    REGISTRAR: 'Registrar'\r\n}\r\n\r\nexport const ActivityTypeCodes = {\r\n    WORK: 'WRK',\r\n    SCHOOL: 'SCH',\r\n    VOLUNTEER: 'VOL'\r\n}\r\n\r\nexport const TranscriptTypeCodes = {\r\n    UPLOAD: 'Upload',\r\n    MAIL: 'Mail',\r\n    REGISTRAR: 'Registrar'\r\n}\r\n\r\nexport const DocumentDeliveryTypes = {\r\n    UPLOAD: 'Upload',\r\n    MAIL: 'Mail',\r\n}\r\n\r\n// Basic Field Types\r\nexport const TextFieldType = {\r\n    AnswerType: \"Text\"\r\n}\r\n\r\nexport const DateFieldType = {\r\n    AnswerType: \"Date\"\r\n}\r\n\r\nexport const BooleanFieldType = {\r\n    AnswerType: \"Boolean\",\r\n    IsNullable: true,\r\n}\r\n\r\nexport const DecimalFieldType = {\r\n    AnswerType: \"Decimal\"\r\n}\r\n\r\nexport const IntegerFieldType = {\r\n    AnswerType: \"Integer\"\r\n}\r\n\r\n// Composite Field Types\r\nexport const CollegeFieldType = {\r\n    AnswerType: \"College\",\r\n    Props: AnswerTypeCollegeProps\r\n}\r\n\r\nexport const ContactFieldType = {\r\n    AnswerType: \"Contact\",\r\n    Props: AnswerTypeContactProps\r\n}\r\n\r\nexport const NameFieldType = {\r\n    AnswerType: \"Name\",\r\n    Props: AnswerTypeNameProps\r\n}\r\n\r\nexport const AddressFieldType = {\r\n    AnswerType: \"Address\",\r\n    Props: AnswerTypeAddressProps\r\n}\r\n\r\nexport const ActivityFieldType = {\r\n    AnswerType: \"Activity\",\r\n    Props: AnswerTypeActivityProps\r\n}\r\n\r\nexport const DegreeFieldType = {\r\n    AnswerType: \"Degree\",\r\n    Props: AnswerTypeDegreeProps\r\n}\r\n\r\nexport const HighSchoolFieldType = {\r\n    AnswerType: \"HighSchool\",\r\n    Props: AnswerTypeHighschoolProps\r\n}\r\n\r\nexport const ChildFieldType = {\r\n    AnswerType: \"Dependent\",\r\n    Props: AnswerTypeChildProps\r\n}\r\n\r\nexport const TranscriptFieldType = {\r\n    AnswerType: \"Transcript\",\r\n    Props: AnswerTypeTranscriptProps\r\n}\r\n\r\nexport const MembershipFieldType = {\r\n    AnswerType: 'Membership',\r\n    Props: AnswerTypeMemberProps\r\n}\r\n\r\nexport const DocumentFieldType = {\r\n    AnswerType: 'Document',\r\n    Props: AnswerTypeDocumentProps\r\n}\r\n\r\n// Field -> QuestionKey mapping\r\n\r\n\r\nexport const QuestionKeyMapping = {\r\n    [FIELDS.FIRST_NAME]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'AppStudentLogin.FirstName',\r\n        Title: 'First name'\r\n    },\r\n    [FIELDS.LAST_NAME]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'AppStudentLogin.LastName',\r\n        Title: 'Last name'\r\n    },\r\n    [FIELDS.MIDDLE_INITIALS]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'AppStudentLogin.MiddleInitial',\r\n        Title: 'Middle initial'\r\n    },\r\n    [FIELDS.BIRTHDATE]: {\r\n        ...DateFieldType,\r\n        QuestionKey: 'AppStudentLogin.Birthdate',\r\n        Title: 'Birthdate',\r\n    },\r\n    [FIELDS.HOME_PHONE]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'homePhone',\r\n        Title: 'Home phone'\r\n    },\r\n    [FIELDS.PRIMARY_PHONE_CELL_FLAG]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'PrimaryPhoneCellFlag',        \r\n    },\r\n    [FIELDS.ALTERNATE_PHONE_CELL_FLAG]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'AlternatePhoneCellFlag'\r\n    },\r\n    [FIELDS.ALTERNATE_PHONE]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'alternatePhone',\r\n        Title: 'Phone'\r\n    },\r\n    [FIELDS.RESIDENCE_ADDRESS]: {\r\n        ...AddressFieldType,\r\n        QuestionKey: 'ResidenceAddress',\r\n        Title: 'Residence Address'\r\n    },\r\n    [FIELDS.PERMANENT_ADDRESS]: {\r\n        ...AddressFieldType,\r\n        QuestionKey: 'PermanentAddress',\r\n        Title: 'Permanent Address'\r\n    },\r\n    [FIELDS.GENDER__MALE]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'GenderMale',\r\n        Title: 'Male'\r\n    },\r\n    [FIELDS.GENDER__FEMALE]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'GenderFemale',\r\n        Title: 'Female'\r\n    },\r\n    [FIELDS.GENDER__TRANSMAN]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'GenderTransman',\r\n        Title: 'Trans man'\r\n    },\r\n    [FIELDS.GENDER__TRANSWOMAN]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'GenderTranswoman',\r\n        Title: 'Trans woman'\r\n    },\r\n    [FIELDS.GENDER__NON_BINARY]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'GenderNonbinary',\r\n        Title: 'Nonbinary'\r\n    },\r\n    [FIELDS.GENDER__OTHER]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'GenderOther'\r\n    },\r\n    [FIELDS.GENDER__NA]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'GenderNA'\r\n    },\r\n    [FIELDS.ASPIRE__MEMBER]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ASPIREmemberFlag'\r\n    },\r\n    [FIELDS.ASPIRE__ADVISOR]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'ASPIREadvisorName'\r\n    },\r\n    [FIELDS.ASPIRE__SITE]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'ASPIREsiteName'\r\n    },\r\n    [FIELDS.CORRECTIONAL_FACILITY_HS]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'AttendWhileInCorrectionalFacility'\r\n    },\r\n    [FIELDS.CORRECTIONAL_FACILITY_TYPE]: {\r\n        ...IntegerFieldType,\r\n        QuestionKey: 'CorrectionalFacilityType',\r\n        IsSelectable: true\r\n    },\r\n    [FIELDS.CORRECTIONAL_FACILITY_CC]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'CorrectionalFacilityCompletion'\r\n    },\r\n    [FIELDS.CORRECTIONAL_FACILITY_RELEASE_DATE]: {\r\n        ...DateFieldType,\r\n        QuestionKey: 'CorrectionalFacilityReleaseDate'\r\n    },\r\n    [FIELDS.CORRECTIONAL_FACILITY_NAME]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'OtherCorrectionalFacilityName'\r\n    },\r\n    [FIELDS.CORRECTIONAL_FACILITY_VERIFICATION_ALLOW]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'AllowCorrectionalFacilityVerification'\r\n    },\r\n    [FIELDS.FIFTH_YEAR_SENIOR]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'HighSchoolClassStanding',\r\n        Title: '5th Year Senior'\r\n    },\r\n    [FIELDS.HIGHSCHOOL_GPA]: {\r\n        ...DecimalFieldType,\r\n        QuestionKey: 'HsGpa',\r\n        Title: 'High School GPA (Unweighted, Cumulative)'\r\n    },\r\n    [FIELDS.ACT]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'ACT',\r\n        Title: 'ACT Score'\r\n    },\r\n    [FIELDS.SAT]: {\r\n        ...IntegerFieldType,\r\n        QuestionKey: 'SATTotal',\r\n        Title: 'Total SAT'\r\n    },\r\n    [FIELDS.HIGHSCHOOL_GRAD_DATE]: {\r\n        ...DateFieldType,\r\n        QuestionKey: 'HsGradDate',\r\n        Title: 'High School Graduation Date'\r\n    },\r\n    // OTSG QUESTIONS\r\n    [FIELDS.OTSG__ATTENDING_FALL_TERM]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'AttendingFallTerm'\r\n    },\r\n    [FIELDS.OTSG__ATTENDING_WINTER_TERM]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'AttendingWinterTerm'\r\n    },\r\n    [FIELDS.OTSG__ATTENDING_SPRING_TERM]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'AttendingSpringTerm'\r\n    },\r\n    [FIELDS.OTSG__ENROLLED_TRIBE]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'EnrolledTribe'\r\n    },\r\n    [FIELDS.ETHNICITY__AM_INDIAN]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'RaceAmIndianFlag'\r\n    },\r\n    [FIELDS.ETHNICITY__ASIAN]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'RaceAsianFlag'\r\n    },\r\n    [FIELDS.ETHNICITY__BLACK]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'RaceBlackFlag'\r\n    },\r\n    [FIELDS.ETHNICITY__HAWAIIAN_PI]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'RaceNativeHiPiFlag'\r\n    },\r\n    [FIELDS.ETHNICITY__WHITE]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'RaceWhiteFlag'\r\n    },\r\n    [FIELDS.ETHNICITY__NA]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'RaceNAFlag'\r\n    },\r\n    [FIELDS.FAFSA_FILING_DATE]: {\r\n        ...DateFieldType,\r\n        QuestionKey: 'DateFafsaFiled'\r\n    },\r\n    [FIELDS.SSN]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'appstudentlogin.ssn'\r\n    },\r\n    [FIELDS.TEST_APPLICATION]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'TestAppFlag',\r\n        IsNullable: false,\r\n        Title: 'Test Applicant'\r\n\r\n    },\r\n    [FIELDS.OREGON_RESIDENT]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'residencyFlag'\r\n    },\r\n    [FIELDS.WORKING__CURRENT]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'workingYearOneFlag',\r\n        Title: 'Working 20+ hours current academic year'\r\n\r\n    },\r\n    [FIELDS.WORKING__NEXT_YEAR]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'workingYearTwoFlag',\r\n        Title: 'Working 20+ hours next academic year'\r\n    },\r\n    [FIELDS.FOSTER_CARE]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'FosterYouthFlag'\r\n    },\r\n    [FIELDS.EARLY_LEARNING_MAJOR]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'IsCareerEarlyLearning'\r\n    },\r\n    [FIELDS.COLLEGE_DUAL_ENROLLED]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'CollegeChoice.IsDualEnrolled'\r\n    },\r\n    [FIELDS.OSAC_REFERRAL]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'Wheredidyouhear'\r\n    },\r\n    [FIELDS.PUBLICITY_RELEASE]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'publicityReleaseFlag'\r\n    },\r\n    [FIELDS.PRIVACY_AGREEMENT]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'certificationFlag'\r\n    },\r\n    [FIELDS.MAILING_ADDRESS]: {\r\n        ...AddressFieldType,\r\n        QuestionKey: 'MailingAddress',\r\n        Title: 'Mailing Address'\r\n    },\r\n    [FIELDS.CERTIFY_IDENTITY]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'IsIdentityCertified'\r\n    },\r\n    [FIELDS.CITIZENSHIP_STATUS]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'CitizenCode',\r\n        Title: 'Citizenship',\r\n        IsSelectable: true\r\n    },\r\n    [FIELDS.HISPANIC]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'HispEthnicCode',\r\n        IsSelectable: true\r\n    },\r\n    [FIELDS.COLLEGE_STANDING]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'YRINCLGcode',\r\n        IsSelectable: true\r\n    },\r\n    [FIELDS.COLLEGE_CHOICE]: {\r\n        ...CollegeFieldType,\r\n        QuestionKey: 'CollegeChoice',\r\n        Title: 'College',\r\n        IsSelectable: true\r\n    },\r\n    [FIELDS.PRIMARY_CONTACT]: {\r\n        ...ContactFieldType,\r\n        QuestionKey: 'AdditionalContact.Primary',\r\n        Title: \"Primary Residence\"\r\n\r\n    },\r\n    [FIELDS.COLLEGE_HISTORY_COMPLETE]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'IsCollegeHistoryComplete'\r\n    },\r\n    [FIELDS.MARITAL_STATUS]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'StumsCode',\r\n        Title: \"Student Marital Status\",\r\n        IsSelectable: true\r\n    },\r\n    [FIELDS.PARENTS_MARITAL_STATUS]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'ParmsCode',\r\n        Title: \"Parents' Marital Status\",\r\n        IsSelectable: true\r\n    },\r\n    [FIELDS.ED_LEVEL_FATHER]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'EdLevelCodeFather',\r\n        Title: \"Parent 2 Education Level\",\r\n        IsSelectable: true\r\n\r\n    },\r\n    [FIELDS.ED_LEVEL_MOTHER]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'EdLevelCodeMother',\r\n        Title: \"Parent 1 Education Level\",\r\n        IsSelectable: true\r\n    },\r\n    [FIELDS.FIRST_GEN_IMMIGRANT]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'FirstGenImmigrant',\r\n        Title: 'First Generation Immigrant'\r\n    },\r\n    [FIELDS.ERDCSubsidyExpirationDate]: {\r\n        ...DateFieldType,\r\n        QuestionKey: 'ERDCSubsidyExpirationDate',\r\n        Title: 'ERDC Subsidy Expiration Date'\r\n    },\r\n    [FIELDS.FIRST_GEN_IMMIGRANT]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'FirstGenImmigrant',\r\n        Title: 'First Generation Immigrant'\r\n    },\r\n    [FIELDS.CHILD_CARE_PROVIDER__NAME]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'ChildcareApp.Provider1Name'\r\n    },\r\n    [FIELDS.CHILD_CARE_PROVIDER__ADDRESS]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'ChildcareApp.Provider1Address'\r\n    },\r\n    [FIELDS.CHILD_CARE_PROVIDER__STATE]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'ChildcareApp.Provider1.state'\r\n    },\r\n    [FIELDS.CHILD_CARE_PROVIDER__CITY]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'ChildcareApp.Provider1.city'\r\n    },\r\n    [FIELDS.CHILD_CARE_PROVIDER__ZIP]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'ChildcareApp.Provider1.zip'\r\n    },\r\n    [FIELDS.CHILD_CARE_PROVIDER__PHONE]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'ChildcareApp.Provider1.phone'\r\n    },\r\n    [FIELDS.CHILD_CARE_PROVIDER__START_DATE]: {\r\n        ...DateFieldType,\r\n        QuestionKey: 'ChildcareApp.Provider1.startedOnDate'\r\n    },\r\n    [FIELDS.CHILD_CARE_PROVIDER__NEW]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ChildcareApp.Provider1.newProviderFlag'\r\n    },\r\n    [FIELDS.CHILD_CARE_PROVIDER__LISTED]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ChildcareApp.Provider1DHSlistedFlag'\r\n    },\r\n    [FIELDS.CHILD_CARE_PROVIDER__REGISTERED]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ChildcareApp.Provider1DHSregisterCertFlag'\r\n    },\r\n    [FIELDS.CHILD_CARE_PROVIDER__PARENT]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ChildcareApp.Provider1birthPsppartnerFlag'\r\n    },\r\n    [FIELDS.CHILD_CARE_PROVIDER2__NAME]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'ChildcareApp.Provider2.Name'\r\n    },\r\n    [FIELDS.CHILD_CARE_PROVIDER2__ADDRESS]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'ChildcareApp.Provider2.Address'\r\n    },\r\n    [FIELDS.CHILD_CARE_PROVIDER2__STATE]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'ChildcareApp.Provider2.state'\r\n    },\r\n    [FIELDS.CHILD_CARE_PROVIDER2__CITY]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'ChildcareApp.Provider2.city'\r\n    },\r\n    [FIELDS.CHILD_CARE_PROVIDER2__ZIP]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'ChildcareApp.Provider2.zip'\r\n    },\r\n    [FIELDS.CHILD_CARE_PROVIDER2__PHONE]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'ChildcareApp.Provider2.phone'\r\n    },\r\n    [FIELDS.CHILD_CARE_PROVIDER2__START_DATE]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'ChildcareApp.Provider2.startedOnDate'\r\n    },\r\n    [FIELDS.CHILD_CARE_PROVIDER2__NEW]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ChildcareApp.Provider2.newProviderFlag'\r\n    },\r\n    [FIELDS.CHILD_CARE_PROVIDER2__LISTED]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ChildcareApp.Provider2DHSlistedFlag'\r\n    },\r\n    [FIELDS.CHILD_CARE_PROVIDER2__REGISTERED]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ChildcareApp.Provider2DHSregisterCertFlag'\r\n    },\r\n    [FIELDS.CHILD_CARE_PROVIDER2__PARENT]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ChildcareApp.Provider2birthPsppartnerFlag'\r\n    },\r\n    [FIELDS.NATIONAL_GUARD__UNIT]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'AssignedUnit',\r\n        IsSelectable: true\r\n    },\r\n    [FIELDS.NATIONAL_GUARD__CREDITS_PRESUMMER]: {\r\n        ...IntegerFieldType,\r\n        QuestionKey: 'AnticipatedCreditsPreSummer'\r\n    },\r\n    [FIELDS.NATIONAL_GUARD__CREDITS_FALL]: {\r\n        ...IntegerFieldType,\r\n        QuestionKey: 'AnticipatedCreditsFall'\r\n    },\r\n    [FIELDS.NATIONAL_GUARD__CREDITS_WINTER]: {\r\n        ...IntegerFieldType,\r\n        QuestionKey: 'AnticipatedCreditsWinter'\r\n    },\r\n    [FIELDS.NATIONAL_GUARD__CREDITS_SPRING]: {\r\n        ...IntegerFieldType,\r\n        QuestionKey: 'AnticipatedCreditsSpring'\r\n    },\r\n    [FIELDS.NATIONAL_GUARD__CREDITS_POSTSUMMER]: {\r\n        ...IntegerFieldType,\r\n        QuestionKey: 'AnticipatedCreditsPostSummer'\r\n    },\r\n    [FIELDS.UNDERGRAD_GPA]: {\r\n        ...DecimalFieldType,\r\n        QuestionKey: 'collegeGPA',\r\n        Title: \"Undergraduate GPA\"\r\n    },\r\n    [FIELDS.GRADUATE_GPA]: {\r\n        ...DecimalFieldType,\r\n        QuestionKey: 'graduateGPA',\r\n        Title: \"Graduate GPA\"\r\n    },\r\n    [FIELDS.FINISHED_COMM_COLLEGE]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'finishedCommClgFlag',\r\n        Title: \"Finiched Community College\"\r\n    },\r\n    [FIELDS.FINISHED_BACHELORS_DEGREE]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'finished4yearClgFlag',\r\n        Title: \"Finished 4-Year Degree\"\r\n    },\r\n    [FIELDS.PRONOUNS__FEMALE]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'FemininePronouns',\r\n        Title: \"She/Her\"\r\n    },\r\n    [FIELDS.PRONOUNS__MALE]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'MasculinePronouns',\r\n        Title: \"He/Him\"\r\n    },\r\n    [FIELDS.PRONOUNS__NEUTRAL]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'NeutralPronouns',\r\n        Title: \"They/Them\"\r\n    },\r\n    [FIELDS.PRONOUNS__OTHER]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'OtherPronouns',\r\n        Title: \"Other Pronouns\"\r\n    },\r\n    [FIELDS.CAREER_GOAL]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'careerField',\r\n        Title: \"Your Intended Career/Profession\"\r\n\r\n    },\r\n    [FIELDS.OTHER_NAMES]: {\r\n        ...NameFieldType,\r\n        QuestionKey: 'AppStudentLogin.OtherNames',\r\n        Title: \"Your Additional or Previous Name(s)\"\r\n    },\r\n    [FIELDS.AGE_CHILD]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'AgeChild'\r\n    },\r\n    [FIELDS.HIGHSCHOOL_TYPE]: {\r\n        ...IntegerFieldType,\r\n        QuestionKey: 'HsTypeCode'\r\n    },\r\n    [FIELDS.HIGHSCHOOL]: {\r\n        ...HighSchoolFieldType,\r\n        QuestionKey: 'HighSchool',\r\n        Title: \"High School\",\r\n        IsSelectable: true\r\n    },\r\n    [FIELDS.ACTIVITY_SCHOOL]: {\r\n        ...ActivityFieldType,\r\n        QuestionKey: 'Activities',\r\n        Title: 'Activities'\r\n    },\r\n    [FIELDS.ACTIVITY_VOLUNTEER]: {\r\n        ...ActivityFieldType,\r\n        QuestionKey: 'Activities',\r\n        Title: 'Activities'\r\n    },\r\n    [FIELDS.ACTIVITY_WORK]: {\r\n        ...ActivityFieldType,\r\n        QuestionKey: 'Activities',\r\n        Title: 'Activities'\r\n    },\r\n    [FIELDS.HAS_NO_WORK_ACTIVITIES]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'HasNoWorkActivities'\r\n    },\r\n    [FIELDS.HAS_NO_SCHOOL_ACTIVITIES]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'HasNoSchoolActivities'\r\n    },\r\n    [FIELDS.HAS_NO_VOLUNTEER_ACTIVITIES]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'HasNoVolunteerActivities'\r\n    },\r\n    [FIELDS.ACTIVITIES_COMPLETE]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ActivitiesChartFlag'\r\n    },\r\n    [FIELDS.PAST_COLLEGE]: {\r\n        ...CollegeFieldType,\r\n        QuestionKey: 'collegehistories',\r\n        Title: 'College History'\r\n    },\r\n    [FIELDS.CURRENT_COLLEGE]: {\r\n        ...CollegeFieldType,\r\n        QuestionKey: 'collegehistories',\r\n        Title: 'College History'\r\n    },\r\n    [FIELDS.DEGREES]: {\r\n        ...DegreeFieldType,\r\n        QuestionKey: 'Degrees',\r\n        Title: 'Degrees'\r\n    },\r\n    [FIELDS.CHAFEE__PRESUMMER_1]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ChafeeApp.TermSummer0PrevFlag'\r\n    },\r\n    [FIELDS.CHAFEE__FALL_1]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ChafeeApp.TermFall1PrevFlag'\r\n    },\r\n    [FIELDS.CHAFEE__WINTER_1]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ChafeeApp.TermWinter2PrevFlag'\r\n    },\r\n    [FIELDS.CHAFEE__SPRING_1]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ChafeeApp.TermSpring3PrevFlag'\r\n    },\r\n    [FIELDS.CHAFEE__POSTSUMMER_1]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ChafeeApp.TermSummer4PrevFlag'\r\n    },\r\n    [FIELDS.CHAFEE__PRESUMMER_2]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ChafeeApp.TermSummer0Flag'\r\n    },\r\n    [FIELDS.CHAFEE__FALL_2]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ChafeeApp.TermFall1Flag'\r\n    },\r\n    [FIELDS.CHAFEE__WINTER_2]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ChafeeApp.TermWinter2Flag'\r\n    },\r\n    [FIELDS.CHAFEE__SPRING_2]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ChafeeApp.TermSpring3Flag'\r\n    },\r\n    [FIELDS.CHAFEE__POSTSUMMER_2]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ChafeeApp.TermSummer4Flag'\r\n    },\r\n    [FIELDS.HIGHSCHOOL_TYPE]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'HsTypeCode',\r\n        IsSelectable: true\r\n    },\r\n    [FIELDS.CHAFEE__FOSTER_CARE]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ChafeeApp.FosterCareFlag'\r\n    },\r\n    [FIELDS.CHAFEE__FOSTER_DHS]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ChafeeApp.FCbyDHSflag'\r\n    },\r\n    [FIELDS.CHAFEE__FOSTER_OTHER_STATE]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ChafeeApp.FCbyOtherStateFlag'\r\n    },\r\n    [FIELDS.CHAFEE__FOSTER_TRIBAL]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ChafeeApp.FCbyTribalFlag'\r\n    },\r\n    [FIELDS.CHAFEE__ADOPTED]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ChafeeApp.FFYadoptedFlag'\r\n    },\r\n    [FIELDS.CHAFEE__TRIBE]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'ChafeeApp.FCtribe'\r\n    },\r\n    [FIELDS.CHAFEE__OTHER_STATE_ID]: {\r\n        ...IntegerFieldType,\r\n        QuestionKey: 'ChafeeApp.FCbyOtherStateId'\r\n    },\r\n    [FIELDS.CHAFEE__FOSTER_QUALIFIED]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'ChafeeApp.FormerFosterCareQualifiedFlag'\r\n    },\r\n    [FIELDS.CHAFEE__ADOPTION_FINALIZED]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'ChafeeApp.FinalizedOnOrAfterGivenDate'\r\n    },\r\n    [FIELDS.COMM_COLLEGE_START_TERM]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'OregonPromiseApp.OrpCohort',\r\n        IsSelectable: true\r\n    },\r\n    [FIELDS.CHILDREN]: {\r\n        ...ChildFieldType,\r\n        QuestionKey: 'ChildcareApp.Children'\r\n    },\r\n    [FIELDS.NATIONAL_GUARD__BRANCH]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'NationalGuardBranch',\r\n        IsSelectable: true\r\n    },\r\n    [FIELDS.PROOF_GPA__UPLOAD]: {\r\n        ...TranscriptFieldType,\r\n        QuestionKey: 'ProofOfGpa'\r\n    },\r\n    [FIELDS.PROOF_GPA__MAIL]: {\r\n        ...TranscriptFieldType,\r\n        QuestionKey: 'ProofOfGpa'\r\n    },\r\n    [FIELDS.PROOF_GPA__REGISTRAR]: {\r\n        ...TranscriptFieldType,\r\n        QuestionKey: 'ProofOfGpa'\r\n    },\r\n    [FIELDS.FALL_HS_TRANSCRIPTS_DIGITAL]: {\r\n        ...TranscriptFieldType,\r\n        QuestionKey: 'FallHighSchoolTranscript'\r\n    },\r\n    [FIELDS.FALL_HS_TRANSCRIPTS_MAIL]: {\r\n        ...TranscriptFieldType,\r\n        QuestionKey: 'FallHighSchoolTranscript'\r\n    },\r\n    [FIELDS.FALL_HS_TRANSCRIPTS_REGISTRAR]: {\r\n        ...TranscriptFieldType,\r\n        QuestionKey: 'FallHighSchoolTranscript'\r\n    },\r\n    [FIELDS.FALL_COLLEGE_TRANSCRIPTS_DIGITAL]: {\r\n        ...TranscriptFieldType,\r\n        QuestionKey: 'FallCollegeTranscripts'\r\n    },\r\n    [FIELDS.FALL_COLLEGE_TRANSCRIPTS_MAIL]: {\r\n        ...TranscriptFieldType,\r\n        QuestionKey: 'FallCollegeTranscripts'\r\n    }, \r\n    [FIELDS.FALL_COLLEGE_TRANSCRIPTS_DURING_HS_DIGITAL]: {\r\n        ...TranscriptFieldType,\r\n        QuestionKey: TRANSCRIPT_QUESTIONS.FALL_COLLEGE_DURING_HS.name\r\n    },\r\n    [FIELDS.FALL_COLLEGE_TRANSCRIPTS_DURING_HS_MAIL]: {\r\n        ...TranscriptFieldType,\r\n        QuestionKey: TRANSCRIPT_QUESTIONS.FALL_COLLEGE_DURING_HS.name\r\n    },\r\n    [FIELDS.FALL_COLLEGE_TRANSCRIPTS_PRIOR_DIGITAL]: {\r\n        ...TranscriptFieldType,\r\n        QuestionKey: TRANSCRIPT_QUESTIONS.FALL_COLLEGE_PRIOR.name\r\n    },\r\n    [FIELDS.FALL_COLLEGE_TRANSCRIPTS_PRIOR_MAIL]: {\r\n        ...TranscriptFieldType,\r\n        QuestionKey: TRANSCRIPT_QUESTIONS.FALL_COLLEGE_PRIOR.name\r\n    },\r\n    [FIELDS.FALL_COLLEGE_TRANSCRIPTS_RECENT_DIGITAL]: {\r\n        ...TranscriptFieldType,\r\n        QuestionKey: TRANSCRIPT_QUESTIONS.FALL_COLLEGE_RECENT.name\r\n    },\r\n    [FIELDS.FALL_COLLEGE_TRANSCRIPTS_RECENT_MAIL]: {\r\n        ...TranscriptFieldType,\r\n        QuestionKey: TRANSCRIPT_QUESTIONS.FALL_COLLEGE_RECENT.name\r\n    },\r\n    [FIELDS.GED_IN_PROGRESS_FLAG]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'GEDinProgressFlag'\r\n    },\r\n    [FIELDS.GED_SCORE]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'GEDscore',\r\n        Title: 'GED'\r\n    },\r\n    [FIELDS.ESSAY_1]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'Essays/ps1',\r\n        Title: \"Personal Statement #1\"\r\n    },\r\n    [FIELDS.ESSAY_2]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'Essays/ps2',\r\n        Title: \"Personal Statement #2\"\r\n    },\r\n    [FIELDS.ESSAY_3]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'Essays/ps3',\r\n        Title: \"Personal Statement #3\"\r\n    },\r\n    [FIELDS.ESSAY_4]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'Essays/ps4',\r\n        Title: \"Personal Statement #4\",\r\n        Question: \"Optional: Is there any additional information you would like the selection committee members to know? This could include financial situations not reflected on the FAFSA or ORSAA or other information not covered in the application. This statement is not required and will not have any negative effect on the application if left blank.\"\r\n    },\r\n    [FIELDS.SPRING_COLLEGE_TRANSCRIPTS_DIGITAL]: {\r\n        ...TranscriptFieldType,\r\n        QuestionKey: 'SpringCollegeTranscripts'\r\n    },\r\n    [FIELDS.SPRING_COLLEGE_TRANSCRIPTS_MAIL]: {\r\n        ...TranscriptFieldType,\r\n        QuestionKey: 'SpringCollegeTranscripts'\r\n    },\r\n    [FIELDS.SPRING_HS_TRANSCRIPTS_DIGITAL]: {\r\n        ...TranscriptFieldType,\r\n        QuestionKey: 'SpringHighSchoolTranscript'\r\n    },\r\n    [FIELDS.SPRING_HS_TRANSCRIPTS_MAIL]: {\r\n        ...TranscriptFieldType,\r\n        QuestionKey: 'SpringHighSchoolTranscript'\r\n    },\r\n    [FIELDS.CHILD_CARE_EXPENSES_DIGITAL]: {\r\n        ...DocumentFieldType,\r\n        QuestionKey: 'ProofOfChildcareExpense'\r\n    },\r\n    [FIELDS.CHILD_CARE_EXPENSES_MAIL]: {\r\n        ...DocumentFieldType,\r\n        QuestionKey: 'ProofOfChildcareExpense'\r\n    },\r\n    [FIELDS.ETHNICITY__OTHER]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'EthnicOther'\r\n    },\r\n    [FIELDS.HAS_DEPENDENT_CHILDREN]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'HasDependentChildren'\r\n    },\r\n    [FIELDS.IS_NATIONAL_GUARD_MEMBER]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'IsNationalGuardMember'\r\n    },\r\n    [FIELDS.IS_TEACHER_CANDIDATE_MEMBER]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'IsTeacherCandidateMember'\r\n    },\r\n    [FIELDS.TEACHER_WORKING]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: \"TeacherWorking\"\r\n    },\r\n    [FIELDS.TEACHER_WORKING20HOURS]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'TeacherWorking20Hours',\r\n    },\r\n    [FIELDS.TEACHER_WORKINGKTHRU12]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'TeacherWorkingKthru12',\r\n    },\r\n    [FIELDS.TEACHER_ROLE]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'TeachingRole',\r\n    },\r\n    [FIELDS.TEACHER_DISTRICT]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'TeachingDistrict',\r\n    },\r\n    [FIELDS.UNLISTED_TEACHER_DISTRICT]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'UnlistedTeachingDistrict',\r\n    },\r\n    [FIELDS.TEACHER_FLUENCY]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'TeacherFluency',\r\n    },\r\n    [FIELDS.TEACHER_LISENCE_BEGIN]:{\r\n        ...DateFieldType,\r\n        QuestionKey:  'TeacherLicenseBegin',\r\n    },\r\n    [FIELDS.TEACHER_LICENSE_COMPLETE]: {\r\n        ...DateFieldType,\r\n        QuestionKey: 'TeacherLicenseProgramComplete',\r\n    },\r\n    [FIELDS.TEACHER_LICENSE_TYPE]:{\r\n        ...TextFieldType,\r\n        QuestionKey:  'TeacherLicenseType',\r\n    },\r\n    [FIELDS.TEACHER_LICENSE_ENDORSEMENTS]: {\r\n        ...BooleanFieldType,\r\n        QuestionKey: 'TeacherLicenseEndorsements',\r\n    },\r\n    [FIELDS.TEACHER_SCHOLARS_REFERRAL]: {\r\n        ...TextFieldType,\r\n        QuestionKey: 'TeacherScholarsAppReferral'\r\n    }\r\n}\r\n\r\nclass FieldDescriptor{\r\n\r\n    constructor(fieldKey, data){\r\n        this._fieldKey = fieldKey;\r\n        this._data = data;\r\n    }\r\n    \r\n    get fieldKey(){\r\n        return this.fieldKey\r\n    }\r\n\r\n    get questionKey(){\r\n        return this._data.QuestionKey;\r\n    }\r\n\r\n    get question(){\r\n        return this._data.Question ?? this._data.Title ?? this._data.Name;\r\n    }\r\n}\r\n\r\n/**\r\n * get slightly smarter description of each front-end question field\r\n * @param {string} fieldKey \r\n * @returns \r\n */\r\nexport function getField(fieldKey){\r\n    const data = QuestionKeyMapping[fieldKey];\r\n    if(!data)\r\n        return null;\r\n\r\n    return new FieldDescriptor(fieldKey, data);\r\n}\r\n/**\r\n * \r\n * @param {string} questionKey \r\n * @returns {*} first QuestionKeyMapping for entry\r\n */\r\nexport const getQuestionInfo = (questionKey) => {\r\n    if (!questionKey)\r\n        return null;\r\n\r\n    questionKey = questionKey.toLowerCase();\r\n    const map = Object.values(QuestionKeyMapping).find(q => q.QuestionKey.toLowerCase() === questionKey);\r\n    return map;\r\n}","const reportWebVitals = onPerfEntry => {\r\n  if (onPerfEntry && onPerfEntry instanceof Function) {\r\n    import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n      getCLS(onPerfEntry);\r\n      getFID(onPerfEntry);\r\n      getFCP(onPerfEntry);\r\n      getLCP(onPerfEntry);\r\n      getTTFB(onPerfEntry);\r\n    });\r\n  }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","import { useEffect, useMemo, useState } from \"react\";\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogContentText from '@material-ui/core/DialogContentText';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport { useSelector } from \"react-redux\";\r\nimport auth from '../../auth';\r\n\r\nexport const LogoutWarning = ({ dateTime = new Date().toString() }) => {\r\n\r\n    const parsedTime = useMemo(() => Date.parse(dateTime), [dateTime]);\r\n    const [time, setTime] = useState(Date.now());\r\n    const [expiredTime, setExpiredTime] = useState(null);\r\n    const [expirationAlertTime, setExpirationAlertTime] = useState(null);\r\n    const [open, setOpen] = useState(false);\r\n    const [isAlerted, setIsAlerted] = useState(false);\r\n    const isLoggedIn = useSelector((state)=> state.auth.isLoggedIn);\r\n    \r\n    useEffect(() => {\r\n        const interval = setInterval(\r\n            () => setTime(Date.now()),\r\n            1000,\r\n        );\r\n\r\n        return () => clearInterval(interval);\r\n    }, [parsedTime]);\r\n\r\n    useEffect(() => {\r\n        if(isLoggedIn){\r\n            const expiration = auth.getTokenExpiration();\r\n            setExpiredTime(new Date(expiration));\r\n\r\n            let alertTime = new Date(expiration);\r\n            // Notification time 5 min before expiration\r\n            alertTime?.setMinutes(alertTime?.getMinutes() - 5);\r\n            setExpirationAlertTime(alertTime);\r\n        }\r\n    }, [isLoggedIn]);\r\n\r\n    useEffect(() => {\r\n        if(isLoggedIn && !isAlerted && expirationAlertTime && time > expirationAlertTime){\r\n            setOpen(true);\r\n            setIsAlerted(true);\r\n        }\r\n\r\n        if(isLoggedIn && expiredTime && time > expiredTime){\r\n            auth.logout();\r\n        }\r\n\r\n    }, [time]);\r\n\r\n    function handleClose ()  {\r\n        setOpen(false);\r\n    } \r\n\r\n    return (    \r\n        <Dialog\r\n            open={open}\r\n            onClose={handleClose}\r\n            aria-labelledby=\"modal-title\"\r\n            aria-describedby=\"modal-description\"\r\n            fullWidth={true}\r\n            maxWidth={'sm'}\r\n        >   \r\n             <DialogTitle id=\"modal-title\">\r\n                Your session is about to expire\r\n            </DialogTitle>\r\n            <DialogContent>\r\n                <DialogContentText id=\"alert-dialog-description\">\r\n                    Please take this time to save your work\r\n                </DialogContentText>\r\n            </DialogContent>\r\n            <DialogActions>\r\n                <Button onClick={handleClose} color=\"primary\">\r\n                    Confirm\r\n                </Button>\r\n            </DialogActions>\r\n        </Dialog>\r\n    );\r\n};","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport auth from './../../auth';\r\n\r\nfunction Header({isProfileComplete = false}) {\r\n  const { isLoggedIn } = useSelector((state) => state.auth);\r\n\r\n  const handleLogout = (e) => {\r\n    e.preventDefault();\r\n    auth.logout();\r\n  };\r\n\r\n  /* handle mobile navigation toggle */\r\n  const navigation = document.getElementById('navigation');\r\n  const body = document.getElementsByTagName('body')[0];\r\n\r\n  const toggleNav = () => {\r\n    navigation.classList.toggle('nav-open');\r\n    body.classList.toggle('lock-body');\r\n  };\r\n\r\n  return (\r\n    <div className=\"global-header global-header--portal\" id=\"global-header\">\r\n      <div className=\"wrapper\">\r\n      <div className=\"global-header__layout\">\r\n        <div className=\"global-header__brand\">\r\n          <a className=\"brand\" href=\"#\"><span className=\"sr-only\">Oregon Student Aid</span></a>\r\n        </div>\r\n\r\n        <div className=\"global-header__utility\">\r\n          <a href=\"//oregonstudentaid.gov/feedback\" className=\"link global-header__feedback\">Feedback</a>\r\n          <a target=\"_blank\" href=\"//www.oregon.gov/highered/institutions-programs/ccwd/Documents/Academic%20Approval/Policy%20and%20Process%20Book%20Documents/Glossary.pdf\" className=\"link global-header__glossary\">Glossary</a>\r\n          <a href=\"//oregonstudentaid.gov/contact-us/\" className=\"link global-header__help\">Help</a>\r\n            {\r\n              isLoggedIn && (\r\n                <a href=\"#logout\" className=\"link global-header__logout\" onClick={handleLogout}>\r\n                  <span>Logout &nbsp; </span> <img src='/Vector.svg' />\r\n                </a>\r\n              )\r\n            }\r\n        </div>\r\n\r\n        <div className=\"global-header__navigation\">\r\n          <div className=\"navigation navigation--default\" id=\"navigation\">\r\n            { isLoggedIn && (\r\n            <button aria-haspopup=\"true\" aria-expanded=\"false\" className=\"navigation__toggle\" id=\"navigation__toggle\" tabIndex={0} onClick={toggleNav}>\r\n              <span />\r\n              <span />\r\n              <span />\r\n              <span className=\"sr-only\">Toggle Navigation</span>\r\n            </button> )\r\n            }\r\n\r\n            <div className=\"navigation__drawer\">\r\n              <div className=\"nav-item\">\r\n                <a className=\"nav-item__link nav-item__inner\" name=\"Dashboard\" href=\"/dashboard\">\r\n                  <span className=\"nav-item__label\">Dashboard</span>\r\n                </a>\r\n              </div>\r\n              <div className=\"nav-item\">\r\n                <a className=\"nav-item__link nav-item__inner\" href=\"/profile\">\r\n                  <span className=\"nav-item__label\">Profile</span>\r\n                </a>\r\n              </div>            \r\n              <div className=\"nav-item\">\r\n                <a className=\"nav-item__link nav-item__inner\" href=\"/awards\">\r\n                  <span className=\"nav-item__label\">Awards</span>\r\n                </a>\r\n              </div>\r\n              <div className=\"nav-item\">\r\n                <a className=\"nav-item__link nav-item__inner\" href=\"/history\">\r\n                  <span className=\"nav-item__label\">History</span>\r\n                </a>\r\n              </div>\r\n              <div className=\"nav-item\">\r\n                <a className=\"nav-item__link nav-item__inner\" href=\"/messages\">\r\n                  <span className=\"nav-item__label\">Messages</span>\r\n                </a>\r\n              </div>\r\n              <div className=\"nav-item nav-item--mobile-only\">\r\n                <a href=\"/feedback\" className=\"nav-item__link nav-item__inner\">\r\n                  <span className=\"nav-item__label\">Feedback</span>\r\n                </a>\r\n              </div>\r\n              <div className=\"nav-item nav-item--mobile-only\">\r\n                <a href=\"#glossary\" className=\"nav-item__link nav-item__inner\">\r\n                  <span className=\"nav-item__label\">Glossary</span>\r\n                </a>\r\n              </div>\r\n              <div className=\"nav-item nav-item--mobile-only\">\r\n                <a href=\"#help\" className=\"nav-item__link nav-item__inner\">\r\n                  <span className=\"nav-item__label\">Help</span>\r\n                </a>\r\n              </div>\r\n              <div className=\"nav-item nav-item--mobile-only\">\r\n                {\r\n                  isLoggedIn && (\r\n                    <a href=\"#logout\" className=\"nav-item__link nav-item__inner global-header__logout\" onClick={handleLogout}>\r\n                      <span className=\"nav-item__label\">Logout &nbsp; </span> <img src='/Vector.svg' />\r\n                    </a>\r\n                  )\r\n                }\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n  );\r\n};\r\n\r\nexport default Header;\r\n","import React from 'react';\r\n\r\nimport ImgHECClogo from '../../images/hecc-logo-white.png';\r\n\r\nfunction Footer() {\r\n  return (\r\n      <div className=\"global-footer\">\r\n        <div className=\"global-footer__layout\">\r\n          <div className=\"global-footer__brand\">\r\n            <img\r\n              alt=\"Higher Education Coordinating Commission\"\r\n              src={ImgHECClogo}\r\n            />\r\n            <p className=\"global-footer__legal\">© {new Date().getFullYear()} Higher Education Coordinating Commission</p>\r\n          </div>\r\n\r\n          <div className=\"global-footer__navigation rhythm\">\r\n            <h5 className=\"heading heading--h6\">Quick Links</h5>\r\n            <ul className=\"global-footer__nav\">\r\n              <li className=\"li\">\r\n                <a href=\"#about\" className=\"link\">About</a>\r\n              </li>\r\n              <li className=\"li\">\r\n                <a href=\"#contact\" className=\"link\">Contact</a>\r\n              </li>\r\n              <li className=\"li\">\r\n                <a href=\"#privacy\" className=\"link\">Privacy &amp; Disclaimers</a>\r\n              </li>\r\n              <li className=\"li\">\r\n                <a href=\"#oregon.gov\" className=\"link\">oregon.gov</a>\r\n              </li>\r\n            </ul>\r\n          </div>\r\n\r\n          <div className=\"global-footer__connect rhythm\">\r\n            <h5 className=\"heading heading--h6\">Connect</h5>\r\n            <p>\r\n              OSAC Office\r\n              <br/>\r\n              3225 25th Street SE \r\n              <br/>\r\n              Salem, OR 97302​\r\n            </p>\r\n\r\n            <div className=\"global-footer__social-links\">\r\n              <a className=\"link global-footer__connect-facebook\" href=\"#facebook\">\r\n                <span className=\"sr-only\">facebook</span>\r\n              </a>\r\n              <a className=\"link global-footer__connect-instagram\" href=\"#instagram\">\r\n                <span className=\"sr-only\">Instagram</span>\r\n              </a>\r\n              <a className=\"link global-footer__connect-twitter\" href=\"#twitter\">\r\n                <span className=\"sr-only\">Twitter</span>\r\n              </a>\r\n            </div>\r\n          </div>\r\n\r\n        </div>\r\n      </div>\r\n  );\r\n};\r\n\r\nexport default Footer;","export default \"data:image/png;base64,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\"","import React, { useEffect } from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogContentText from '@material-ui/core/DialogContentText';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport auth from '../../auth';\r\n\r\nconst TIME_UNTIL_LOGOUT_SECONDS = 30;\r\n\r\nexport default function Modal({ open = false, title = '', body = '', handleClose = ()=>{} }) {\r\n\r\n    const createLogoutTimer = () => setTimeout(()=>{\r\n        auth.logout();\r\n    },1000*TIME_UNTIL_LOGOUT_SECONDS);\r\n\r\n    useEffect(()=>{\r\n        let timer;\r\n        if(open){\r\n            timer = createLogoutTimer();\r\n        }\r\n        return () => timer && clearTimeout(timer);\r\n    },[open])\r\n\r\n    return (\r\n        <Dialog\r\n            open={open}\r\n            onClose={handleClose}\r\n            aria-labelledby=\"modal-title\"\r\n            aria-describedby=\"modal-description\"\r\n            fullWidth={true}\r\n            maxWidth={'sm'}\r\n        >   \r\n            {\r\n                title && <DialogTitle id=\"modal-title\">{title}</DialogTitle>\r\n            }\r\n            <DialogContent>\r\n                <DialogContentText id=\"alert-dialog-description\">\r\n                    {body}\r\n                </DialogContentText>\r\n            </DialogContent>\r\n            <DialogActions>\r\n                <Button onClick={handleClose} color=\"primary\">\r\n                    I'm still here\r\n                </Button>\r\n            </DialogActions>\r\n        </Dialog>\r\n    );\r\n}","import React, { useEffect } from 'react';\r\nimport _debounce from 'lodash.debounce'\r\nimport Modal from '../Alerts/Modal';\r\nimport { useState } from 'react';\r\nimport auth from '../../auth';\r\n\r\n\r\nfunction ActivityListener({\r\n    onInactivity\r\n}){\r\n\r\n    const href = window.location.href;\r\n\r\n    const [state, setState] = useState({\r\n        isModalOpen: false,\r\n        timer: null\r\n    })\r\n\r\n    let secondsToTimeout = 60*60; // an hour    \r\n\r\n    const handleClose = () => {\r\n        setState({\r\n            ...state,\r\n            isModalOpen: false\r\n        })\r\n    } \r\n\r\n    // assuming onInactivity prop not changing dynamically\r\n\r\n    \r\n    useEffect(()=>{\r\n\r\n        // do not register listeners if not listening on inactivity\r\n        if(!onInactivity || typeof onInactivity !== 'function'){\r\n            //return\r\n        }\r\n\r\n        let timer;\r\n\r\n        if(timer) clearInterval(timer);\r\n\r\n        const createTimer = () => setInterval(()=>{\r\n            //onInactivity();\r\n            if(!state.isModalOpen){\r\n                setState({\r\n                    ...state,\r\n                    isModalOpen: true\r\n                });\r\n            }\r\n        },1000*secondsToTimeout);\r\n\r\n        const activityHandler = _debounce(()=>{\r\n            if(timer){\r\n                clearInterval(timer);\r\n            }\r\n            timer = createTimer();\r\n        },100,{\r\n            maxWait: 1000,\r\n            leading: false,\r\n            trailing: true\r\n        });\r\n\r\n        document.addEventListener('mousemove', activityHandler);\r\n        document.addEventListener('scroll',activityHandler);\r\n        document.addEventListener('keyup',activityHandler);\r\n\r\n        timer = createTimer();\r\n\r\n        return () => {\r\n            document.removeEventListener('mousemove', activityHandler);\r\n            document.removeEventListener('scroll',activityHandler);\r\n            document.removeEventListener('keyup',activityHandler);\r\n        };\r\n\r\n    },[]);\r\n\r\n  return (\r\n      <>\r\n        <Modal open={state.isModalOpen} handleClose={handleClose} title=\"You are about to be logged out due to inactivity. \" body=\"Please acknowledge you are still here to be prevented from signing out.\"/>\r\n      </>\r\n  )\r\n}\r\n\r\nexport default ActivityListener;","import React, { useEffect, useState } from 'react';\r\nimport Header from './Header';\r\nimport Footer from './Footer'\r\nimport { useHistory } from 'react-router';\r\nimport _debounce from 'lodash.debounce';\r\nimport ActivityListener from './../Utility/ActivityListener';\r\nimport {useSelector} from \"react-redux\";\r\nimport apiClient from \"../../utils/API\";\r\n\r\nfunction PortalView({children}) {\r\n\r\n  const history = useHistory();\r\n\r\n  const [showHeightOffsetDOM, setShowHeightOffsetDOM] = useState(false);\r\n  const formState = useSelector((state) => state.form);\r\n  const [isProfileComplete, setIsProfileComplete] = React.useState(true);\r\n  const { isLoggedIn } = useSelector((state) => state.auth);\r\n\r\n\r\n  const view = children.props.name;\r\n\r\n  useEffect(()=>{\r\n    /* TO DO JJB */\r\n    const handleScroll = _debounce(()=>{\r\n      const y = window.scrollY;\r\n\r\n      const fromBottom = (document.body.scrollHeight - y);\r\n\r\n      const footer = document.getElementsByTagName('footer');\r\n      if(footer.length){\r\n        const footerHeight = footer[0].offsetHeight;\r\n\r\n        if(y > 90 && (fromBottom-footerHeight*2 - 200 > 0)){\r\n          setShowHeightOffsetDOM(true);\r\n        }\r\n        else {\r\n          setShowHeightOffsetDOM(false);\r\n        }\r\n      }\r\n    },150,{\r\n      trailing: true,\r\n      leading: false\r\n    });\r\n    window.addEventListener('scroll', handleScroll);\r\n    return () => window.removeEventListener('scroll', handleScroll);\r\n\r\n  },[]);\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <div className=\"pageshell pageshell--fullwidth\">\r\n        <Header isProfileComplete={isProfileComplete}/>\r\n        <ActivityListener/>\r\n        <div className=\"pageshell__main\">\r\n          <div className=\"pageshell__primary\">\r\n            {children}\r\n          </div>\r\n        </div>\r\n        <Footer />\r\n      </div>\r\n    </React.Fragment>\r\n  );\r\n};\r\n\r\nexport default PortalView;\r\n","import React from 'react';\r\n\r\nconst FieldRow = ({ spacing = 3, xs = 12, children, ...props}) =>{\r\n  return (\r\n    <div className=\"fieldrow rhythm\" {...props}>\r\n      {children}\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default FieldRow;","import React from 'react';\r\n\r\nconst FieldSection = ({ title, subtitle, children, isRequired, isSoftRequired, ...props })=>{\r\n  return (\r\n    <div className=\"field-section rhythm\">\r\n      {\r\n        !!title && (\r\n          <h4 className=\"heading heading--h5\">{title}\r\n          { isRequired && <span style={{color: 'red'}}> *</span> }\r\n          { isSoftRequired && !isRequired? <span style={{color: 'red'}}> *</span> : null}\r\n          </h4>\r\n        )\r\n      }\r\n      {\r\n        !!subtitle && (\r\n          <p dangerouslySetInnerHTML={{__html: subtitle}}></p>\r\n        )\r\n      }\r\n      { children && \r\n        <div className=\"field-section__content rhythm\">\r\n          {children}\r\n        </div> \r\n      }\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default FieldSection;","import { Grid, makeStyles } from '@material-ui/core';\r\nimport React from 'react';\r\n\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n    root: props => ({\r\n      marginTop: props.paddingTop ? theme.spacing(1.5) : 0,\r\n    })\r\n  })); \r\n\r\nconst FieldSection = ({ md = 3, xs = 12, children, className = '', ...props })=>{\r\n    const classes = useStyles();\r\n    return (\r\n      <div className=\"fieldslot rhythm\" {...props}>\r\n        {children}\r\n      </div>\r\n    )\r\n}\r\n\r\nexport default FieldSection;","import { useEffect, useState } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport _get from 'lodash.get';\r\nimport { actions } from \"../../store\";\r\n\r\nexport const repeatableFieldName = (parentName, index = null, ...properties) => {\r\n  return `${parentName}[${index}]${properties.length ? '.' : ''}${properties.join('.')}`\r\n}\r\n\r\nconst RepeatableField = ({ name, initialCount = 0, children }) => {\r\n\r\n  const [count, setCount] = useState(initialCount);\r\n  const [deletedIndices, setDeletedIndices] = useState([]);\r\n  const [availableIndices, setAvailableIndices] = useState([...new Array(count)].map((_, i) => i));\r\n\r\n  // keep track of previously deleted indices to disable auto population of value from redux store\r\n  const [previouslyDeletedIndices, setPreviouslyDeletedIndices] = useState({});\r\n\r\n  // get redux state and enuerate field array if exists.\r\n  const formState = useSelector(state => state.form);\r\n  const existingFieldLength = _get(formState, `fields.${name}.length`, 0);\r\n\r\n\r\n  useEffect(() => {\r\n    if (existingFieldLength > 0) {\r\n      setAvailableIndices([...new Array(existingFieldLength)].map((_, i) => i))\r\n      setCount(existingFieldLength);\r\n    }\r\n  }, [existingFieldLength])\r\n\r\n  const handleAdd = () => {\r\n    let newIndex;\r\n    // re-use past deleted indices\r\n    if (deletedIndices.length) {\r\n      // gets the lowest valued index in deletedIndices\r\n      newIndex = Math.min(...deletedIndices);\r\n      setDeletedIndices(deletedIndices.filter(i => i !== newIndex));\r\n    }\r\n    else {\r\n      newIndex = count;\r\n      setCount(newIndex + 1);\r\n    }\r\n    setAvailableIndices([\r\n      ...availableIndices,\r\n      newIndex\r\n    ])\r\n    // stateChanger(true)\r\n  }\r\n  const handleDelete = (index) => () => {\r\n    const id = _get(formState, `fields.${name}.[${index}].id`, -1);\r\n    if (id !== -1) {\r\n      actions.addDeletedRepeatableFieldId({\r\n        name,\r\n        id\r\n      })\r\n    }\r\n\r\n    setDeletedIndices([\r\n      ...deletedIndices,\r\n      index\r\n    ]);\r\n    setAvailableIndices(availableIndices.filter(i => i !== index));\r\n    setPreviouslyDeletedIndices({\r\n      ...previouslyDeletedIndices,\r\n      [index]: 1\r\n    })\r\n  }\r\n\r\n  return children(availableIndices, handleAdd, handleDelete, previouslyDeletedIndices);\r\n}\r\n\r\nexport default RepeatableField;\r\n","import React, { useEffect } from 'react';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport _get from 'lodash.get';\r\nimport { useSelector } from 'react-redux';\r\nimport FormSerializer from '../../store/form/serializer';\r\nimport { getQueryStrings, getRepeatableFieldIndex, getRepeatableFieldRootName } from '../../utils';\r\nimport { ID, REPEATABLE_FIELDS } from '../../store/form/fields';\r\nimport { repeatableFieldName } from './RepeatableField';\r\n\r\n\r\nfunction FieldValueAdapter({ name, isValueObject = false, withAutoPopulate = true }) {\r\n\r\n    \r\n\r\n    const { setValue, getValues, formState: reactHookFormState } = useFormContext({ mode: 'onBlur' });\r\n\r\n    const formState = useSelector((state) => state.form);\r\n    const reduxFieldValue = _get(formState, `fields.${name}.value`);\r\n\r\n    const isTruthy = (value) => typeof value === 'number' || value;\r\n    const isFalsy = (value) => !isTruthy(value);\r\n\r\n    const getRepeatableFieldId = (rootName, index) => {\r\n        return getValues(repeatableFieldName(rootName,index,ID));\r\n    }\r\n\r\n\r\n\r\n\r\n    useEffect(() => {\r\n\r\n        // if the field is repeatable it should not autopopulate previously deleted fields\r\n        const rootName = getRepeatableFieldRootName(name);\r\n        const deletedIdArray = _get(formState,`deletedRepeatableFieldIds.${rootName}`,[]);\r\n        if(deletedIdArray.length){\r\n            const repeatableFieldIndex = getRepeatableFieldIndex(name);\r\n            // if the underlying input field is NOT the HiddenInput representing the ID value, then it shouldn't autopopulate\r\n            if(name !== repeatableFieldName(rootName,repeatableFieldIndex,ID)) {\r\n                const isDeletedRepeatableField  = deletedIdArray.includes(getRepeatableFieldId(rootName,repeatableFieldIndex));\r\n                if(isDeletedRepeatableField) return;\r\n            }\r\n        }\r\n\r\n        //setTimeout(()=>{\r\n            if(!withAutoPopulate) {\r\n                return;\r\n            }\r\n            const reactHookFormValue = getValues(name);\r\n            if (isFalsy(reactHookFormValue) && isTruthy(reduxFieldValue)) {            \r\n                if(isValueObject){\r\n                    console.debug('Setting value object', name, {\r\n                        value: reduxFieldValue\r\n                    })\r\n                    setValue(name, {\r\n                        value: reduxFieldValue\r\n                    })\r\n                } else {\r\n                    console.debug('Setting value', name, {\r\n                        value: reduxFieldValue\r\n                    })\r\n                    setValue(name, reduxFieldValue);\r\n                }\r\n            }\r\n            else if(isFalsy(reduxFieldValue)){\r\n                console.debug(`Did not find redux value for ${`fields.${name}.value`}`)\r\n            }\r\n            else {\r\n                console.debug(`Found existing react hook form value for ${`fields.${name}.value`}`)\r\n            }\r\n        //})\r\n    }, [reduxFieldValue]);\r\n\r\n    const displayKeys = getQueryStrings()?.displayKeys;\r\n    let debugMessage = displayKeys === 'field' ? name : (displayKeys === 'question' ? FormSerializer.getQuestionKey(name) : '');\r\n    return debugMessage ? <span>|{debugMessage}| {reduxFieldValue}</span> : null;\r\n}\r\n\r\nexport default FieldValueAdapter;","import { Controller } from 'react-hook-form';\r\nimport FieldValueAdapter from './Utility/FieldValueAdapter';\r\n\r\nexport const checkName = (name, props) => {\r\n    if (!name) {\r\n        throw new Error(`no name selected for field with label ${props.label || props.inputLabel}`);\r\n    };\r\n};\r\nexport const checkRules = (rules, isRequired) => {\r\n    let defaultRules = { required: { value: isRequired || false, message: 'Field required' } };\r\n    const isRulesSet = typeof rules === 'object' && rules;\r\n    return rules = isRulesSet ? Object.assign(defaultRules, rules) : defaultRules;\r\n}\r\n\r\n/**\r\n * \r\n * @param {*} Component  child component\r\n * @param {*} rules \r\n * @param {*} options \r\n * @returns {Func<Component>} functional syntax to create a new decorated component index of type Component\r\n */\r\nexport default function InputDecorator(Component, rules, options = {}) {\r\n\r\n    /**\r\n     * @returns {Component} in functional syntax \r\n     */\r\n    return function ({ useController = true, withAutoPopulate, ...props }) {\r\n        useController && checkName(props.name, props);\r\n        const newRules = checkRules(props.rules || rules, props.isRequired);\r\n\r\n\r\n        const isValueObject = options.isValueObject;\r\n        return (\r\n            useController ?\r\n                <>\r\n                    <Controller\r\n                        name={props.name}\r\n                        defaultValue={props.defaultValue || null}\r\n                        rules={newRules}\r\n                        render={({ onChange, onBlur, value, ref }) => (\r\n                            <Component onChange={onChange} onBlur={onBlur} value={value} ref={ref} {...props} />\r\n                        )}\r\n                    />\r\n                    <FieldValueAdapter name={props.name} isValueObject={isValueObject} withAutoPopulate={withAutoPopulate} />\r\n                </>\r\n                :\r\n                <Component rules={newRules} {...props} />\r\n        );\r\n    };\r\n};\r\n\r\n","/*import React, { Fragment, useEffect } from \"react\";\r\nimport InputDecorator from './InputDecorator';\r\nimport 'date-fns';\r\nimport DateFnsUtils from '@date-io/date-fns';\r\nimport {\r\n  MuiPickersUtilsProvider,\r\n  KeyboardDatePicker,\r\n} from '@material-ui/pickers';\r\n\r\nfunction InlineDatePickerDemo({ label, format='MM/dd/yyyy', placeholder, ...props}) {\r\n  if (props.value ==='') props.value = new Date();\r\n\r\n  return (\r\n    <div onBlur={props.onBlur} >\r\n    <MuiPickersUtilsProvider utils={DateFnsUtils} >\r\n      <KeyboardDatePicker\r\n        disableToolbar\r\n        variant=\"inline\"\r\n        format={format}\r\n        margin=\"normal\"\r\n        label={label}\r\n        value={props.value}\r\n        onChange={props.onChange}\r\n        inputVariant=\"outlined\"\r\n        placeholder={placeholder}\r\n        KeyboardButtonProps={{\r\n          'aria-label': 'change date',\r\n        }}\r\n        {...props}\r\n        />\r\n    </MuiPickersUtilsProvider>\r\n    </div>\r\n  );\r\n}\r\n\r\nexport default InputDecorator(InlineDatePickerDemo);\r\n*/\r\n\r\nimport * as React from 'react';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport AdapterDateFns from '@material-ui/lab/AdapterDateFns';\r\nimport LocalizaitonProvider from '@material-ui/lab/LocalizationProvider';\r\nimport DatePicker from '@material-ui/lab/DatePicker';\r\nimport InputDecorator from './InputDecorator';\r\nimport { useTheme } from '@material-ui/core/styles';\r\nimport { InputLabel, makeStyles } from '@material-ui/core';\r\nimport moment from 'moment';\r\nimport { get } from 'lodash'\r\nconst useStyles = makeStyles((theme) => ({\r\n  root: {\r\n    flexGrow: 1,\r\n    marginTop: 0,\r\n    background: 'white',\r\n    borderRadius: \"5px\",\r\n    '& > * > *': {\r\n      borderRadius: \"5px\",\r\n    },\r\n    '& input': {\r\n      height: '10px',\r\n      fontSize: \"0.9rem\",\r\n    },\r\n  },\r\n}));\r\n\r\nfunction MaskedDatePicker({name, label, helperText = null, style, isRequired, minDate, disableFuture, disabled, ...props}) {\r\n  const classes = useStyles();\r\n  const theme = useTheme();\r\n  const methods = useFormContext({ mode: 'onBlur' });\r\n  const { errors } = methods;\r\n  const error = get(errors, name);\r\n  const [value, setValue] = React.useState(new Date());\r\n  if (props.value ==='') props.value = null;\r\n\r\n\r\n  return (\r\n    <div onBlur={props.onBlur} className=\"masked-date-picker\" style={{ marginTop: '1.5rem' }}>\r\n      <LocalizaitonProvider dateAdapter={AdapterDateFns}>\r\n        <InputLabel>\r\n          <span style={{whiteSpace: 'normal'}}>{label}</span>\r\n          {\r\n            isRequired && (\r\n              <span style={{color:'red'}}>&nbsp; *</span>\r\n            )\r\n          }\r\n        </InputLabel>\r\n        <DatePicker\r\n          disabled={disabled}\r\n          views={['year','month','day']}\r\n          value={moment(props.value)}\r\n          minDate={minDate}\r\n          maxDate={disableFuture === true ? (new Date()) : undefined }\r\n          onChange={(date)=>{ props.onChange(moment(date).format('YYYY-MM-DD')) }}\r\n          renderInput={(params) => (\r\n            <TextField\r\n              onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n              disabled={disabled}\r\n              {...params}\r\n              fullWidth={true}\r\n              margin=\"normal\"\r\n              helperText={helperText}\r\n              variant=\"outlined\"\r\n              placeholder={label}\r\n              style={style}\r\n              className={classes.root}\r\n              error={!!error}\r\n            />\r\n          )}\r\n        />\r\n      </LocalizaitonProvider>\r\n      {\r\n        error?.message && (\r\n          <div style={{ color: 'red', fontSize: '0.875rem' }}>\r\n              {error?.message}\r\n          </div>\r\n        )\r\n      }\r\n    </div>\r\n  );\r\n}\r\n\r\nexport default InputDecorator(MaskedDatePicker);\r\n","import React from 'react';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport { InputLabel } from '@material-ui/core';\r\nimport InputDecorator from './InputDecorator';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport _get from 'lodash.get';\r\n\r\nexport function Input({ label, inputLabel, inputProps, description, rules, isRequired = false, isSoftRequired = false, name, defaultValue, HelperTextComponent, placeholder,...props }) {\r\n\r\n  const { errors } = useFormContext({ mode: 'onBlur' });\r\n  const error = _get(errors,name);\r\n\r\n  return (\r\n    <div className=\"input-wrapper\">\r\n      <InputLabel>\r\n        {inputLabel}\r\n        { // required: show red * and prevent user from saving if null\r\n          isRequired && ( <span className=\"required\"> *</span> ) }\r\n        { // isSoftRequired: show red * but do not prevent user from saving if null\r\n          isSoftRequired && !isRequired\r\n                        ? ( <span className=\"required\"> *</span> ) \r\n                        : null }\r\n      </InputLabel>\r\n\r\n      <TextField\r\n        onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n        fullWidth={true}\r\n        placeholder={placeholder ?? inputLabel}\r\n        error={!!error}\r\n        aria-label={description || name}\r\n        inputProps={inputProps}\r\n        {...props}\r\n      />\r\n      {\r\n        error?.message && (\r\n          <div style={{ color: 'red', fontSize: '0.875rem' }}>\r\n            {error?.message}\r\n          </div>\r\n        )\r\n      }\r\n      {\r\n        HelperTextComponent && (\r\n          <div>\r\n            {HelperTextComponent}\r\n          </div>\r\n        )\r\n      }\r\n    </div>\r\n  );\r\n}\r\n\r\nexport default InputDecorator(Input)\r\n","import PortalView from \"./../../components/Global/PortalView\";\r\nimport { FieldSection, FieldRow, FieldSlot } from \"../../components/Forms/FieldSection\";\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport MaskedDatePicker from \"../../components/MaskedDatePicker\";\r\nimport Button from \"../../components/Button\";\r\nimport apiClient from \"../../utils/API\";\r\nimport { Migration } from \"../../store/auth/state\";\r\nimport { setMigration } from \"../../store/auth/actions\";\r\nimport Input from \"../../components/Input\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { useState } from \"react\";\r\nimport { open } from \"../../store/snack/actions\";\r\n\r\nconst MigrationView = (props) => {\r\n  const dispatch = useDispatch();\r\n  const methods = useForm({ mode: \"onBlur\", });\r\n  const { handleSubmit } = methods;\r\n  const [loading, setLoading] = useState(false);\r\n  const onSubmit = async (data) => {\r\n    try {\r\n      setLoading(true);\r\n      const result = await apiClient.verifyAccount(data);\r\n      if (result.IsAccountVerified === true){\r\n        dispatch(setMigration(Migration.complete));\r\n        dispatch(\r\n          open({\r\n            message: \"Verification complete\",\r\n            severity: \"success\",\r\n          })\r\n        );\r\n      }\r\n      else if (result.IsAccountVerified === null){\r\n        dispatch(\r\n          open({\r\n            message: \"Verification failed. Please try again.\",\r\n            severity: \"success\",\r\n          })\r\n        );\r\n      }\r\n     \r\n    } catch (e) {\r\n      // console.log({e})\r\n      if (e.request.status === 403) {\r\n        dispatch(setMigration(Migration.failed));\r\n      } else {\r\n        dispatch(\r\n          open({\r\n            message: e.message,\r\n            severity: \"success\",\r\n          })\r\n        );\r\n      }\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const onError = (e) => {\r\n    // console.log(\"On Error\");\r\n  };\r\n\r\n  const Failed = () => {\r\n    return (\r\n      <div>\r\n        <p>Verification Failed, please contact HECC.</p>\r\n        <ul className=\"list\">          \r\n          <li className=\"li\">Email: SAFeedback@hecc.oregon.gov</li>\r\n        </ul>\r\n      </div>\r\n    );\r\n  };\r\n\r\n  return (\r\n    <PortalView>\r\n      <div name=\"MigrationsPage\" className=\"\">\r\n        <div className=\"rhythm\">\r\n          <h2>Account Validation</h2>\r\n          {props.status === Migration.failed && <Failed />}\r\n          {props.status === Migration.required && (\r\n            <div>\r\n              <p>\r\n                This account requires one time validation. If the correct\r\n                information isn't provided, you will need to contact HECC.\r\n              </p>\r\n              <FormProvider {...methods}>\r\n                <form onSubmit={handleSubmit(onSubmit, onError)}>\r\n                  <FieldSection\r\n                    withDivider={false}\r\n                    title=\"One Time Account Verification\"\r\n                  >\r\n                    <FieldRow>\r\n                      <FieldSlot>\r\n                        <Input\r\n                          name=\"Username\"\r\n                          placeholder=\"Username\"\r\n                          inputLabel=\"Username\"\r\n                          variant=\"outlined\"\r\n                          isRequired={true}\r\n                        ></Input>\r\n                      </FieldSlot>\r\n                    </FieldRow>\r\n                  </FieldSection>\r\n\r\n                  <FieldSection title=\"Birthday\">\r\n                    <FieldRow>\r\n                      <FieldSlot>\r\n                        <MaskedDatePicker\r\n                          name=\"BirthDate\"\r\n                          label=\"Birthday\"\r\n                          isRequired={true}\r\n                        />\r\n                      </FieldSlot>\r\n                    </FieldRow>\r\n                    <FieldRow>\r\n                      <FieldSlot>\r\n                        <Button\r\n                          loading={loading}\r\n                          label=\"Validate\"\r\n                          type=\"submit\"\r\n                        ></Button>\r\n                      </FieldSlot>\r\n                    </FieldRow>\r\n                  </FieldSection>\r\n                </form>\r\n              </FormProvider>\r\n            </div>\r\n          )}\r\n        </div>\r\n      </div>\r\n    </PortalView>\r\n  );\r\n};\r\n\r\nexport default MigrationView;\r\n","import React from 'react';\r\nimport { Route, Redirect } from 'react-router-dom';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { Migration } from '../../store/auth/state'\r\nimport { setMigration } from '../../store/auth/actions'\r\nimport apiClient from '../../utils/API';\r\nimport { useEffect } from 'react';\r\nimport MigrationView from '../../views/migrations'\r\n\r\nconst ProtectedRoute = (props) =>{\r\n    \r\n    \r\n    const authState = useSelector((state) => state.auth);\r\n    const dispatch = useDispatch();\r\n    \r\n\r\n    const { isLoggedIn, migration } = authState;\r\n    \r\n    useEffect(() => {\r\n\r\n        if (isLoggedIn === true && migration === Migration.initial) {\r\n            async function getAccount() {\r\n                try {        \r\n                    await apiClient.getAccount();\r\n                    dispatch(setMigration(Migration.complete))\r\n                } catch (e) {\r\n                    const { status } = e.request\r\n                    // console.log(\"Status\", status)\r\n                    switch(status) {\r\n                        case 403:\r\n                            dispatch(setMigration(Migration.failed))\r\n                            break;\r\n                        case 409:\r\n                            dispatch(setMigration(Migration.required))\r\n                            break;\r\n                        default:\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n            getAccount();\r\n        }\r\n    }, [isLoggedIn, migration])\r\n\r\n    useEffect(() => {\r\n        if (props.scrollTop === true) {\r\n            // console.log(\"Got here\")\r\n            window.scrollTo(0,0);\r\n        }\r\n    }, [])\r\n\r\n    if ((migration === Migration.failed || migration === Migration.required) && isLoggedIn) {\r\n    return <Route render={() => <MigrationView status={migration} />} />\r\n    }\r\n\r\n    return (isLoggedIn ? <Route {...props} /> : <Redirect to={'/'} />)\r\n}\r\n\r\nexport default ProtectedRoute;","import React from \"react\";\r\nimport Tooltip from \"@material-ui/core/Tooltip\";\r\nimport StatusButtons from \"../AppStatusButtons\";\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\nexport default function Scholarships({ details, ...props }) {\r\n  const history = useHistory();\r\n\r\n  const handleClick = () => {\r\n    history.push({\r\n      pathname: `/scholarship/${details.Code}`,\r\n      state: {\r\n        from: history.location.pathname,\r\n      },\r\n    });\r\n  };\r\n\r\n  return (\r\n    <div className=\"grant grant--scholarship\">\r\n      <div className=\"grant__layout\">\r\n      <div className=\"grant__content rhythm\" style={{ display:\"flex\", flexDirection:\"column\", alignItems: \"center\", justifyContent: \"center\" }}>\r\n          <h4 className=\"heading heading--h5\">{details.Name}</h4>\r\n          <div className=\"icons-desktop\">\r\n            {!details.matched && !details.docsRequired && !details.membershipRequired? <span style={{ margin: \"4px 3px -3px 0\" }}/> : null}\r\n            {details.matched && (\r\n              <Tooltip title=\"Matched to Your Profile\">\r\n                <img\r\n                  style={{ margin: \"4px 3px -3px 0\" }}\r\n                  src=\"/person_search.svg\"\r\n                  alt=\"\"\r\n                />\r\n              </Tooltip>\r\n            )}\r\n            {details.docsRequired && (\r\n              <Tooltip title=\"Documents Required for This Scholarship\">\r\n                <img\r\n                  style={{ margin: \"4px 6px -3px 0\" }}\r\n                  src=\"/text_snippet.svg\"\r\n                  alt=\"\"\r\n                />\r\n              </Tooltip>\r\n            )}\r\n            {details.membershipRequired && (\r\n              <Tooltip title=\"Membership or Employment Required\">\r\n                <img\r\n                  style={{ margin: \"4px 6px -3px 0\" }}\r\n                  src=\"/card_membership.svg\"\r\n                  alt=\"\"\r\n                />\r\n              </Tooltip>\r\n            )}\r\n          </div>\r\n          <div>\r\n            {details?.Source?.toLowerCase() !== \"renew\" &&\r\n              <div>\r\n                {details.isComplete && details.docsRequired? <div style={{ color: '#429D5B' }}>Additional Documents Completed</div> : null}\r\n                {details.isComplete === false && details.docsRequired? <div style={{ color: '#da3754' }}>Additional Documents needed</div> : null}\r\n                {details.isComplete === null? <dd>No Additional Documents Required</dd> : null}\r\n              </div>\r\n            }\r\n            <div dangerouslySetInnerHTML={ { __html: details.Description }}></div>\r\n          </div>\r\n        </div>\r\n        <em>#{details.Code}</em>\r\n        <StatusButtons {...details} onClick={handleClick} isScholarship={true} />\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n","import InfoIcon from '@material-ui/icons/InfoOutlined';\r\nimport ErrorIcon from '@material-ui/icons/Error';\r\nimport WarningIcon from '@material-ui/icons/WarningRounded';\r\nimport AwardIcon from '@material-ui/icons/EmojiEvents';\r\nimport PendingIcon from '@material-ui/icons/PauseCircleFilled';\r\nimport SuccessIcon from '@material-ui/icons/CheckCircle';\r\n\r\nexport const NOTIFICATION_VARIANT = {\r\n    DASHBOARD: 'HEADER',\r\n    CARD: 'CARD',\r\n}\r\n/**\r\n * standard notification display\r\n * @param {*} param0\r\n * @returns {Component}\r\n */\r\nfunction NotificationAlert({ notification, key, variant }) {\r\n\r\n    //notification just isn't ready uet\r\n    if (!notification)\r\n        return null;\r\n    \r\n    /**\r\n     * code the icon to the attention level\r\n     * @param {*} param0.sx styles\r\n     * @returns \r\n     */\r\n    function Icon({sx}) {\r\n     \r\n        switch (notification.AttentionLevel) {\r\n            case 'Error':\r\n                return <ErrorIcon sx={{ ...sx, color: \"#da3754\" }} />;\r\n\r\n            case 'Pending':\r\n                return <PendingIcon sx={{ ...sx, color: \"#a2ba69\" }} />;\r\n\r\n            case 'Warning':\r\n                return <WarningIcon sx={{ ...sx, color: \"#da3754\" }} />;\r\n\r\n            case 'Success':\r\n                return <SuccessIcon sx={{ ...sx, color: \"#429D5B\" }} />;\r\n\r\n            case 'Award':\r\n                return <AwardIcon sx={{ ...sx, color: \"#f7db6a\" }} />;\r\n\r\n            default:\r\n                return <InfoIcon sx={{ ...sx, color: \"#33797e\" }} />;\r\n        }\r\n    }\r\n\r\n    switch (variant) {\r\n        case NOTIFICATION_VARIANT.CARD:\r\n            return  (\r\n                <div key={`Notification${key}`} className=\"notification\" style={{border: 'none', padding: '0.5em', fontSize: '.875rem'}} >\r\n                    <div className=\"notification__layout\" style={{gridTemplateColumns:'1.5rem 1fr'}} >\r\n                        <div>\r\n                            <div><Icon sx={{width: '0.7em;'}} /></div>\r\n                        </div>\r\n                        <div className=\"rhythm\">\r\n                            {notification.Title && <span dangerouslySetInnerHTML={{ __html: notification.Title }} style={{fontWeight: 'bold', paddingRight: '1em'}}/>}\r\n                            {notification.Message && <span dangerouslySetInnerHTML={{ __html: notification.Message }} />}                          \r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            );\r\n        case NOTIFICATION_VARIANT.DASHBOARD:\r\n        default:\r\n            return  (\r\n                <div key={`Notification${key}`} className=\"notification\" >\r\n                    <div className=\"notification__layout\" >\r\n                        <div>\r\n                            <div><Icon /></div>\r\n                        </div>\r\n                        <div className=\"rhythm\">\r\n                            {notification.Title && <h4 className=\"heading heading--h5 notification__title\" dangerouslySetInnerHTML={{ __html: notification.Title }} />}\r\n                            {notification.Message && <div className=\"notification__message\" dangerouslySetInnerHTML={{ __html: notification.Message }} />}\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            );\r\n\r\n    }\r\n\r\n\r\n}\r\n\r\nexport default NotificationAlert;","import React from 'react';\r\nimport StatusButtons from '../AppStatusButtons';\r\nimport NotificationAlert, { NOTIFICATION_VARIANT } from '../../views/dashboard/NotificationAlert';\r\n/**\r\n * \r\n * @param {*} param0 \r\n * @returns \r\n */\r\nexport default function Grants({details, notifications}) {\r\n\r\n\r\n  const year = details.Code === \"ORP\" ? \"\" : details.year + \"-\" + ((details.year + 1)%100);\r\n\r\n  return (\r\n    <div className=\"grant\">\r\n      <div className=\"grant__layout\">\r\n        <div className=\"grant__content rhythm\">\r\n          <h4 className=\"heading heading--h5\">{year} { details.Name }</h4>\r\n          <div dangerouslySetInnerHTML={ { __html: details.Description }}></div>\r\n        </div>\r\n        {notifications && \r\n        <div>\r\n            {notifications.map((item, i) => \r\n                <NotificationAlert key={i} notification={item} variant={NOTIFICATION_VARIANT.CARD}/>\r\n            )}\r\n        </div>\r\n        }\r\n        \r\n        <StatusButtons {...details}/>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n","import ProgramInfo from \"./ProgramInfo\";\r\nimport ApplicationInfo from \"./ApplicationInfo\";\r\nimport { combineProgramStatus } from '../../utils';\r\n\r\n/**\r\n * replacement for RevTech's \"enriched\" anonymous objects that combine programs and their applications together\r\n */\r\nclass ProgramApplicationInfo {\r\n\r\n    /**\r\n     * wrapping constructor\r\n     * @param {*} applicationData application DTO from API\r\n     * @param {*} programData program info DTO from API\r\n     */\r\n    constructor(applicationData, programData){\r\n        this._program = new ProgramInfo(programData);\r\n        this._application = new ApplicationInfo(applicationData);\r\n    }\r\n\r\n    \r\n    /**\r\n     * applicaiton year\r\n     */\r\n    get year(){\r\n        return this._application.year;\r\n    }\r\n\r\n    /**\r\n     * abbreviated key for program\r\n     */\r\n    get programCode(){\r\n        return this._program.code;\r\n    }\r\n\r\n    /**\r\n     * human readable review status description\r\n     */\r\n    get reviewMessage(){\r\n        return this._application.reviewMessage;\r\n    }\r\n\r\n    /**\r\n     * actual review status code\r\n     */\r\n    get reviewStatus(){\r\n        return this._application.reviewStatus;\r\n    }\r\n\r\n    /**\r\n     * is this tentatively application awarded to the student\r\n     * @returns {Boolean}\r\n     */\r\n    get isAwarded(){\r\n        return this._application.isAwarded;\r\n    }\r\n\r\n    /**\r\n     * is this app under the private scholarships program\r\n     * @returns {Boolean}\r\n     */\r\n    get isScholarship(){\r\n        return this._program._data?.ParentProgramCode === \"SCH\";\r\n    }\r\n\r\n    /**\r\n     * is this a grant\r\n     * @returns {boolean}\r\n     */\r\n    get isGrant(){\r\n        if (!this._program._data)\r\n            return false;\r\n\r\n        return this._program._data.ParentProgramCode == null && this._program._data.Code !== \"SCH\";\r\n    }\r\n\r\n    /**\r\n     * get the season this application was applied for in\r\n     * @returns {ProgramSeason}\r\n     */\r\n    get season(){\r\n        return this._program.getSeason(this.year);\r\n    }\r\n\r\n    /**\r\n     * has student started this application\r\n     * @returns {boolean}\r\n     */\r\n    get isStarted(){\r\n        return this._application.isStarted;\r\n    }\r\n\r\n    /**\r\n     * has stuent submitted this applicatino\r\n     * @returns {boolean}\r\n     */\r\n    get isSubmitted(){\r\n        return this._application.isSubmitted;\r\n    }\r\n\r\n    /**\r\n     * is this season still open (including appeals)\r\n     * @returns {boolean}\r\n     */\r\n    get isSeasonOpen(){\r\n        if (!this.season)\r\n            return false;\r\n\r\n        return this.startEvent.isPassed && !this.isDeadlinePassed;\r\n    }\r\n\r\n    /**\r\n     * has the deadline passed\r\n     * @returns {boolean}\r\n     */\r\n    get isDeadlinePassed(){\r\n        return this._application.isDeadlinePassed;\r\n    }\r\n\r\n    /**\r\n     * @returns {}\r\n     */\r\n    get startEvent(){\r\n        return this.season?.startEvent;\r\n    }\r\n\r\n    /**\r\n     * get event date\r\n     * @param {*} eventCode \r\n     * @param {*} term \r\n     * @param {*} format \r\n     * @returns {String}  \r\n     */\r\n    getDate(eventCode, term, format){\r\n        return this.season.getDate(eventCode, term, format);\r\n    }\r\n\r\n    /**\r\n     * get old style RevTech enriched appliation object\r\n     * @returns {*}\r\n     * @deprecated try to use this object directly if possible, feel free to add properties as needed\r\n     */\r\n    get legacyEnrichedData(){\r\n        return combineProgramStatus(this._program._data, this._application._data);\r\n    }\r\n\r\n}\r\n\r\nexport default ProgramApplicationInfo","import { useSelector } from 'react-redux';\r\nimport PortalView from './../../components/Global/PortalView';\r\nimport Scholarships from '../../components/DashboardDisplay/Scholarships';\r\nimport apiClient from '../../utils/API';\r\nimport { useState, useEffect, Component } from 'react';\r\nimport { enrichProgramsWithDocInfo } from '../../utils';\r\nimport { FIELDS } from '../../store/form/fields';\r\nimport { actions } from '../../store';\r\nimport GrantsDisplay from \"../../components/DashboardDisplay/Grants\";\r\nimport Spinner from '../../components/Utility/Spinner';\r\nimport Button from \"../../components/Button\"\r\nimport WarningIcon from '@material-ui/icons/WarningRounded';\r\nimport ProgramInfo from '../../utils/dtos/ProgramInfo';\r\nimport CheckIcon from '@material-ui/icons/Check';\r\nimport ProgramApplicationInfo from '../../utils/dtos/ProgramApplicationInfo';\r\nimport NotificationAlert, {NOTIFICATION_VARIANT}  from './NotificationAlert';\r\n\r\n\r\n\r\nfunction findRecentScholarshipYear(programList) {\r\n    const [scholarshipRecentYear] = programList.filter(p => p.Code === \"SCH\").flatMap(p => p.ActiveSeasons).map(p => p.Year).sort().reverse();\r\n    return scholarshipRecentYear;\r\n}\r\n\r\n/**\r\n * \r\n * @returns {Component}\r\n */\r\nfunction Dashboard() {\r\n\r\n    const formState = useSelector((state) => state.form);\r\n    const get = (fieldKey) => formState.fields[fieldKey]?.value;\r\n    const isLoading = false\r\n\r\n    const [loaded, setStatus] = useState(false);\r\n\r\n    document.onreadystatechange = () => {\r\n        setStatus(true);\r\n    }\r\n\r\n\r\n    const [profileComplete, setProfileComplete] = useState(true); // setting this to true as default so incomplete profile warning does not errantly display at first\r\n    /**\r\n     * determine if user can proceed past profile section\r\n     */\r\n    useEffect(async () => {\r\n        const status = await apiClient.getProfileStatus();\r\n        setProfileComplete(status);\r\n    }, []);\r\n\r\n    /**\r\n     * initialize any displayed answers on this page\r\n     */\r\n    useEffect(() => {\r\n        actions.fetchBasicFields([FIELDS.FIRST_NAME]);\r\n    }, []);\r\n\r\n\r\n    const [programsData, setProgramsData] = useState([]);\r\n    const [applicationsData, setApplicationsData] = useState([]);\r\n    const [scholarshipDigests, setScholarshipDigests] = useState([]);\r\n    const [awardedScholarships, setAwardedScholarships] = useState([]);\r\n    const [notifications, setNotifications] = useState([]);\r\n    const [state, setState] = useState({\r\n        isScholarshipsLoading: false,\r\n        isSchRenewalsLoading: false\r\n    })\r\n\r\n    const appDigests = applicationsData.map(a => new ProgramApplicationInfo(a, programsData.find(p => p.Code === a.ProgramCode)));\r\n    const listGrants = appDigests.filter(a => a.isGrant);\r\n    const scholarshipRecentYear = findRecentScholarshipYear(programsData);\r\n    const activePriorAwardedYears = programsData.filter(p => p.Code === \"SCH\").flatMap(p => p.ActiveSeasons).map(p => p.Year).filter(y => y != scholarshipRecentYear);\r\n\r\n    const listScholarships = scholarshipDigests.filter(a => a.Source !== 'Renew');\r\n    const listSchRenewals = scholarshipDigests.filter(a => a.Source === 'Renew');\r\n    const showSchRenewalsSectionFlag = listSchRenewals.length > 0;\r\n    const schDigest = appDigests.find(a => a.programCode === 'SCH' && a.year === scholarshipRecentYear); //updated status object\r\n\r\n    function getNotificationFromReviewStatus(){\r\n        if (!schDigest)\r\n            return null;\r\n        if (!schDigest.reviewStatus)\r\n            return null;\r\n        if (schDigest.reviewStatus === 'PENDING' || schDigest.reviewStatus === 'EMPTY' || schDigest.reviewStatus === 'NA')\r\n            return null; //don't want to display these statuses at this time\r\n        if (schDigest.reviewStatus === 'REVIEW1' || schDigest.reviewStatus === 'REVIEW2')\r\n            return null; //effectively \"pending\" from student perspective\r\n        \r\n        let level = 'Error';\r\n        if (schDigest.reviewStatus === 'VALID')\r\n            level = 'Success';\r\n        if (schDigest.reviewStatus.startsWith('PEND'))\r\n            level = 'Pending';\r\n\r\n        return {\r\n            Title: null,\r\n            Message: schDigest.reviewMessage,\r\n            Location: 'DashboardCard',\r\n            ProgramCode: schDigest.programCode,\r\n            Year: schDigest.year,\r\n            AttentionLevel: level\r\n        };\r\n    }\r\n\r\n    const scholarshipReviewAsNotification =  getNotificationFromReviewStatus();\r\n\r\n    \r\n\r\n\r\n    /**\r\n     * initialize page with program/app info\r\n     */\r\n    useEffect(async () => {\r\n        setState({ ...state, isScholarshipsLoading: true, isSchRenewalsLoading: true, isGrantStatusLoading: true, scholarships: [] });\r\n\r\n        // search for all active \"featured\" applications\r\n        const featuredApplications = await apiClient.get(\"/application/search\", { isActive: true, mode: \"Featured\" });\r\n        setApplicationsData(featuredApplications);\r\n\r\n        // get program info for each application\r\n        const programCodes = [...new Set(featuredApplications.map(a => a.ProgramCode))]; //unique list of codes\r\n        const programRequests = programCodes.map(x => apiClient.getProgram(x));\r\n        const programs = await Promise.all(programRequests);\r\n        setProgramsData(programs);\r\n        setState({ ...state, isGrantStatusLoading: false });\r\n\r\n        const appDigests = featuredApplications.map(a => new ProgramApplicationInfo(a, programs.find(p => p.Code === a.ProgramCode)));\r\n\r\n        const scholarshipRecentYear = findRecentScholarshipYear(programs);\r\n        const scholarshipApps = appDigests.filter(a => a.isScholarship && a.year === scholarshipRecentYear).map(a => a.legacyEnrichedData);\r\n        const scholarshipsWithDocs = await enrichProgramsWithDocInfo(scholarshipApps);\r\n        setScholarshipDigests(scholarshipsWithDocs);\r\n\r\n        setState({ ...state, isSchRenewalsLoading: false, isScholarshipsLoading: false, isGrantStatusLoading: false });\r\n\r\n        // get awarded scholarships information.\r\n        const awardedScholarships = appDigests.filter(a => a.isScholarship && a.year !== scholarshipRecentYear && a.isAwarded === true);\r\n        setAwardedScholarships(awardedScholarships);\r\n\r\n    }, []);\r\n\r\n    /**\r\n     * grab all featured notifications\r\n     */\r\n    useEffect(async () => {\r\n        const allNotifications = await apiClient.get('/application/notifications', {});\r\n        allNotifications.sort((a) => (a.AttentionLevel === 'Warning') ? 11 : 1); // Notifications of AttentionLevel: 'Warning' at the top\r\n        setNotifications(allNotifications);\r\n\r\n    }, []);\r\n\r\n    const firstName = get(FIELDS.FIRST_NAME);\r\n\r\n    const goToProfile = async () => {\r\n        document.location.href = '/profile'\r\n    }\r\n\r\n    /**\r\n     * get card-level notifications for a given program\r\n     * @param {string} programCode \r\n     * @returns {Array<*>}\r\n     */\r\n    function getCardNotifications(programCode, year){\r\n        if (!programCode || !year) {\r\n            return [];\r\n        }\r\n            \r\n\r\n        return notifications.filter(n => n.Location === 'DashboardCard' && n.ProgramCode === programCode && n.Year === year);\r\n    }\r\n\r\n    /**\r\n     * @returns {Component}\r\n     */\r\n    function ActiveScholarshipButton(){\r\n        if (!schDigest)\r\n            return null;\r\n\r\n        const appLink = `/additional-scholarship-info/${schDigest.year}`;\r\n        \r\n        if (schDigest.isSubmitted)\r\n            return <a href={appLink} className='button' >View</a>\r\n\r\n        if (schDigest.isDeadlinePassed)\r\n            return <p style={{margin: '1em' }}>Scholarships has closed. Come back next fall to see our {schDigest.year + 1} catalog.</p>\r\n\r\n        if (schDigest.isStarted)      \r\n            return <a href={appLink} className='button' >Edit</a>\r\n                    \r\n        if (schDigest.isSeasonOpen)\r\n            return <a href={appLink} className='button' >Start</a>\r\n       \r\n        return <p style={{margin: '1em' }}> Scholarships is currently closed.  Come back on {schDigest.startEvent?.displayDate} to see our {schDigest.year} catalog.</p>                      \r\n    }\r\n\r\n    return (\r\n        <PortalView name=\"DashboardPage\">\r\n            <div name='DashboardPage' className=\"rhythm\">\r\n                <div className=\"rhythm\">\r\n                    {/* Page Intro */}\r\n                    <div className=\"page-intro\">\r\n                        <div className=\"wrapper\">\r\n                            <div className=\"page-intro__layout\">\r\n                                <div className=\"page-intro__icon\">\r\n                                    <img src=\"/dashboard.svg\" alt=\"Student Portal\" />\r\n                                </div>\r\n                                <div className=\"page-intro__content rhythm\">\r\n                                    <h1 className=\"heading heading--h1\">Student Portal Dashboard</h1>\r\n                                    <h2 className=\"heading heading--h2\">\r\n                                        Welcome{firstName && (<>, {firstName}! </>) || (<span>!</span>)}\r\n                                    </h2>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n\r\n                    {/* Notifications */}\r\n                    <div className=\"notifications component rhythm\">\r\n                        <div className=\"wrapper rhythm\">\r\n                            <div className=\"notifications__header\">\r\n                                <h3 className=\"heading heading--h3\">Notifications {notifications.length > 0 && <div style={{ height: '9px', width: '9px', borderRadius: '50%', background: '#429D5B', display: 'inline-block', margin: '0 0 3px 3px' }} />}</h3>\r\n                            </div>\r\n                            <div className=\"notifications__content\">\r\n                                {profileComplete === false &&\r\n                                    <div className=\"notification\">\r\n                                        <div className=\"notification__layout\">\r\n                                            <div>\r\n                                                <div><WarningIcon sx={{ color: \"#da3754\" }} /></div>\r\n                                            </div>\r\n                                            <div className=\"rhythm\">\r\n                                                <h4 className=\"heading heading--h5 notification__title\">Please Complete Your Profile</h4>\r\n                                                <div className=\"notification__message rhythm\">\r\n                                                    <p>In order to apply for grants and scholarships, your profile questions need to be completed.</p>\r\n                                                    <Button name=\"getStarted\" label=\"Get Started\" type=\"button\" onClick={goToProfile} />\r\n                                                </div>\r\n                                            </div>\r\n                                        </div>\r\n                                    </div>\r\n                                }\r\n                                {notifications.filter(n => n.Location === 'DashboardHeader' || n.Location === null).map((item, i) =>\r\n                                    <NotificationAlert key={i} notification={item} variant={NOTIFICATION_VARIANT.DASHBOARD} />                                  \r\n                                )}\r\n                            </div>\r\n\r\n                            {/* TODO: this appears while notifications data is loading and should only appear when there are 0 notifications */}\r\n                            {!notifications.length > 0 && <p className=\"paragraph\">There are currently no notifications.</p>}\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n\r\n                {profileComplete &&\r\n                    <div className=\"grants wrapper rhythm component\">\r\n                        <div className=\"notifications__header\">\r\n                            <h3 className=\"heading heading--h3\">Grants</h3>\r\n                            {state.isGrantStatusLoading &&\r\n                                <Spinner />\r\n                            }\r\n                        </div>\r\n                        <div name=\"GrantsDisplay\" className=\"grants__content\">\r\n                            {listGrants.map((item, i) =>\r\n                                <GrantsDisplay key={`GrantsDisplay${i}`} details={item.legacyEnrichedData} className=\"card\" \r\n                                    notifications={getCardNotifications(item.programCode, item.year)} />\r\n                            )}\r\n                            {!listGrants.length > 0 && <div>No grants to display.</div>}\r\n                        </div>\r\n                    </div>\r\n                }\r\n\r\n                {\r\n                    /* #3951/SP-347: RENEWAL: Create separate application for renewals */\r\n                    profileComplete && showSchRenewalsSectionFlag &&\r\n                    <div className=\"grants wrapper rhythm component\">\r\n                        <div className=\"notifications__header\">\r\n                            <h3 className=\"heading heading--h3\">Scholarship Renewals</h3>\r\n\r\n                            {// TODO: isSchRenewalsLoading \r\n                                state.isSchRenewalsLoading &&\r\n                                <Spinner />\r\n                            }\r\n                        </div>\r\n                        <div name=\"SchRenewalsDisplay\" className=\"grants__content\">\r\n                            {isLoading && <Spinner />}\r\n                            {!isLoading && listSchRenewals.map((item, i) =>\r\n                                <Scholarships key={`SchRenewals${i}`} details={item} \r\n                                    notifications={getCardNotifications(item.ProgramCode, item.Year)}/>\r\n                            )}\r\n                        </div>\r\n                    </div>\r\n                    /* END: RENEWAL: Create separate application for renewals  */\r\n                }\r\n\r\n                {profileComplete &&\r\n                    <div className=\"grants wrapper rhythm component\">\r\n                        <div className=\"notifications__header\">\r\n                            <h3 className=\"heading heading--h3\">Scholarship Application</h3>\r\n                            {schDigest?.isSubmitted && <div><div style={{ color: '#429D5B' }}><CheckIcon />Submitted</div></div>}\r\n\r\n                            <NotificationAlert notification={scholarshipReviewAsNotification} variant={NOTIFICATION_VARIANT.CARD} />   \r\n\r\n                            {getCardNotifications('SCH', scholarshipRecentYear).map((item, i) =>\r\n                                <NotificationAlert key={i} notification={item} variant={NOTIFICATION_VARIANT.CARD} />                          \r\n                            )}\r\n\r\n                            <ActiveScholarshipButton />\r\n                                                       \r\n                            {activePriorAwardedYears.map(y => (awardedScholarships?.filter(p => p.year === y)?.length > 0) &&\r\n                                <div style={{ margin: \"20px 0\" }}>\r\n                                    <a href={`/additional-scholarship-info/${y}`} className='button' >{y} Update</a>\r\n                                    <span style={{ paddingLeft: '2em' }}>Keep OSAC informed of any important changes for your {y} - {y + 1} awards.</span>\r\n                                </div>\r\n                            )}\r\n\r\n\r\n\r\n                            {state.isScholarshipsLoading &&\r\n                                <Spinner />\r\n                            }\r\n                        </div>\r\n                        <div name=\"ScholarshipsDisplay\" className=\"grants__content\">\r\n                            {isLoading && <Spinner />}\r\n                            {!isLoading && listScholarships.map((item, i) =>\r\n                                <Scholarships key={`ScholarshipsDisplay${i}`} details={item} notifications={getCardNotifications(item.ProgramCode, item.Year)} />\r\n                            )}\r\n                            {!listScholarships.length > 0 && <div>No scholarships to display.</div>}\r\n                        </div>\r\n                    </div>\r\n                }\r\n            </div>\r\n        </PortalView>\r\n    );\r\n}\r\n\r\nexport default Dashboard;\r\n","import { useState, useEffect, Fragment } from 'react';\r\nimport ApplicationInfo from \"../../utils/dtos/ApplicationInfo\";\r\nimport apiClient from '../../utils/API';\r\nimport { Alert } from '@material-ui/core';\r\n\r\n/**\r\n * description of award offer or authorization\r\n * \r\n * @returns {Component}\r\n */\r\nfunction AwardSummary({ program, awards, application }) {\r\n\r\n    const app = new ApplicationInfo(application);\r\n\r\n    if (awards == null || awards.length === 0)\r\n        return null;\r\n\r\n    const isCollegeDisplayed = true; //uniq(awards.map(x => x.CollegeId)).length > 1;\r\n    const awardNotes = awards[0].Notes;\r\n    awardNotes.sort((a, b) => a.Order - b.Order);\r\n\r\n    /**\r\n     * \r\n     * @param {*} item \r\n     * @param {*} i \r\n     * @returns \r\n     */\r\n    \r\n    function AwardRow({ item, i }) {\r\n\r\n        const [college, setCollege] = useState(null);\r\n        const cleanStatuses = item.Statuses.filter(status => status.StatusDescription !== null && status.StatusDescription !== '' && status.StatusDescription !== 'Renewed');\r\n        const isRejectReason = item.Statuses.some(status => status.CodeType === 'Student_OrpRejectCode');\r\n        let showItem = (app.isRenewal === false) || (app.isRenewal && item.SummaryStatus === \"Authorized\")? true : false;\r\n        useEffect(() => {\r\n            (async () => {\r\n                const college = await apiClient.getCollege(item.CollegeId);\r\n                setCollege(college);\r\n            })();\r\n        }, []);\r\n\r\n        return (\r\n            <Fragment>\r\n                {showItem &&\r\n                    <tr key={i}>\r\n                        <td style={{ whiteSpace: 'nowrap' }} >{item.Term} {item.Year}</td>\r\n                        <td>${parseFloat(item.AuthorizedAmount ? item.AuthorizedAmount : 0.00).toFixed(2)}</td>\r\n                        {(app.isAwarded || app.isRenewal) &&\r\n                            <td>${parseFloat(item.DisbursedAmount ? item.DisbursedAmount : 0.00).toFixed(2)}</td>\r\n                        }\r\n                        {isCollegeDisplayed &&\r\n                            <td>\r\n                                {college?.ShortName}\r\n                            </td>\r\n                        }\r\n                    </tr>\r\n                }\r\n                {cleanStatuses.length > 0 &&\r\n                    <tr>\r\n                        <td></td>\r\n                        <td colspan={((app.isAwarded || app.isRenewal)? 2 : 1) + (isCollegeDisplayed ? 1 : 0)}>\r\n                            {isRejectReason &&\r\n                                <p><strong>Reject Reasons</strong></p>\r\n                            }\r\n                            <ul className=\"list\">\r\n                                {cleanStatuses.map((status, x) =>\r\n                                    <li className=\"li\" key={x} dangerouslySetInnerHTML={{ __html: status.StatusDescription }} />\r\n                                )}\r\n                            </ul>\r\n                        </td>\r\n                    </tr>\r\n                }\r\n            </Fragment>\r\n\r\n        );\r\n    }\r\n\r\n    return (\r\n\r\n        <div>\r\n\r\n            <table>\r\n                <thead>\r\n                    <tr>\r\n                        <th>Term</th>\r\n                        <th>\r\n                            {app.isAwardOffer && !app.isRenewal? 'Offer' : 'Tentative'}\r\n                        </th>\r\n                        {(app.isAwarded || app.isRenewal) &&\r\n                            <th>Disbursed</th>\r\n                        }\r\n                        <th>College</th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    {awards.map((item, i) => <AwardRow item={item} i={i} />)}\r\n                </tbody>\r\n            </table>\r\n\r\n            {(app.isAwardOffer || app.isAwarded) && app.programCode !== 'ORP' && !app.isRenewal &&\r\n                <p style={{ marginBottom: '1.5em' }}>\r\n                    Be sure to update your\r\n                    {\" \"}<a href={`/additional-scholarship-info/${app.year}#college-choice`}>college</a>,\r\n                    {\" \"}<a href={`/additional-scholarship-info/${app.year}#college-plans`}>majors</a>,\r\n                    {\" \"}and\r\n                    {\" \"}<a href=\"/profile#contact-info\">contact info</a> to receive your award.\r\n                </p>\r\n            }\r\n\r\n            {(app.isAwardOffer || app.isAwarded) && app.programCode !== 'ORP' && app.isRenewal &&\r\n                <p style={{ marginBottom: '1.5em' }}>\r\n                    Be sure to update your\r\n                    {\" \"}<a href={`/renew/${app.programCode}/${app.year}`}>college</a>,\r\n                    {\" \"}<a href={`/renew/${app.programCode}/${app.year}`}>majors</a>,\r\n                    {\" \"}and\r\n                    {\" \"}<a href=\"/profile#contact-info\">contact info</a> to receive your award.\r\n                </p>\r\n            }\r\n\r\n\r\n            {awardNotes.length > 0 &&\r\n               <Alert className=\"rhythm\" variant=\"outlined\" severity=\"info\"> \r\n                    <h3 className=\"heading heading--h3\" style={{marginBottom: '1em'}}>Terms & Conditions</h3>\r\n                    <ul className={awardNotes.length > 1 ? \"list\" : \"\"}>\r\n                        {awardNotes.map((item, i) =>\r\n                            <li key={i}>\r\n                                {item.Category &&\r\n                                    <>\r\n                                        <strong>{item.Category}</strong><br />\r\n                                    </>\r\n                                }\r\n\r\n                                <div className='richtext' dangerouslySetInnerHTML={{ __html: item.Description }}></div>\r\n                            </li>\r\n                        )}\r\n                    </ul>\r\n                </Alert>\r\n            }\r\n\r\n\r\n        </div>\r\n\r\n    );\r\n}\r\n\r\nexport default AwardSummary;","import { useLocation } from 'react-router-dom';\r\nimport { useState, useEffect } from 'react';\r\nimport Accordion from '@material-ui/core/Accordion';\r\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\r\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport RemoveIcon from '@material-ui/icons/Remove';\r\nimport { uniqWith, isEqual } from \"lodash\";\r\nimport PortalView from './../../components/Global/PortalView';\r\nimport apiClient from '../../utils/API';\r\nimport Spinner from '../../components/Utility/Spinner';\r\nimport AwardSummary from '../../components/award/AwardSummary';\r\nimport StatusButtons from '../../components/AppStatusButtons';\r\nimport { combineProgramStatus, combineWithLocalAwards } from '../../utils';\r\n\r\n\r\n\r\n\r\n/**\r\n * page summarizing all active awards for student\r\n * \r\n * @returns {Component} full awards page\r\n */\r\nfunction Awards() {\r\n    \r\n    const location = useLocation();\r\n    const anchor = location.hash;\r\n\r\n    const [allAwardsData, setAllAwardsData] = useState([]);\r\n    const [allApplicationData, setAllApplicationData] = useState([]);\r\n    const [isLoading, setLoading] = useState(true);\r\n\r\n    const awardedPrograms = allApplicationData.filter(app => app.AwardSummaryStatus !== 'Offer' || app.ReviewStatus === 'RNWEMSENT');\r\n    const pendingPrograms = allApplicationData.filter(app => app.AwardSummaryStatus === 'Offer' && app.Source !== 'Renew');\r\n\r\n    useEffect(() => {\r\n        (async () => {\r\n            const awards = await apiClient.get(\"/award/search\");\r\n            const appLookups = awards.map(a => {return {Code: a.ProgramCode, Year: a.ApplicationYear}});\r\n            const distinctApps = uniqWith(appLookups, isEqual);\r\n\r\n            const recentApps = distinctApps.filter(a => {\r\n                let controlValues = distinctApps.filter(b => b.Code === a.Code)\r\n                let recentAppYear = Math.max(Math.max(...controlValues.map(c => c.Year)))\r\n                if(controlValues.length === 1){\r\n                    return a\r\n                }\r\n                if(controlValues.length > 1 && a.Year === recentAppYear){\r\n                    return a\r\n                }\r\n                return null\r\n            });\r\n\r\n            const appRequests = recentApps.map(a => apiClient.getApplication(a.Code, a.Year));\r\n            const apps = await Promise.all(appRequests);\r\n\r\n            setAllAwardsData(awards);\r\n            setAllApplicationData(apps);\r\n            setLoading(false);\r\n\r\n        })();\r\n    }, []);\r\n\r\n    /**\r\n     * \r\n     * @param {*} programCode \r\n     * @returns {Array<*>}\r\n     */\r\n    function getProgramAwards(programCode) {\r\n        return allAwardsData.filter(a => a.ProgramCode === programCode);\r\n    }\r\n\r\n    /**\r\n     * \r\n     * @param {*} param0.program program DTO from api\r\n     * @returns \r\n     */\r\n    function AwardAccordian({ application, defaultExpanded }) {\r\n\r\n        const programCode = application.ProgramCode;\r\n        const [expanded, setExpanded] = useState(defaultExpanded);\r\n        const [program, setProgram] = useState(null);\r\n\r\n        useEffect(() => {\r\n            (async () => {\r\n    \r\n                const program = await apiClient.getProgram(programCode);               \r\n                setProgram(program);\r\n    \r\n            })();\r\n        }, []);\r\n\r\n        if (program == null)\r\n            return null;\r\n\r\n\r\n        const awards = getProgramAwards(programCode);\r\n        const buttonDetails = combineWithLocalAwards(combineProgramStatus(program, application), awards);   \r\n                       \r\n        return (\r\n            <div className=\"grant\">\r\n                <div className=\"grant__layout\">\r\n                    <div className=\"grant__content rhythm\">\r\n                        <Accordion square onChange={() => setExpanded(!expanded)} style={{ borderRadius: expanded ? '4px 4px 0 0' : '4px' }} defaultExpanded={defaultExpanded}>\r\n                            <AccordionSummary\r\n                                expandIcon={expanded ? <RemoveIcon style={{ color: 'white' }} /> : <AddIcon style={{ color: 'white' }} />}\r\n                                aria-controls=\"panel1a-content\"\r\n                                id=\"panel1a-header\"\r\n                                style={{ backgroundColor: 'transparent', borderRadius: expanded ? '4px 4px 0 0' : '4px' }}\r\n                            >\r\n                                <h4 className=\"heading heading--h5\">{program.Name}</h4>\r\n                            </AccordionSummary>\r\n                            <AccordionDetails style={{ alignText: 'left' }}>\r\n                                <AwardSummary program={program} awards={awards} key={program.Code} application={application} />\r\n                            </AccordionDetails>\r\n                        </Accordion>\r\n                    </div>\r\n                    <StatusButtons {...buttonDetails} />\r\n                    \r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n\r\n\r\n    return (\r\n        <PortalView name=\"AwardPage\">\r\n            <div name='AwardPage' className=\"awards-page rhythm rhythm--large\">\r\n                <div className=\"rhythm\">\r\n                    {/* Page Intro */}\r\n                    <div className=\"page-intro\">\r\n                        <div className=\"wrapper\">\r\n                            <div className=\"page-intro__layout\">\r\n                                <div className=\"page-intro__icon\">\r\n                                    <img src=\"/dashboard.svg\" alt=\"Student Portal\" />\r\n                                </div>\r\n                                <div className=\"page-intro__content rhythm\">\r\n                                    <h1 className=\"heading heading--h1\">Your Awards</h1>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n\r\n                {/* Offers */}\r\n                <div className=\"grants wrapper rhythm component\">\r\n                    <div className=\"notifications__header\">\r\n                        <h3 className=\"heading heading--h3\">Offers (not yet accepted or declined)</h3>\r\n                        {isLoading &&\r\n                            <Spinner className='floatRight'></Spinner>\r\n                        }\r\n                    </div>\r\n                    <div name=\"GrantsDisplay\" className=\"grants__list grant--scholarship\">\r\n                        {!isLoading && pendingPrograms.length === 0 &&\r\n                            <div>You currently have no offered awards.</div>\r\n                        }\r\n                        {!isLoading && pendingPrograms.map(program =>\r\n                            <AwardAccordian application={program} key={program.ProgramCode} />\r\n                        )}\r\n                    </div>\r\n                </div>\r\n\r\n                {/* Awarded */}\r\n                <div className=\"grants wrapper rhythm component\">\r\n                    <div className=\"notifications__header\">\r\n                        <h3 className=\"heading heading--h3\">Awarded</h3>\r\n                        {isLoading &&\r\n                            <Spinner className='floatRight'></Spinner>\r\n                        }\r\n                    </div>\r\n                    <div name=\"GrantsDisplay\" className=\"grants__list grant--scholarship\">\r\n                        {!isLoading && awardedPrograms.length === 0 &&\r\n                            <div>You currently have no awarded applications.</div>\r\n                        }\r\n                        {!isLoading && awardedPrograms.map(program =>\r\n                            <AwardAccordian application={program} key={program.ProgramCode} defaultExpanded={anchor === `#${program.ProgramCode}`} />\r\n                        )}\r\n                    </div>\r\n                </div>\r\n\r\n            </div>\r\n        </PortalView>\r\n    );\r\n}\r\n\r\nexport default Awards;\r\n","import React from 'react';\r\n\r\nfunction PrintIcons({tooltip = 'Print', description, ...props}) {\r\n\r\n  return (\r\n    <a href=\"#\" onClick={() => {window.print(); return false;}}><svg viewBox=\"0 0 24 24\" height=\"24\" width=\"24\"><path d=\"M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z\" fill=\"#ffffff\"></path></svg> <span className=\"sr-only\">Print</span></a>\r\n  );\r\n};\r\n\r\nexport default PrintIcons;\r\n\r\n","import { useEffect, useState } from 'react';\r\nimport apiClient from '../../utils/API';\r\nimport moment from 'moment';\r\nimport { UNLISTED_COLLEGECODE } from \"../../store/form/fields\";\r\n\r\n/**\r\n * apparently some kind of local caching of urls\r\n */\r\nconst FetchingPromises = new Map();\r\n\r\nasync function fetchValue(url) {\r\n    const key = url;  \r\n    if (FetchingPromises.has(key)) {\r\n        // If a fetch is already in progress, return the existing Promise\r\n        return FetchingPromises.get(key);\r\n    }\r\n\r\n    const promise = new Promise(async (resolve, reject) => {\r\n        try {\r\n            const result = await apiClient.get(url);       \r\n            resolve(result);\r\n        } catch (error) {\r\n            FetchingPromises.delete(key); // Remove the promise from the map\r\n            reject(error);\r\n        }\r\n    });\r\n\r\n    FetchingPromises.set(key, promise);\r\n    return promise;\r\n}\r\n\r\n/**\r\n * \r\n * @param {string} question \r\n * @param {number} year \r\n * @param {*} value \r\n */\r\nexport const getOption = async (question, year, value) => {\r\n    const option = await fetchValue(`answer/option?value=${value}&lookup.questionKey=${question}&lookup.year=${year}`);\r\n    return option?.Name || '';\r\n}\r\n\r\nexport const getHS = async (code) => {\r\n  const highschool = await fetchValue(`/high-school/${code}`);\r\n  return highschool?.Name || '';\r\n};\r\n\r\n\r\nexport const getCollege = async (code) => {\r\n  const college = await fetchValue(`/college/${code}`);\r\n  return college?.Name || '';\r\n};\r\n\r\n/**\r\n * get human readable message for given code\r\n * @param {string} codeType \r\n * @param {string} code \r\n * @returns string\r\n */\r\nexport const getCode = async (codeType, code) => {\r\n    if (!code || code === '') {\r\n        return null;\r\n    }\r\n\r\n    const codeKey = `${codeType}/${code}`;\r\n    const codeInfo = await fetchValue(`/code?code=${code}&codeType=${codeType}`);    \r\n    return codeInfo?.Message ?? \"\"; \r\n};\r\n\r\nexport const getCity = async (cityId) => {\r\n  if (!cityId) {\r\n    return;\r\n  }\r\n  const city = await fetchValue(`/city/${cityId}`);\r\n  return city ? `${city?.Name}, ${city?.StateAbbreviation} ` : '';\r\n};\r\n\r\nexport const getCounty = async (countyId) => {\r\n  if (!countyId) {\r\n    return;\r\n  }\r\n  try {\r\n    const county = await fetchValue(`/county/counties`, {\r\n      \"lookup.id\": countyId\r\n    });\r\n    if (county && county.CountyName) {\r\n      return county.CountyName;\r\n    } else {\r\n      return \"\"\r\n  } } catch (e) {\r\n    return \"\"\r\n  }\r\n}\r\n\r\nexport const getMajor = async (majorId) => {\r\n  const major = await fetchValue(`/major/${majorId}`);\r\n  return major.Title;\r\n};\r\n\r\nexport const getDegree = async (degreeId) => {\r\n  const degrees = await fetchValue(`/degree-program/degree-programs`);\r\n  for (const i in degrees) {\r\n    if (parseInt(degrees[i].Id) === parseInt(degreeId)) {\r\n      return degrees[i].Name;\r\n    }\r\n  };\r\n  return '';\r\n};\r\n\r\nexport const getRelation = async (code) => {\r\n  const relationshipTypes = await fetchValue(`relationship-type/relationship-types`);\r\n  for (const i in relationshipTypes) {\r\n    if (parseInt(relationshipTypes[i].Id) === parseInt(code)) {\r\n      return relationshipTypes[i].Description;\r\n    }\r\n  };\r\n  return '';\r\n};\r\n\r\nexport function DegreePlans({ degrees }) {\r\n    const [value, setValue] = useState([]);\r\n    useEffect(() => {\r\n        (async () => {\r\n            for (const i in degrees) {\r\n                let string =\r\n                    (degrees[i].DegreeId?.value ? 'Degree: ' + await getDegree(degrees[i].DegreeId?.value) + '\\n' : '') +\r\n                    (degrees[i].CIPMajorId?.value ? 'Major: ' + await getMajor(degrees[i].CIPMajorId?.value) + '\\n' : '') +\r\n                    (degrees[i].CIPMajorId2?.value ? 'Second or Double Major: ' + await getMajor(degrees[i].CIPMajorId2?.value) + '\\n' : '') +\r\n                    (degrees[i].GraduationDate?.value ? 'Expected Completion Date: ' + moment(degrees[i].GraduationDate?.value).format('L') : '');\r\n                if (i < degrees.length - 1) string += '\\n\\n';\r\n                setValue(old => [...old, string]);\r\n            }\r\n        })();\r\n    }, [degrees]);\r\n\r\n    return (\r\n        value.map((item) =>\r\n            <>{item}</>\r\n        )\r\n    )\r\n};\r\n\r\nconst ConvertCode = ({ codeType, code, address, parents, contact, provider, isHS = false, isCollege = false, isEdLevel = false, isAddress = false, isContact = false, isProvider = false }) => {\r\n\r\n    const [value, setValue] = useState(null);\r\n\r\n    async function describeCode(){\r\n        if (isHS) return await getHS(code);\r\n        if (isCollege){\r\n            if (code === UNLISTED_COLLEGECODE) \r\n                return \"Other, Unlisted College\";\r\n            return await getCollege(code);\r\n        }\r\n        if (isEdLevel) {\r\n            return (parents.parent1 ? (await getCode(\"EDLEVEL\", parents.parent1) + ' (Parent 1)\\n') : '') +\r\n                (parents.parent2 ? (await getCode(\"EDLEVEL\", parents.parent2) + ' (Parent 2)\\n') : '');\r\n        }            \r\n        \r\n        if (isAddress) \r\n            return ((address.street ? address.street : '') + '\\n' + (address.city ? await getCity(address.city) : '') + (address.county ? await getCounty(address.county) : '') + \" \" + (address.zip ? address.zip : ''));\r\n        \r\n        if (isContact) \r\n            return  (contact?.FirstName?.value ?? '') + ' ' + (contact?.LastName?.value ?? '') + '\\n' +\r\n                (contact?.RelationshipTypeId?.value ? ('(' + await getRelation(contact?.RelationshipTypeId?.value) + ')\\n') : '') +\r\n                (contact?.HomePhone?.value ? (contact.HomePhone?.value + ' (Home)\\n') : '') +\r\n                (contact?.WorkPhone?.value ? (contact.WorkPhone?.value + ' (Work)\\n') : '') +\r\n                (contact?.Email?.value ? (contact.Email?.value + '\\n') : '') +\r\n                (contact?.Address?.value ? (contact.Address?.value + '\\n') : '') +\r\n                (await getCity(contact?.CityId?.value) || '') + (contact?.Zip?.value ? (contact.Zip?.value) : '');\r\n\r\n        if (isProvider) \r\n            return (provider?.name ? provider?.name + '\\n' : '') +\r\n                    (provider?.phone ? provider?.phone + ' (Phone)\\n' : '') +\r\n                    (provider?.street ? provider?.street + '\\n' : '') +\r\n                    (provider?.city ? await getCity(provider?.city) + provider?.zip + '\\n' : '') +\r\n                    (provider?.start ? 'Start Date: ' + moment(provider?.start).format('L') + '\\n' : '') +\r\n                    (provider?.isNew ? '✓ New Provider\\n' : '') +\r\n                    (provider?.listed ? '✓ Listed with Oregon Department of Human Services\\n' : '') +\r\n                    (provider?.registered ? '✓ Registered or certified with the Child Care Division (CCD), Oregon Department of Employment\\n' : '') +\r\n                    (provider?.parent ? \"✓ Provider is the child's/childrens birth parent or your spouse or partner\\n\\n\" : '\\n\\n');\r\n\r\n        return await getCode(codeType, code);\r\n    }\r\n\r\n    useEffect(() => {\r\n        (async () => {            \r\n            const value = await describeCode();            \r\n            setValue(value);\r\n        })();\r\n    }, [code, address, parents, contact, provider]);\r\n    return <>{value}</>;\r\n};\r\n\r\nexport default ConvertCode\r\n","import React, { useState } from \"react\";\r\nimport DialogActions from \"@material-ui/core/DialogActions\";\r\nimport DialogContent from \"@material-ui/core/DialogContent\";\r\nimport DialogContentText from \"@material-ui/core/DialogContentText\";\r\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\r\nimport Button from \"./Button\";\r\nimport { Alert } from \"@material-ui/lab\";\r\nimport { useEffect } from \"react\";\r\nimport { FIELDS } from \"../store/form/fields\";\r\nimport { actions } from \"../store\";\r\nimport { useSelector } from \"react-redux\";\r\nimport ConvertCode from \"./Utility/ConvertCode\";\r\nimport apiClient from \"../utils/API\";\r\n\r\nfunction AwardAnnouncement({\r\n  open,\r\n  onClose,\r\n  onAccept,\r\n  details,\r\n  loading,\r\n  ...props\r\n}) {\r\n  // console.log(\"Announcement\", details);\r\n  const formState = useSelector((state) => state.form);\r\n  const get = (fieldKey) => formState.fields[fieldKey]?.value;\r\n  const [collegeName, setCollegeName] = useState(\"\");\r\n\r\n  const getAddress = (fieldKey) => {\r\n    const street = formState?.fields[fieldKey]?.Address.value;\r\n    const city = formState?.fields[fieldKey]?.CityId.value;\r\n    const county = formState?.fields[fieldKey]?.CountyId.value;\r\n    const zip = formState?.fields[fieldKey]?.Zip.value;\r\n    return { street, city, county, zip };\r\n  };\r\n\r\n  const fieldKeys = [\r\n    FIELDS.FIRST_NAME,\r\n    FIELDS.LAST_NAME,\r\n    FIELDS.PERMANENT_ADDRESS,\r\n  ];\r\n\r\n  useEffect(() => {\r\n    actions.fetchBasicFields(fieldKeys);\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    const collegeId = details?.awardState?.programAwardResults[0]?.CollegeId;\r\n    if (collegeId) {\r\n      apiClient.getCollege(collegeId).then((college) => {\r\n        setCollegeName(college.Name);\r\n      });\r\n    }\r\n  }, []);\r\n  return (\r\n    <>\r\n      <DialogTitle id=\"alert-dialog-title\">Award Announcement</DialogTitle>\r\n      {details ? (\r\n        <>\r\n          <DialogContent>\r\n            <DialogContentText id=\"alert-dialog-description\">\r\n              <Alert severity=\"danger\" color=\"warning\">\r\n                <p>\r\n                  Failure to accept this award or to notify OSAC of a change in college in a timely manner may delay or terminate your award\r\n                </p>\r\n              </Alert>\r\n              <div className=\"table-wrapper\">\r\n                <table className=\"table\">\r\n                  <tbody>\r\n                    <tr>\r\n                      <td valign=\"top\" style={{ fontWeight: \"bold\" }}>\r\n                        Award For:\r\n                      </td>\r\n                      <td>\r\n                        {get(FIELDS.FIRST_NAME) + \" \" + get(FIELDS.LAST_NAME)}\r\n                        <span style={{ display: \"block\" }}>\r\n                          <ConvertCode\r\n                            isAddress={true}\r\n                            address={getAddress(FIELDS.PERMANENT_ADDRESS)}\r\n                          />\r\n                        </span>\r\n                      </td>\r\n                    </tr>\r\n                    <tr>\r\n                      <td style={{ fontWeight: \"bold\" }}>Award name:</td>\r\n                      <td>{details.title}</td>\r\n                    </tr>\r\n                    <tr>\r\n                      <td style={{ fontWeight: \"bold\" }}>Academic Year:</td>\r\n                      <td>{details.awardState.semesterYearDescriptor}</td>\r\n                    </tr>\r\n                    <tr>\r\n                      <td style={{ fontWeight: \"bold\" }}>Award Amount:</td>\r\n                      <td>\r\n                        $\r\n                        {details.awardState &&\r\n                          details.awardState.totalAmountAwarded &&\r\n                          details.awardState.totalAmountAwarded.toLocaleString()}\r\n                      </td>\r\n                    </tr>\r\n                    <tr>\r\n                      <td style={{ fontWeight: \"bold\" }}>\r\n                        Award Notification Date:\r\n                      </td>\r\n                      <td>N/A</td>\r\n                    </tr>\r\n                    <tr>\r\n                      <td style={{ fontWeight: \"bold\" }}>\r\n                        Award Accept/Decline Date:\r\n                      </td>\r\n                      <td>You still need to accept/decline your award</td>\r\n                    </tr>\r\n                    <tr>\r\n                      <td style={{ fontWeight: \"bold\" }}>Current Status:</td>\r\n                      <td>\r\n                        Selected as a recipient - award notification not sent to\r\n                        recipient yet\r\n                      </td>\r\n                    </tr>\r\n                    <tr>\r\n                      <td style={{ fontWeight: \"bold\" }}>Current School:</td>\r\n                      <td>{collegeName}</td>\r\n                    </tr>\r\n                  </tbody>\r\n                </table>\r\n              </div>\r\n              <h5 className=\"heading heading--h5\">Scholarship Acceptance</h5>\r\n              <ul className=\"list\">\r\n                <li className=\"li\">Failure to accept this award may delay or terminate your award and delay awarding an alternate recipient.</li>\r\n                <li className=\"li\">If you are not sure about accepting or cannot accept the award, contact OSAC as soon as possible at <a href=\"mailto:AwardInfo@hecc.oregon.gov\">AwardInfo@hecc.oregon.gov</a></li>\r\n              </ul>\r\n              <h5 className=\"heading heading--h5\">Enrollment</h5>\r\n              <ul className=\"list\">\r\n                <li className=\"li\">If you transfer schools or become dual enrolled during the academic year, notify OSAC early to allow time to process change. School changes may result in adjusted or cancelled award amounts.</li>\r\n                <li className=\"li\">If you considering a leave of absence, contact OSAC at{\" \"} <a href=\"mailto:AwardInfo@hecc.oregon.gov\">AwardInfo@hecc.oregon.gov</a>{\" \"} to determine if that will jeopardize your scholarship eligiblity.</li>\r\n              </ul>\r\n              <h5 className=\"heading heading--h5\">Scholarship Disbursement</h5>\r\n              <ul className=\"list\">\r\n                <li className=\"li\">OSAC sends funds to your school financial aid office prior to the beginning of each term/semester. If you do not attend school for a term(s), you will not receive that portion of your award.</li>\r\n                <li className=\"li\">You must maintain the required enrollment status (see Conditions of Award above) and satisfactory academic progress to receive disbursements throughout the year.</li>\r\n                <li className=\"li\">Scholarships must be used for educational expenses as defined by your school. These include tuition and fees, room and board, books, transportation, and education-related personal costs.</li>\r\n              </ul>\r\n              <h5 className=\"heading heading--h5\">Accept or Decline Award</h5>\r\n              <ul className=\"list\">\r\n                <li className=\"li\">If you accept your award in compliance with the Conditions of the Award, click Accept button at the bottom to indicate your understanding of the Conditions.</li>\r\n                <li className=\"li\">If you are not able to meet the Conditions of the Award or are not attending a valid school, click close and click on decline on the award. This will allow OSAC to award an alternate.</li>\r\n                <li className=\"li\">If you are not attending school this year but will in the future and want to apply for a deferral, contact OSAC at{\" \"} <a href=\"mailto:AwardInfo@hecc.oregon.gov\">AwardInfo@hecc.oregon.gov</a></li>\r\n                <li className=\"li\">If you are unsure at this time, you may return to this page at before your acceptance deadline has passed.</li>\r\n              </ul>\r\n            </DialogContentText>\r\n          </DialogContent>\r\n          <DialogActions>\r\n            <Button onClick={onClose} label=\"Close\" variant=\"outline\"></Button>\r\n            <Button\r\n              loading={loading}\r\n              onClick={onAccept}\r\n              label=\"Accept\"\r\n              variant=\"solid\"\r\n            ></Button>\r\n          </DialogActions>\r\n        </>\r\n      ) : (\r\n        \"\"\r\n      )}\r\n    </>\r\n  );\r\n}\r\n\r\nexport default AwardAnnouncement;\r\n","import React from 'react';\r\nimport Accordion from '@material-ui/core/Accordion';\r\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\r\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\r\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\r\nimport ArrowRightIcon from '@material-ui/icons/ArrowRight';\r\nimport CheckIcon from '@material-ui/icons/Check';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport StatusButtons from '../AppStatusButtons';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport AwardAnnouncement from '../AwardAnnouncement';\r\nimport apiClient from '../../utils/API';\r\nimport { useDispatch } from 'react-redux';\r\nimport { open } from \"../../store/snack/actions\";\r\nimport moment from 'moment'\r\n\r\nexport default function ScholarshipsDisplay({details, onSelect = ()=>{}, count = 0,  ...props}) {\r\n  const [expanded, setExpanded] = React.useState(true);\r\n  const listRequirements = details.listRequirements;\r\n  const handleSelect = () => { onSelect(details); }\r\n  const dispatch = useDispatch();\r\n  const [openDialog, setOpenDialog] = React.useState(false);\r\n  const [loading, setLoading] = React.useState(false);\r\n  const handleAccept = async () => { setOpenDialog(true); }\r\n\r\n  const acceptAward = async () => {\r\n    setLoading(true)\r\n    try {\r\n      await apiClient.acceptApplicationAward(details.Code, details.year);\r\n      setLoading(false);\r\n      setOpenDialog(false)\r\n      window.location.reload();\r\n    }\r\n    catch (error) {\r\n      dispatch(open({\r\n        message: error.message,\r\n        severity: \"success\",\r\n      }))\r\n    } finally {\r\n      setLoading(false);\r\n      setOpenDialog(false)\r\n    }\r\n  }\r\n\r\n  const source = details?.programStatusResult?.Source;\r\n\r\n  // Mapping between 'ReviewStatus' and 'Renewal Messages' for \"Renew Scholarships cards\". \r\n  let renewalMessage = \"\";\r\n    \r\n  const displayRenewalMessages = () => {\r\n    \r\n    switch(details?.programStatusResult?.ReviewStatus){\r\n      case \"XINELG\":\r\n        renewalMessage = \"Ineligible\";\r\n        break;\r\n    \r\n      case \"HNOFAFSA\":\r\n        renewalMessage = \"FAFSA/ORSAA Required\";\r\n        break;\r\n    \r\n      case \"XCHGMAJ\":\r\n        renewalMessage = \"Ineligible Major\";\r\n        break;\r\n    \r\n      case \"XNONEED\":\r\n        renewalMessage = \"Ineligible Need\";\r\n        break;\r\n    \r\n      case \"XCHGCLG\":\r\n        renewalMessage = \"Ineligible College\";\r\n        break;\r\n    \r\n      case \"PEND_RENEWALREVIEW\":\r\n        renewalMessage = \"Submitted Pending Review\";\r\n        break;\r\n    \r\n      case \"HVFYFNDS\":\r\n        renewalMessage = \"Pending Committee Review\";\r\n        break;\r\n          \r\n      case \"RNW\":\r\n        renewalMessage = \"Renewed\";\r\n        break; \r\n              \r\n      case \"HCHGCLG\":\r\n        renewalMessage = \"Pending College Approval\";\r\n        break;\r\n          \r\n      case \"XNOLTR\":\r\n        renewalMessage = \"No Response from Applicant by Deadline\";\r\n        break;   \r\n    \r\n      case \"RNWEMSENT\":\r\n        renewalMessage = \"Renewal Available\"; \r\n        break;  \r\n      \r\n      case \"XDECLINE\":\r\n        renewalMessage = \"Declined Renewal\"; // To dispaly 'Application Progress' on 'Application' page. This is handled differently in 'DashBoard'. \r\n        break; \r\n          \r\n      default:\r\n        renewalMessage = \"\";\r\n        break;      \r\n    }\r\n\r\n    return renewalMessage;\r\n  }\r\n    \r\n  // Source should be 'Renew' for  a renewal application ('Source=Renew'). \r\n  // #4096: 2/16/2023: Do not use 'ReviewStatus' to decide the application is a Renewal or not. Use only 'Source=Renew'  \r\n  let renewalSCHAppFlag = false;\r\n    \r\n  const isRenewScholarshipApp = () => {\r\n\r\n    // If source == 'Renew' will come from API when 'Renew' Checkbox is checked, 'Award letter Sent' date is set, It should have Fund account & 'Amount' > 0. \r\n    renewalSCHAppFlag = details?.programStatusResult?.Source === 'Renew' ? true : false;\r\n\r\n    return renewalSCHAppFlag;\r\n  }\r\n\r\n  return (\r\n    <>\r\n    <Dialog open={openDialog} onClose={() => setOpenDialog(false)} aria-labelledby=\"alert-dialog-title\" aria-describedby=\"alert-dialog-description\">\r\n      <AwardAnnouncement onAccept={acceptAward} details={details} open={openDialog} loading={loading} onClose={() => setOpenDialog(false)}/>\r\n    </Dialog>\r\n\r\n    <div className=\"grants-display grants-display--scholarships\">\r\n      <Accordion expanded={expanded} square onChange={() => setExpanded(!expanded)} style={{boxShadow: 'none'}}>\r\n        <AccordionSummary aria-controls=\"panel1a-content\"id=\"panel1a-header\">\r\n          <div className=\"scholarships__header grants-body__title\">\r\n            <h4 className=\"heading heading--h4\">\r\n              {expanded ? <ArrowDropDownIcon style={{color: 'rgb(14, 149, 188)'}}/> : <ArrowRightIcon style={{color: 'rgb(14, 149, 188)'}}/>}\r\n              {details.Code && <span>#{details.Code} &nbsp;</span>}\r\n              {details.Name}\r\n            </h4>\r\n            <span className=\"icons\">\r\n              {details.matched && <Tooltip title='Matched to Your Profile'><img style={{margin: '4px 3px -3px 3px'}} src='/person_search_black.svg'/></Tooltip>}\r\n              {details.docsRequired && <Tooltip title='Documents Required for This Scholarship'><img style={{margin: '4px 3px -3px 3px'}} src='/text_snippet_black.svg'/></Tooltip>}\r\n              {details.membershipRequired && <Tooltip title='Membership or Employment Required'><img style={{margin: '4px 3px -3px 3px'}} src='/card_membership_black.svg'/></Tooltip>}\r\n            </span>\r\n          </div>\r\n        </AccordionSummary>\r\n        <AccordionDetails className=\"scholarship-body\">\r\n          <div className=\"rhythm\">\r\n            <div className=\"flex\">\r\n              <div>\r\n                <dl>\r\n                  <dt>Application Progress</dt>\r\n                  {isRenewScholarshipApp() && <div style={{color: '#377eda'}}>{displayRenewalMessages()}</div>  }\r\n                  {  !isRenewScholarshipApp() && details.statusState?.IsSubmitted &&\r\n                    <div style={{color: '#377eda'}}>Applied</div>\r\n                  }              \r\n                  {  !isRenewScholarshipApp() && (details.statusState?.IsStarted && source !== 'Auto' &&  (details.docsRequired === null || details.docsRequired === true)) && \r\n                    <div style={{color: '#377eda'}}>Added</div>\r\n                  }\r\n                  {  !isRenewScholarshipApp() && (details.statusState?.IsStarted && source !== 'Auto' &&  details.docsRequired === false) && \r\n                    <div style={{color: '#da3754'}}>In Progress </div>\r\n                  }\r\n                  {  !isRenewScholarshipApp() && source == 'Auto' &&\r\n                    <div style={{color: '#377eda'}}>Added</div> \r\n                  }\r\n                  {  !isRenewScholarshipApp() && (!details.statusState?.IsStarted && !details.statusState?.IsSubmitted) && details.status == 'eligible' &&\r\n                    <div style={{color: '#377eda'}}>Eligible</div>\r\n                  }\r\n                </dl>\r\n              </div>\r\n              <div>\r\n                <dl>\r\n                  <dt>Deadline</dt>\r\n                  <dd style={{color: 'rgba(51, 51, 51, 1)', fontWeight: 'bold'}}>{moment(details?.statusState?.Deadline).format(\"MMMM Do, YYYY h:mm a\")}</dd>\r\n                </dl>\r\n              </div>\r\n              {details?.Source?.toLowerCase() !== \"renew\" &&\r\n              <div>\r\n                <dl>\r\n                  <dt>Additional Documents</dt>\r\n                  {details.isComplete && details.docsRequired? <dd style={{ color: '#429D5B' }}>Completed</dd> : null}\r\n                  {details.isComplete === false && details.docsRequired? <dd style={{ color: '#da3754' }}>Not Completed</dd> : null}\r\n                  {details.isComplete === null? <dd>None Required</dd> : null}\r\n                </dl>\r\n              </div>\r\n              }\r\n            </div>\r\n\r\n            {/* JJB, adding this section as it seems appropriate to display the descriptions if they exist */}\r\n            {details.Desciption &&\r\n            <div className=\"rhythm\">\r\n              <h4 className=\"heading heading--h4\">Description:</h4>\r\n              <p>{details.Description}</p>\r\n            </div>\r\n            }\r\n\r\n            <div className=\"rhythm\">\r\n              <h4 className=\"heading heading--h4\">Requirements:</h4>\r\n              <ul className=\"list list--blank\" style={{columnCount: '2'}}>\r\n              {listRequirements.map((item, i) =>\r\n                <li className=\"li\" key={i}>\r\n                  <CheckIcon fontSize='.75rem' style={{color: 'rgba(66, 157, 91, 1)'}}/>\r\n                  &nbsp;\r\n                  {item.value}\r\n                </li>\r\n              )}\r\n              </ul>\r\n            </div>\r\n            {/* #3911/SP-333: Scholarship Renewal Process: Renewal Card not consistent with Dashboard cards. \r\n            incase of 'Renew' applications dispaly award amount only, When it is Renewed i.e. ReviewStaus is 'RNW'.  */}\r\n            {(!isRenewScholarshipApp() || details?.programStatusResult?.ReviewStatus === 'RNW') && details?.awardState?.totalAmountAwarded > 0 &&\r\n            <div className=\"rhythm\">\r\n              <h4 className=\"heading heading--h4\">\r\n                Awarded Amount ({details?.awardState?.semesterYearDescriptor})\r\n              </h4>\r\n              <strong>${details?.awardState?.totalAmountAwarded}</strong>\r\n            </div>\r\n            }\r\n          </div>\r\n        </AccordionDetails>\r\n      </Accordion>\r\n      <div>\r\n        <StatusButtons {...details} onAccept={handleAccept} onClick={handleSelect} isScholarship={true} count={count}/>\r\n      </div>\r\n    </div>\r\n    </>\r\n  );\r\n}\r\n","import React from 'react';\r\nimport { makeStyles, useTheme } from '@material-ui/core/styles';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport InputBase from '@material-ui/core/InputBase';\r\nimport IconButton from '@material-ui/core/IconButton';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n  root: {\r\n    //padding: '2px 4px',\r\n    position: 'relative',\r\n    marginTop: theme.spacing(3),\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    //minWidth: '20%',\r\n    boxShadow: 'none',\r\n    border: '1px solid rgba(194, 201, 209, 1)',\r\n    borderRadius: \"5px\",\r\n    height: '40px',\r\n\r\n  },\r\n  input: {\r\n    marginLeft: theme.spacing(1),\r\n    flex: 1,\r\n  },\r\n  iconButton: {\r\n    padding: 10,\r\n  },\r\n}));\r\n\r\nfunction SearchBar({ label, description, ...props }) {\r\n  const classes = useStyles();\r\n\r\n  return (\r\n    <Paper component=\"form\" className={classes.root}>\r\n    <IconButton /*type=\"submit\"*/ className={classes.iconButton} aria-label=\"search\">\r\n      <SearchIcon />\r\n    </IconButton>\r\n    <InputBase\r\n      onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n      type={'search'}\r\n      className={classes.input}\r\n      placeholder=\"Search...\"\r\n      inputProps={{ 'aria-label': description }}\r\n      value\r\n      {...props}\r\n    />\r\n    </Paper>\r\n  );\r\n}\r\n\r\nexport default SearchBar;\r\n","import { useState } from 'react';\r\nimport { usePagination } from '@material-ui/lab/Pagination';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n  ul: {\r\n    listStyle: 'none',\r\n    padding: 0,\r\n    display: 'flex',\r\n  },\r\n  button: {\r\n    fontFamily: 'Open Sans',\r\n    fontSize: '14px',\r\n    color: 'rgba(0, 0, 0, 0.5)',\r\n    background: 'white',\r\n    height: '32px',\r\n    width: '32px',\r\n    border: '1px solid #EFEFEF',\r\n    boxSizing: 'border-box',\r\n    borderRadius: '4px',\r\n    margin: '4px',\r\n  }\r\n});\r\n\r\nexport default function UsePagination({ count, hideNextButton = true, hidePrevButton = true, onChange = () => {},  ...props }) {\r\n  const classes = useStyles();\r\n\r\n  const handlePageChange = (e,page) => {\r\n    if(typeof onChange === 'function'){\r\n      onChange(page);\r\n    }\r\n  }\r\n\r\n  const { items } = usePagination({\r\n    count,\r\n    hideNextButton,\r\n    hidePrevButton,\r\n    onChange: handlePageChange,\r\n    ...props\r\n  });\r\n  const repairedItems = items.map(item => {\r\n    const selected = item.page === props.page;\r\n    return {...item, selected};\r\n  }); \r\n\r\n\r\n\r\n  return (\r\n    <nav>\r\n      <ul className={classes.ul}>\r\n        {repairedItems.map(({ page, type, selected, ...item }, index) => {\r\n          let children = null;\r\n\r\n          if (type === 'start-ellipsis' || type === 'end-ellipsis') {\r\n            children = '…';\r\n          } else if (type === 'page') {\r\n            children = (\r\n              <button type=\"button\" className={classes.button}\r\n                style={{\r\n                  fontWeight: selected ? 'bold' : undefined,\r\n                  color: selected && '#2C7274',\r\n                  background: selected && '#E6F9F6',\r\n                  border: selected && '1px solid #E6F9F6'\r\n                  }} {...item}>\r\n                {page}\r\n              </button>\r\n            );\r\n          } else {\r\n            children = (\r\n              <button type=\"button\" {...item}>\r\n                {type}\r\n              </button>\r\n            );\r\n          }\r\n\r\n          return <li key={index}>{children}</li>;\r\n        })}\r\n      </ul>\r\n    </nav>\r\n  );\r\n}\r\n","import React, {  } from 'react';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport { useHistory } from 'react-router';\r\nimport StatusButtons from \"../AppStatusButtons\";\r\n\r\nexport default function ScholarshipsDisplay({details, onSelect = ()=>{}, count, isSCHTab=false, ...props}) {\r\n\r\n  const history = useHistory();\r\n  const handleClick = () => {\r\n    history.push({\r\n      pathname: `/scholarship/${details.Code}`,\r\n      state: {\r\n        from: history.location.pathname,\r\n      },\r\n    });\r\n  };\r\n\r\n  return (\r\n    <div className=\"grants-display grants-display--scholarships\">\r\n      <div className=\"grants-display__layout\">\r\n        <div>\r\n          {/*<Checkbox name={`${details.title}-selected`} />*/}\r\n        </div>\r\n        <div>\r\n          {details.Code && <span>#{details.Code} &nbsp;</span>}\r\n          <div className=\"icons\">\r\n            {details.matched && <Tooltip title='Matched to Your Profile'><img src='/person_search.svg'/></Tooltip>}\r\n            {details.docsRequired === true && <Tooltip title='Documents Required for This Scholarship'><img src='/text_snippet.svg'/></Tooltip>}\r\n            {details.membershipRequired && <Tooltip title='Membership or Employment Required'><img src='/card_membership.svg'/></Tooltip>}\r\n          </div>\r\n        </div>\r\n        <div className=\"rhythm\">\r\n          <h4 className=\"heading heading--h4\">{details.Name}</h4>\r\n          <div className=\"grant-display__status\">\r\n            {details?.Source?.toLowerCase() !== \"renew\" &&\r\n              <div>\r\n                {details.isComplete && details.docsRequired? <div style={{ color: '#429D5B' }}>Additional Documents Completed</div> : null}\r\n                {details.isComplete === false && details.docsRequired? <div style={{ color: '#da3754' }}>Additional Documents needed</div> : null}\r\n                {details.isComplete === null? <div>No Additional Documents Required</div> : null}\r\n              </div>\r\n            }              \r\n            { (details.statusState?.IsStarted && details.statusState?.IsSubmitted) &&\r\n              <div style={{color: '#377eda'}}>Applied</div> \r\n            }\r\n          </div>\r\n        </div>\r\n\r\n        <div className='view-button' align='center'>\r\n          <StatusButtons {...details} onClick={handleClick} isScholarship={true} count={count} isSCHTab={isSCHTab} />\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n","import { useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { makeStyles, withStyles } from '@material-ui/core/styles';\r\nimport MuiTabs from '@material-ui/core/Tabs';\r\nimport MuiTab from '@material-ui/core/Tab';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Box from '@material-ui/core/Box';\r\nimport ScholarshipsDisplay from './ScholarshipsDisplay';\r\nimport SearchBar from '../SearchBar';\r\nimport { FieldRow, FieldSlot } from '../Forms/FieldSection';\r\nimport Pagination from '../Pagination';\r\nimport AllScholarships from './AllScholarships';\r\nimport Spinner from './../../components/Utility/Spinner';\r\nimport { useHistory } from \"react-router\";\r\nimport apiClient from \"../../utils/API\";\r\nimport { enrichProgramsWithDocInfo, combineWithLocalApp } from '../../utils';\r\n\r\nconst Tabs = withStyles({\r\n  root: {\r\n    borderBottom: '1px solid #ddd',\r\n    boxShadow: 'none',\r\n  },\r\n  indicator: {\r\n    backgroundColor: '#ddd',\r\n    height: '6px',\r\n  },\r\n})(MuiTabs);\r\n\r\nconst Tab = withStyles((theme) => ({\r\n  root: {\r\n    marginRight: '1.5rem',\r\n    fontSize: '.875rem',\r\n    '&$selected': {\r\n      color: '#333333',\r\n    },\r\n    '&:focus': {\r\n      color: '#333333',\r\n    },\r\n  },\r\n  selected: {},\r\n}))((props) => <MuiTab disableRipple {...props} />);\r\n\r\n/**\r\n * specify tabbing styles for scholarship processing\r\n * @param {*} props \r\n * @returns {Component}\r\n */\r\nfunction TabPanel(props) {\r\n  const { children, value, index, ...other } = props;\r\n\r\n  return (\r\n    <div\r\n      role=\"tabpanel\"\r\n      hidden={value !== index}\r\n      id={`simple-tabpanel-${index}`}\r\n      aria-labelledby={`simple-tab-${index}`}\r\n      {...other}\r\n    >\r\n      {value === index && (\r\n        <Box p={3}>\r\n          <Typography>{children}</Typography>\r\n        </Box>\r\n      )}\r\n    </div>\r\n  );\r\n}\r\n\r\nTabPanel.propTypes = {\r\n  children: PropTypes.node,\r\n  index: PropTypes.any.isRequired,\r\n  value: PropTypes.any.isRequired,\r\n};\r\n\r\nfunction a11yProps(index) {\r\n  return {\r\n    id: `simple-tab-${index}`,\r\n    'aria-controls': `simple-tabpanel-${index}`,\r\n  };\r\n}\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n  root: {\r\n    flexGrow: 1,\r\n  },\r\n  pageText: {\r\n  }\r\n}));\r\n\r\nconst PAGE_SIZE = 10;\r\n\r\nconst FilteringOptions = {\r\n  MOST_RECENT: \"Most Recent\",\r\n  HIDDEN: \"Hidden\"\r\n};\r\n\r\n/**\r\n * little helper to track common work of each search scope's state management\r\n */\r\nclass SearchScope {\r\n\r\n  constructor(state, year, isMembershipVerified, enrichFunction) {\r\n    this._state = state[0];\r\n    this._setState = state[1];\r\n    this._year = year;\r\n    this._isMembershipVerified = isMembershipVerified;\r\n    this._enrichWithApplication = enrichFunction;\r\n  }\r\n\r\n  get page() {\r\n    return this._state.page ?? 1;\r\n  }\r\n\r\n  updatePhrase(event) {\r\n    this._state.phrase = event.target.value;\r\n    this._state.page = 1; //reset back to first page for new search scope\r\n    const newState = { ...this._state, phrase: this.phrase, page: this.page };\r\n    this._setState(newState);\r\n    let phrase = this._state.phrase\r\n\r\n    if (isNaN(phrase) && phrase.length < 3) {\r\n      // if not a number and length is less than 3, return     \r\n      return;\r\n    }\r\n\r\n    if (!isNaN(phrase) && phrase.length < 1) {\r\n      // if  a number and length is less than 1, return    \r\n      return;\r\n    }\r\n\r\n    this.doSearch();\r\n  }\r\n\r\n  updatePage(page) {\r\n    this._state.page = page;\r\n    const newState = { ...this._state, page: this.page };\r\n    this._setState(newState);\r\n\r\n    this.doSearch();\r\n  }\r\n\r\n  get results() {\r\n    return this._state.results ?? [];\r\n  }\r\n\r\n  get isStarted() {\r\n    return this._state.results ? true : false;\r\n  }\r\n\r\n  get totalPages() {\r\n    return Math.ceil(this._state.totalCount / PAGE_SIZE)\r\n  }\r\n\r\n  get phrase() {\r\n    return this._state.phrase;\r\n  }\r\n \r\n  async doSearch() {\r\n\r\n    const results = await apiClient.get('/program/search', {\r\n      phrases: this.phrase ?? \"\",\r\n      parentProgram: 'SCH',\r\n      isMembershipVerified: this._isMembershipVerified,\r\n      currentPage: this.page - 1, //0-indexed in API\r\n      year: this._year\r\n    });\r\n    const resultApps = results.PageOfPrograms.map(p => this._enrichWithApplication(p));\r\n    const resultAppsWithDocs = await enrichProgramsWithDocInfo(resultApps, this._year);\r\n    const newState = {\r\n      page: this.page,\r\n      phrase: this.phrase,\r\n      results: resultAppsWithDocs,\r\n      totalCount: results.TotalCount\r\n    }\r\n    this._setState(newState);\r\n  }\r\n}\r\n\r\n/**\r\n * render the tab suite for which students can find and process their scholarhips\r\n * \r\n * @param {*} param0 \r\n * @returns {Component}\r\n */\r\nexport default function SimpleTabs({\r\n  startedScholarshipGetter,\r\n  isLoading = false,\r\n  year,\r\n  recommendationGetter\r\n}) {\r\n\r\n  const history = useHistory();\r\n  const classes = useStyles();\r\n  const [currentTabIndex, setCurrentTabIndex] = useState(0);\r\n  \r\n  const [startedScholarships, setStartedScholarships] = useState([]);  \r\n  const upcomingScholarships = startedScholarships.filter(a => a.Source !== 'Renew');\r\n  const renewals = startedScholarships.filter(a => a.Source === 'Renew');\r\n  const renewalTabOffset = renewals.length > 0 ? 1 : 0;\r\n  const recommendedTabIndex = 1 + renewalTabOffset;\r\n  const memberTagIndex = 2 + renewalTabOffset;\r\n  const catalogTabIndex = 3 + renewalTabOffset;\r\n\r\n  useEffect(async () => {\r\n    const apps = startedScholarshipGetter();\r\n    const appsWithDocs = await enrichProgramsWithDocInfo(apps);\r\n    setStartedScholarships(appsWithDocs);\r\n  }, []);\r\n\r\n\r\n\r\n\r\n  //local stashed copy of recommendations\r\n  const [recommendations, setRecommendations] = useState(null);\r\n  const handleChange = async (event, newValue) => {\r\n\r\n    setCurrentTabIndex(newValue);\r\n    \r\n    if (newValue == recommendedTabIndex) {\r\n      const {loadStatus, recommendations} = await recommendationGetter();    \r\n      if  (loadStatus == \"NEW\"){\r\n        const recommendedApps = recommendations.map(p => combineWithLocalApp(startedScholarships, p, {IsRecommended:true, Year: year}));\r\n        \r\n        const recommendedAppsWithDocs = await enrichProgramsWithDocInfo(recommendedApps, year);\r\n        setRecommendations(recommendedAppsWithDocs); //ensure that recommendations are available\r\n      }      \r\n    }\r\n    else if (newValue == memberTagIndex && !memberSearch.isStarted){ \r\n      memberSearch.doSearch();\r\n    }\r\n    else if (newValue == catalogTabIndex && !catalogSearch.isStarted){    \r\n      catalogSearch.doSearch();\r\n    }\r\n    \r\n\r\n  };\r\n\r\n  const onSelect = (number) => {\r\n    history.push({\r\n      pathname: `/scholarship/${number}`,\r\n      state: {\r\n        from: history.location.pathname,\r\n      },\r\n    });\r\n  };\r\n\r\n  let tabIndex = 0;\r\n  function nextTabIndex(){\r\n    return tabIndex++;\r\n  }\r\n\r\n  const catalogSearch = new SearchScope(useState({}), year, null, (p) => combineWithLocalApp(startedScholarships, p, {IsRecommended: false, Year: year}));\r\n  const memberSearch = new SearchScope(useState({}), year, true, (p) => combineWithLocalApp(startedScholarships, p, {IsRecommended: false, Year: year}));\r\n\r\n  if (isLoading) {\r\n    return (\r\n      <div className=\"flex center\">\r\n        <Spinner />\r\n      </div>\r\n    )\r\n  }\r\n\r\n  return (\r\n    <div className=\"scholarship-tabs\">\r\n      <Tabs value={currentTabIndex} onChange={handleChange} style={{ marginTop: '1.5rem', flexWrap: 'wrap' }}>\r\n        <Tab label=\"My Selected Scholarships\" {...a11yProps(0)} />\r\n        {renewals.length > 0 &&\r\n          <Tab label=\"Renewals\" {...a11yProps(1)} />\r\n        }\r\n        <Tab label=\"Recommended\" {...a11yProps(2)} />\r\n        <Tab label=\"Memberships/Employers\" {...a11yProps(3)} />\r\n        <Tab label=\"All\" {...a11yProps(4)} />\r\n      </Tabs>\r\n      <TabPanel value={currentTabIndex} index={nextTabIndex()}>\r\n        <div name='ScholarshipsDisplaySelected'>\r\n          {upcomingScholarships.map((item, i) =>\r\n            <div key={`listsch${i}`} style={{ paddingBottom: '2rem' }}>\r\n              <ScholarshipsDisplay key={i} details={item} onSelect={onSelect} count={startedScholarships.length} />\r\n            </div>\r\n          )\r\n          }\r\n\r\n        </div>\r\n        <div className=\"grants-display__grid\">\r\n          {upcomingScholarships.length == 0 &&\r\n            <div>&nbsp;&nbsp;&nbsp;No scholarships to display.</div>\r\n          }\r\n        </div>\r\n      </TabPanel>\r\n      {/* #3951/SP-347: Add Separate tab for scholarship renewals. */}\r\n      {renewals.length > 0 &&\r\n        <TabPanel value={currentTabIndex} index={nextTabIndex()}>\r\n          <div name='ScholarshipRenewalsSelected'>\r\n            {renewals.map((item, i) =>\r\n              <div key={`listschrnw${i}`} style={{ paddingBottom: '2rem' }}>\r\n                <ScholarshipsDisplay key={i} details={item} onSelect={onSelect} />\r\n              </div>\r\n            )\r\n            }\r\n\r\n          </div>\r\n          <div className=\"grants-display__grid\">\r\n            {renewals.length == 0 &&\r\n              <div>&nbsp;&nbsp;&nbsp;No scholarship renewals to display.</div>\r\n            }\r\n          </div>\r\n        </TabPanel>\r\n      }\r\n      <TabPanel value={currentTabIndex} index={nextTabIndex()}>\r\n        <div name=\"RecommendedScholarships\">\r\n          {/* #4951: Remove the word “Eligible” from all of the scholarships listed on the “recommended” tab in the application. */}\r\n          {recommendations && recommendations.map((item, i) =>\r\n            <AllScholarships key={i} details={item} isSCHTab={true} />\r\n          )}\r\n        </div>\r\n        <div className=\"grants-display__grid\">\r\n          {recommendations && recommendations.length == 0 &&\r\n            <div>&nbsp;&nbsp;&nbsp;No scholarships recommended.</div>\r\n          }\r\n          {!recommendations &&\r\n            <>\r\n              <div>Loading scholarship recommendations</div>\r\n              <Spinner />\r\n            </>\r\n          }\r\n        </div>\r\n      </TabPanel>\r\n      <TabPanel value={currentTabIndex} index={nextTabIndex()}>\r\n        <div name='MembershipScholarships'>\r\n          <FieldRow className='search space-between' style={{ marginBottom: '2rem' }}>\r\n            <div style={{ width: '50%' }}>\r\n              <FieldRow >\r\n                <FieldSlot md={6}>\r\n                  <SearchBar description='Search Member Scholarships' onChange={(e) => memberSearch.updatePhrase(e)} value={memberSearch.phrase} />\r\n                </FieldSlot>\r\n              </FieldRow>\r\n            </div>\r\n            <Pagination count={memberSearch.totalPages} onChange={(e) => memberSearch.updatePage(e)} page={memberSearch.page} />\r\n          </FieldRow>\r\n          <div className=\"grants-display__grid\">\r\n          {/* #5066: Remove the word “Eligible” from all the scholarships listed on the “Memberships/Employers” and “All” tabs in the application */}\r\n            {memberSearch.results.map((item, i) =>\r\n              <AllScholarships key={i} details={item} isSCHTab={true} />\r\n            )}\r\n            {memberSearch.isStarted && memberSearch.results.length == 0 &&\r\n              <div>No scholarships were found matching your selected keyword(s).</div>\r\n            }\r\n            {!memberSearch.isStarted &&\r\n              <div>Use search bar to look for scholarships by name or description </div>\r\n            }\r\n          </div>\r\n        </div>\r\n      </TabPanel>\r\n      <TabPanel value={currentTabIndex} index={nextTabIndex()}>\r\n        <FieldRow className='search space-between' style={{ marginBottom: '2rem' }}>\r\n          <div style={{ width: '50%' }}>\r\n            <FieldRow >\r\n              <FieldSlot md={6}>\r\n                <SearchBar description='Search Selected Scholarships' onChange={(e) => catalogSearch.updatePhrase(e)} value={catalogSearch.phrase} />\r\n              </FieldSlot>\r\n            </FieldRow>\r\n            <Pagination count={catalogSearch.totalPages} onChange={(e) => catalogSearch.updatePage(e)} page={catalogSearch.page} />\r\n          </div>\r\n          <div name=\"grants-display__grid\">\r\n            {/* #5066: Remove the word “Eligible” from all the scholarships listed on the “Memberships/Employers” and “All” tabs in the application */}\r\n            {catalogSearch.results.map((item, i) =>\r\n              <AllScholarships key={i} details={item} isSCHTab={true} />\r\n            )}\r\n            {catalogSearch.isStarted && catalogSearch.results.length == 0 &&\r\n              <div>No scholarships were found matching your selected keyword(s).</div>\r\n            }\r\n            {!catalogSearch.isStarted &&\r\n              <div>Use search bar to look for scholarships by name or description </div>\r\n            }\r\n          </div>\r\n        </FieldRow>\r\n      </TabPanel>\r\n    </div>\r\n  );\r\n}\r\n","import { useSelector } from \"react-redux\";\r\nimport React, { useState } from \"react\";\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport Button from \"../../components/Button\";\r\nimport PrintIcon from \"../../components/PrintIcon\";\r\nimport GrantsDisplay from \"../../components/GrantsDisplay\";\r\nimport PortalView from \"./../../components/Global/PortalView\";\r\nimport ScholarshipTabs from \"../../components/Scholarships/ScholarshipTabs\";\r\nimport { useEffect } from \"react\";\r\nimport apiClient from \"../../utils/API\";\r\nimport {enrichProgramAwardStatus, enrichProgramStatus, IsTabletOrMobile} from \"../../utils\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { useDebounce } from \"use-debounce\";\r\nimport { CODES } from \"./../../components/Utility/ProgramCodes\";\r\nimport maxBy from \"lodash/maxBy\";\r\nimport WarningIcon from \"@material-ui/icons/WarningRounded\";\r\nimport ProgramInfo from '../../utils/dtos/ProgramInfo';\r\nimport Spinner from './../../components/Utility/Spinner';\r\n//#3893/SP-293 : Enable expand/collapsed view of Grants & Scholarships sections.  \r\nimport Accordion from '@material-ui/core/Accordion';\r\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\r\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\r\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\r\nimport ArrowRightIcon from '@material-ui/icons/ArrowRight';\r\n\r\n\r\nconst GRANT_CODES = [\r\n  CODES.OREGON_PROMISE,\r\n  CODES.CHILD_CARE,\r\n  CODES.CHAFEE,\r\n  CODES.NATIONAL_GUARD,\r\n  CODES.OTSG,\r\n  // CODES.OTSP\r\n];\r\n\r\nfunction Applications() {\r\n  const methods = useForm({\r\n    mode: \"onBlur\",\r\n  });\r\n\r\n    // Start: #3893/SP-293 : Enable expand/collapsed view of Grants & Scholarships sections.\r\n    const [expandedGrants, setExpandedGrants] = React.useState(false);\r\n\r\n    const toggleExpandGrants = (e) =>{\r\n      if(e) e.preventDefault();\r\n      setExpandedGrants(!expandedGrants);\r\n    }\r\n  \r\n    const [expandedSCH, setExpandedSCH] = React.useState(false);\r\n  \r\n    const toggleExpandSCH = (e) =>{\r\n      if(e) e.preventDefault();\r\n      setExpandedSCH(!expandedSCH);\r\n    }\r\n  // End: #3893/SP-293 : Enable expand/collapsed view of Grants & Scholarships sections. \r\n\r\n  const { errors, formState, getValues, setValue, handleSubmit } = methods;\r\n  const authState = useSelector((state) => state.auth);\r\n  const reduxFormState = useSelector((state) => state.form);\r\n\r\n\r\n  const [profileComplete, setProfileComplete] = useState(true)\r\n  const [grantsLoaded, setGrantsLoaded] = useState(false)\r\n\r\n\r\n  const [scholarshipOverviewLoaded, setScholarshipOverviewLoaded] = useState(false)\r\n  const [scholarshipOverviewData, setScholarshipOverviewData] = useState(null);\r\n  const scholarshipOverview = new ProgramInfo(scholarshipOverviewData);\r\n\r\n\r\n\r\n\r\n  const [listGrants, setGrants] = useState([\r\n    {\r\n      title: \"Oregon Promise\",\r\n      code: CODES.OREGON_PROMISE,\r\n      description:\r\n        \"For recent Oregon high school graduates and GED&reg; recipients who enroll in an Oregon community college within six months of graduation. All Oregon Promise applicants must also submit a FAFSA/ORSAA by the application deadline.\",\r\n      progress: 0,\r\n      deadline: \"May 2nd 2021\",\r\n      terms: \"Fall, Winter, Spring 2022\",\r\n      awardAmount: 284,\r\n    },\r\n    {\r\n      title: \"Student Child Care Grant\",\r\n      code: CODES.CHILD_CARE,\r\n      description: \"\",\r\n      progress: 0,\r\n      deadline: \"May 2nd 2021\",\r\n      terms: \"Fall, Winter, Spring 2022\",\r\n      awardAmount: null,\r\n    },\r\n    {\r\n      title: \"Chafee ETG\",\r\n      code: CODES.CHAFEE,\r\n      description: \"\",\r\n      progress: 0,\r\n      deadline: \"May 2nd 2021\",\r\n      terms: \"Fall, Winter, Spring 2022\",\r\n      awardAmount: null,\r\n    },\r\n    {\r\n      title: \"Oregon National Guard Grant\",\r\n      code: CODES.NATIONAL_GUARD,\r\n      description: \"\",\r\n      progress: 0,\r\n      deadline: \"May 2nd 2021\",\r\n      terms: \"Fall, Winter, Spring 2022\",\r\n      awardAmount: null,\r\n    },\r\n    {\r\n      title: \"Oregon Tribal Student Grant\",\r\n      code: CODES.OTSG,\r\n      description: \"\",\r\n      progress: 0,\r\n      deadline: \"May 2nd 2021\",\r\n      terms: \"Fall, Winter, Spring 2022\",\r\n      awardAmount: null,\r\n    },\r\n    // {\r\n    //   title: \"Oregon Teacher Scholars Program\",\r\n    //   code: CODES.OTSP,\r\n    //   description: \"\",\r\n    //   progress: 0,\r\n    //   deadline: \"May 2nd 2021\",\r\n    //   terms: \"Fall, Winter, Spring 2022\",\r\n    //   awardAmount: null,\r\n    // },\r\n  ]);\r\n\r\n\r\n  /**\r\n   * load first scholarships tab\r\n   * @param {*} options \r\n   * @returns \r\n   */\r\n  const getScholarships = async(options)=>{\r\n    //setScholarships([]);\r\n    const result = await apiClient.getScholarships(options, 0, scholarshipOverview.currentYear);\r\n    const scholarships = result.scholarships\r\n    //setScholarships(scholarships);\r\n    const totalPages = scholarships.totalCount / PAGE_SIZE\r\n\r\n    return { scholarships, totalPages }\r\n  }\r\n\r\n  function isGrant(code) {\r\n    return GRANT_CODES.some(g => g === code);\r\n  }\r\n\r\n  const history = useHistory();\r\n\r\n  // get data from API\r\n\r\n  const [state, setState] = useState({\r\n    totalScholarshipPages: 0,\r\n    isScholarshipsLoading: false,\r\n    isGrantStatusLoading: false,\r\n    isScholarshipStatusLoading: false,\r\n  });\r\n  const [scholarships, setScholarships] = useState([]);\r\n  const [schStatus, setSchStatus] = useState([]);\r\n  const [tabData, setTabData] = useState([null,null,null,null,null]);\r\n  const [totalPageCount, setTotalPageCount] = useState(0)\r\n  // const [schAwardSrtatuses, setSchAwardStatuses] = useState([]);\r\n  // const [schApplicationStatuses, setSchApplicationStatuses] = useState([]);\r\n\r\n  const FilteringOptions = {\r\n    MOST_RECENT: \"Most Recent\",\r\n    HIDDEN: \"Hidden\",\r\n  };\r\n\r\n  const PAGE_SIZE = 10;\r\n\r\n  const [filteringParams, setFilteringParams] = useState({\r\n    searchQuery: null,\r\n    filteringOption: FilteringOptions.MOST_RECENT,\r\n    pageSize: PAGE_SIZE,\r\n    page: 1,\r\n    tab: 0,\r\n  });\r\n\r\n  const [debouncedFilteringParams] = useDebounce(filteringParams, 1000);\r\n\r\n  const getScholarshipOverviewData = async() =>{\r\n\r\n    const result = await apiClient.getProgram('SCH');\r\n    setScholarshipOverviewData(result);\r\n    setScholarshipOverviewLoaded(true);\r\n  }\r\n  /**\r\n   * determine if schoalrship season is currently open, based on current enriched scholarship state\r\n   * @returns {Boolean}\r\n   */\r\n\r\n\r\n  const getGrantData = async (data, e) => {\r\n    // Get Scholarships, and fetch status of hardcoded Grant Programs\r\n    setState({\r\n      ...state,\r\n      isGrantStatusLoading: true,\r\n    });\r\n    try {\r\n      const requests = [];\r\n      GRANT_CODES.map((code) => requests.push(apiClient.getProgram(code)));\r\n      const programResults = await Promise.all(requests);\r\n\r\n      const activeGrants = [];\r\n      programResults.map((p) => {\r\n        const activeSeasons = p.ActiveSeasons;\r\n        if (activeSeasons) {\r\n          const year = maxBy(activeSeasons, \"Year\").Year;\r\n          if (year) {\r\n            const temp = { year };\r\n            const grant = listGrants.find((g) => g.code === p.Code);\r\n            if (grant) {\r\n              activeGrants.push(Object.assign(temp, grant));\r\n            }\r\n          }\r\n        }\r\n      });\r\n\r\n      /*--- Grab the next year for Chafee to get foster care flag\r\n      let chafeeNextYear = {\r\n        code:\"CH\",\r\n        year: activeGrants[2].year + 1\r\n      };\r\n      activeGrants.push(chafeeNextYear)\r\n      */\r\n\r\n      let [...newGrantList ] = await Promise.all([\r\n        ...enrichProgramStatus(activeGrants, \"Code\"),\r\n      ]);\r\n\r\n      //setGrants(newGrantList);\r\n\r\n      // Asynchronously get award information for scholarships & grants\r\n      const [ grantListWithAwards ] = await Promise.all([\r\n        Promise.all(enrichProgramAwardStatus(newGrantList, \"Code\")),\r\n      ]);\r\n\r\n      /*--- Get Foster care flag from \"profile active year\"\r\n      if(!grantListWithAwards[2].statusState.IsRecommended){\r\n        if(grantListWithAwards[2].statusState.IsStarted){\r\n          grantListWithAwards[2].status = \"inProgress\";\r\n        }\r\n        else{\r\n          grantListWithAwards[2].status = grantListWithAwards[5].status\r\n        }\r\n        grantListWithAwards[2].statusState.IsRecommended = grantListWithAwards[5].statusState.IsRecommended;\r\n        grantListWithAwards[2].programStatusResult.IsRecommended = grantListWithAwards[5].programStatusResult.IsRecommended;\r\n      }\r\n      grantListWithAwards.pop();\r\n      */\r\n\r\n      setGrants(grantListWithAwards);\r\n      setGrantsLoaded(true)\r\n    } catch (err) {\r\n      console.error(err);\r\n      setState({\r\n        ...state,\r\n        isGrantStatusLoading: false,\r\n      });\r\n    }\r\n  };\r\n\r\n  const getScholarshipData = async (e) => {\r\n    // only get results if this is a search tab, or if the requested tab data is empty\r\n    if(!tabData[debouncedFilteringParams.tab] || debouncedFilteringParams.tab > 2 ) {\r\n      if(debouncedFilteringParams.tab === 0 || debouncedFilteringParams.tab === 1)\r\n      {\r\n        // Scholarship information is available on page load use it for both tab-0 (Selected Scholarships) & tab-1 (Scholarship Renewals).        \r\n        let tmpArray = [...tabData];  \r\n        tmpArray[0] = scholarships.filter(schCard => schCard?.programStatusResult?.Source !== 'Renew' ); ;\r\n        tmpArray[1] = scholarships.filter(schCard => schCard?.programStatusResult?.Source === 'Renew' );         \r\n        setTabData(tmpArray); \r\n        setTotalPageCount (Math.ceil(Number(tmpArray[1].length)/PAGE_SIZE)); \r\n      }\r\n      else{        \r\n      setState({\r\n        ...state,\r\n        isScholarshipsLoading: true,\r\n      });\r\n      try {\r\n        let [\r\n          { scholarships: newScholarships, totalPages }\r\n        ] = await Promise.all([\r\n          apiClient.getScholarships(\r\n            {\r\n              \"phrases\": debouncedFilteringParams.searchQuery,\r\n              \"currentPage\": debouncedFilteringParams.page,\r\n            },\r\n            debouncedFilteringParams.tab,\r\n            scholarshipOverview.currentYear\r\n          ),\r\n        ]);\r\n        setTotalPageCount(totalPages)\r\n\r\n        //setScholarships(newScholarships);\r\n        setState((state) => ({\r\n          ...state,\r\n          totalScholarshipPages: totalPages,\r\n        }));\r\n\r\n        // Asynchronously get status information for scholarships\r\n        newScholarships = await Promise.all(\r\n          enrichProgramStatus(newScholarships, \"Code\")\r\n        );\r\n\r\n        //setScholarships(newScholarships);\r\n\r\n        // Asynchronously get award information for scholarships & grants\r\n        const [\r\n          scholarshipsWithAwards,\r\n        ] = await Promise.all([\r\n          Promise.all(enrichProgramAwardStatus(newScholarships, \"Code\")),\r\n        ]);\r\n\r\n        setScholarships(scholarshipsWithAwards);\r\n\r\n        let tmpArray = [...tabData]\r\n        tmpArray[debouncedFilteringParams.tab] = scholarshipsWithAwards\r\n        setTabData(tmpArray)\r\n\r\n        // get the parent SCH status\r\n        const schStatusResult = await apiClient.getApplication('SCH',  scholarshipOverview.currentYear)\r\n        setSchStatus(schStatusResult)\r\n        setState({\r\n          ...state,\r\n          isScholarshipsLoading: false,\r\n        });\r\n\r\n      } catch (err) {\r\n        console.error(err);\r\n        setState({\r\n          ...state,\r\n          isScholarshipsLoading: false,\r\n        });\r\n      }\r\n    } // tab === 0 || tab === 1 ending.\r\n    } //tab > 2 ending.\r\n  };\r\n\r\n\r\n  useEffect(() => {\r\n    (async () => {\r\n      if (!grantsLoaded) { // only run once\r\n        await getGrantData();\r\n      }\r\n      if (!scholarshipOverviewLoaded){\r\n        await getScholarshipOverviewData();\r\n      }\r\n      await getScholarshipData()\r\n\r\n    })();\r\n  }, [debouncedFilteringParams, scholarshipOverview.currentYear]);\r\n\r\n\r\n  useEffect(() => {\r\n    (async () => {\r\n      setState({\r\n        ...state,\r\n        isScholarshipsLoading: true,\r\n        isGrantStatusLoading: true,\r\n        scholarships: []\r\n      })\r\n      try {\r\n        // // console.log(\"Get scholarships\", )\r\n        const requests = []\r\n        GRANT_CODES.map(code => requests.push(apiClient.getProgram(code)))\r\n        const programResults = await Promise.all(requests)\r\n        // // console.log(\"Program Results\", programResults)\r\n        const activeGrants = []\r\n        programResults.map(p => {\r\n          const activeSeasons = p.ActiveSeasons;\r\n          if (activeSeasons) {\r\n            const year = maxBy(activeSeasons, \"Year\").Year\r\n            if (year) {\r\n              const temp = { year }\r\n              // const grant = listGrants.find(g => g.code === p.Code)\r\n              if (isGrant(p.Code)) {\r\n                activeGrants.push(Object.assign(temp, p))\r\n              }\r\n            }\r\n          }\r\n        })\r\n\r\n        /*--- Grab the next year for Chafee to get foster care flag\r\n        let chafeeNextYear = {\r\n          code:\"CH\",\r\n          year: activeGrants[2].year + 1\r\n        };\r\n        activeGrants.push(chafeeNextYear)\r\n        */\r\n\r\n        const [{ totalPages, scholarships }, ...newGrants] = await Promise.all([getScholarships(),...enrichProgramStatus(activeGrants)]);\r\n\r\n        //setGrants(newGrants);\r\n\r\n        // Enrich scholarships with status\r\n        const newScholarships = await Promise.all(enrichProgramStatus(scholarships));\r\n        //setScholarships(newScholarships);\r\n\r\n        // Asynchronously get award information for scholarships & grants\r\n        const [grantListWithAwards, scholarshipsWithAwards] = await Promise.all([\r\n          Promise.all(enrichProgramAwardStatus(newGrants, 'Code')),\r\n          Promise.all(enrichProgramAwardStatus(newScholarships, 'Code'))\r\n        ])\r\n\r\n        /*--- Get Foster care flag from \"profile active year\"\r\n        if(!grantListWithAwards[2].statusState.IsRecommended){\r\n          if(grantListWithAwards[2].statusState.IsStarted){\r\n            grantListWithAwards[2].status = \"inProgress\";\r\n          }\r\n          else{\r\n            grantListWithAwards[2].status = grantListWithAwards[5].status\r\n          }\r\n          grantListWithAwards[2].statusState.IsRecommended = grantListWithAwards[5].statusState.IsRecommended;\r\n          grantListWithAwards[2].programStatusResult.IsRecommended = grantListWithAwards[5].programStatusResult.IsRecommended;\r\n        }\r\n        grantListWithAwards.pop();\r\n        */ \r\n\r\n        setGrants(grantListWithAwards);\r\n        setScholarships(scholarshipsWithAwards);\r\n\r\n        // Scholarship information is available on page load use it for both tab-0 (Selected Scholarships) & tab-1 (Scholarship Renewals).        \r\n        let tmpArray = [...tabData];  \r\n        tmpArray[0] = scholarshipsWithAwards.filter(schCard => schCard?.programStatusResult?.Source !== 'Renew' ); \r\n        tmpArray[1] = scholarshipsWithAwards.filter(schCard => schCard?.programStatusResult?.Source === 'Renew' );         \r\n        setTabData(tmpArray);\r\n        setTotalPageCount (Math.ceil(Number(tmpArray[1].length)/PAGE_SIZE));        \r\n\r\n      } catch (err) {\r\n        console.error(err);\r\n      } finally {\r\n        setState({\r\n          ...state,\r\n          isScholarshipsLoading: false,\r\n          isGrantStatusLoading: false\r\n        })\r\n      }\r\n    })();\r\n  }, [scholarshipOverview.currentYear]);\r\n\r\n  const goToProfile = async (data, e) => {\r\n    document.location.href = '/profile'\r\n  }\r\n\r\n  const handleSearch = (searchQuery, tab) => {\r\n    setFilteringParams({\r\n      ...filteringParams,\r\n      searchQuery,\r\n      tab,\r\n    });\r\n  };\r\n\r\n  const handlePageChange = (page) => {\r\n    setFilteringParams({\r\n      ...filteringParams,\r\n      page,\r\n    });\r\n  };\r\n\r\n  const scholarshipOptions = {\r\n    totalPages: totalPageCount,\r\n    // listScholarships: scholarships,\r\n    tabData,\r\n    filteringParams,\r\n    onSearch: handleSearch,\r\n    onPageChange: handlePageChange,\r\n    onSelect: (scholarship) => {\r\n      history.push({\r\n        pathname: `/scholarship/${scholarship.code}`,\r\n        state: {\r\n          from: history.location.pathname,\r\n        },\r\n      });\r\n    },\r\n  };\r\n\r\n  const onScholarShipChange = (number) => {\r\n    console.log(\"Scholarship change requested\", number);\r\n    setFilteringParams({\r\n      ...filteringParams,\r\n      tab: number,\r\n    });\r\n  };\r\n\r\n  const isTabletOrMobile = IsTabletOrMobile();\r\n\r\n  const handleStartScholarship = () => {\r\n    history.push({ pathname: \"/additional-scholarship-info\" });\r\n  };\r\n\r\n    // Open 'step-by-step-guide-for-the-osac-sch-app.pdf' document in a new tab.\r\n    const handleStudentGuidePdf = () => {\r\n      window.open(\"https://oregonstudentaid.gov/media/tejbilku/step-by-step-guide-for-the-osac-sch-app.pdf\");      \r\n  };\r\n\r\n\r\n  return (\r\n    <FormProvider {...methods}>\r\n      <PortalView>\r\n        <div name=\"ApplicationsPage\" className=\"applications-page\">\r\n\r\n          <div className=\"page-intro\">\r\n            <div className=\"wrapper\">\r\n              <div className=\"page-intro__layout\">\r\n                <div className=\"page-intro__icon\">\r\n                  <img src=\"/MyApplictionsIcon.svg\" alt=\"Applications icon\" style={{ marginTop: \".5rem\" }} />\r\n                </div>\r\n                <div className=\"page-intro__content rhythm\">\r\n                  <h1 className=\"heading heading--h1\">\r\n                    My Applications\r\n                    <PrintIcon />\r\n                  </h1>\r\n                  <a href=\"/profile\">Return to Profile</a>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n          {!profileComplete &&\r\n            <div className=\"notifications component rhythm\">\r\n              <div className=\"wrapper rhythm\">\r\n                <div className=\"notifications__content\">\r\n                  <div className=\"notification\">\r\n                    <div className=\"notification__layout\">\r\n                      <div>\r\n                        <div><WarningIcon sx={{ color: \"#da3754\" }} /></div>\r\n                      </div>\r\n                      <div className=\"rhythm\">\r\n                        <h4 className=\"heading heading--h5 notification__title\">Please Complete Your Profile</h4>\r\n                        <div className=\"notification__message rhythm\">\r\n                          <p>In order to apply for grants and scholarships, your profile questions need to be completed.</p>\r\n                          <Button name=\"getStarted\" label=\"Get Started\" type=\"button\" onClick={goToProfile} />\r\n                        </div>\r\n                      </div>\r\n                    </div>\r\n                  </div>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          }\r\n          {/* Start: #3893/SP-293 : Enable expand/collapsed view of Grants & Scholarships sections. */}           \r\n          <div className=\"component\" style= {{padding: '50px 0px 40px 140px'}} >To access <b>Grants</b> and <b>Scholarships</b>, please click below (expand or collapse the sections as needed). <br></br>For helpful tips on applying for Scholarships, view our <a href='#' onClick={handleStudentGuidePdf}><b>Guide for Students Step-by-Step and Helpful Tips</b></a>.</div>\r\n          <div>\r\n            {profileComplete &&\r\n              <div name=\"Grants\" className=\"wrapper wrapper--narrow\">\r\n                <Accordion square expanded={expandedGrants}>\r\n                  <AccordionSummary aria-controls=\"panel1a-content\" id=\"panel1a-header\" className=\"component\">\r\n                    <div className=\"grants-display__layout\">\r\n                      <h3 className=\"heading heading--h3 pointer\" onClick={toggleExpandGrants}>\r\n                        {expandedGrants ? <ArrowDropDownIcon style={{color: '#0e95bc'}}/> : <ArrowRightIcon style={{color: '#0e95bc'}}/>}\r\n                          Grants\r\n                      </h3>\r\n                    </div>\r\n                  </AccordionSummary>\r\n                  <AccordionDetails>\r\n                    <div name=\"GrantsDisplay\" className=\"grants-list\">\r\n                        {listGrants.map((item, i) => (\r\n                          <GrantsDisplay key={i} details={item}/>\r\n                        ))}\r\n                    </div>\r\n                  </AccordionDetails>\r\n                </Accordion>\r\n              </div>\r\n            }\r\n          </div>\r\n          <div>\r\n            {profileComplete &&\r\n              <div name=\"Scholarships\" className=\"wrapper wrapper--narrow\">\r\n                <Accordion square expanded={expandedSCH}>\r\n                  <AccordionSummary aria-controls=\"panel1a-content\" id=\"panel1a-header\" className=\"component\">\r\n                    <div className=\"grants-display__layout\">\r\n                      <h3 className=\"heading heading--h3 pointer\" onClick={toggleExpandSCH}>\r\n                        {expandedSCH ? <ArrowDropDownIcon style={{color: '#0e95bc'}}/> : <ArrowRightIcon style={{color: '#0e95bc'}}/>}\r\n                        Scholarships\r\n                      </h3>\r\n                    </div>\r\n                  </AccordionSummary>\r\n                  <AccordionDetails>\r\n                    <div>\r\n                      {!scholarshipOverviewLoaded ?\r\n                          <Spinner/>\r\n                        : scholarshipOverview.isStarted ?\r\n                        <Button onClick={handleStartScholarship} label={ schStatus ? 'Edit' : 'Start' } >{ schStatus ? 'Edit' : 'Start' }</Button>\r\n                        : <p>\r\n                              Scholarships is currently closed. Come back on {scholarshipOverview.startEvent?.displayDate} to see our {scholarshipOverview.currentYear} catalog\r\n                          </p>\r\n                      }                  \r\n                      {!scholarshipOverviewLoaded ?\r\n                        <></>\r\n                      : scholarshipOverview.isStarted ?\r\n                        <ScholarshipTabs\r\n                          onTabChange={onScholarShipChange}\r\n                          {...scholarshipOptions}\r\n                          isLoading={state.isScholarshipsLoading}\r\n                        />\r\n                      : <></>\r\n                      }\r\n                    </div>\r\n                  </AccordionDetails>\r\n                </Accordion>\r\n              </div>\r\n            }\r\n          </div>   {/* End: #3893/SP-293 : Enable expand/collapsed view of Grants & Scholarships sections. */}   \r\n        </div>\r\n      </PortalView>\r\n    </FormProvider>\r\n  );\r\n}\r\n\r\nexport default Applications;\r\n","import React from 'react';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport NumberFormat from 'react-number-format';\r\nimport { InputLabel } from '@material-ui/core';\r\nimport { useFormContext } from 'react-hook-form';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n  root: {\r\n    position: 'relative',\r\n    marginTop: theme.spacing(1.5),\r\n    '& > * > *': {\r\n      borderRadius: \"5px\",\r\n      background: 'white',\r\n    },\r\n    '& input': {\r\n      height: '10px',\r\n    },\r\n  },\r\n}));\r\n\r\nexport default function NumericFormat({ name, description, label, format, mask = '_', inputLabel, isRequired = false, ...props }) {\r\n  const classes = useStyles();\r\n  const methods = useFormContext({ mode: 'onBlur' });\r\n  const { errors } = methods;\r\n  const error = errors[name];\r\n\r\n  return (\r\n    <div className={classes.root}>\r\n      <InputLabel>\r\n        {inputLabel}\r\n        {\r\n          isRequired && (\r\n            <span style={{color:'red'}}>*</span>\r\n          )\r\n        }\r\n      </InputLabel>\r\n      <NumberFormat\r\n        onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n        label={label}\r\n        customInput={TextField}\r\n        error={!!error}\r\n        format={format}\r\n        //allowEmptyFormatting\r\n        mask={mask}\r\n        aria-label={description}\r\n        fullWidth={true}\r\n        {...props}\r\n      />\r\n      {\r\n        error?.message && (\r\n          <div style={{ color: 'red', fontSize: '0.875rem' }}>\r\n              {error?.message}\r\n          </div>\r\n        )\r\n      }\r\n    </div>\r\n  );\r\n};\r\n","import NumericFormat from './NumericFormat';\r\nimport React from 'react';\r\nimport InputDecorator from './InputDecorator';\r\n\r\nconst rules = {\r\n  pattern: {\r\n    value: /(\\+\\d{1,3}\\s?)?((\\(\\d{3}\\)\\s?)|(\\d{3})(\\s|-?))(\\d{3}(\\s|-?))(\\d{4})(\\s?(([E|e]xt[:|.|]?)|x|X)(\\s?\\d+))?/,\r\n    message: \"Invalid phone number\"\r\n  }\r\n};\r\n\r\nfunction Telephone({ description, format = '(###) ###-####', control, ...props }) {\r\n\r\n  return (\r\n    <NumericFormat\r\n      onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n      format={format}\r\n      aria-label={description}\r\n      {...props}\r\n    />\r\n  );\r\n}\r\n\r\nexport default InputDecorator(Telephone, rules);\r\n","import React from 'react';\r\nimport { makeStyles, useTheme } from '@material-ui/core/styles';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport Select from '@material-ui/core/Select';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\nimport InputDecorator from './InputDecorator';\r\nimport { get } from 'lodash';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n  root: {\r\n    position: 'relative',\r\n    marginTop: theme.spacing(1.5),\r\n    \r\n    '& > * > *': {\r\n      borderRadius: \"5px\",\r\n    },\r\n    '& input': {\r\n      height: '10px',\r\n    }\r\n  },\r\n})); \r\n\r\nfunction SimpleSelect({label, name, rules, isRequired = false, isSoftRequired = false, description, listItems, helperText, inputLabel, ...props}) {\r\n\r\n  const theme = useTheme();\r\n  const classes = useStyles();\r\n  const methods = useFormContext({ mode: 'onBlur' });\r\n  const { errors } = methods;\r\n  const error = get(errors, name);\r\n\r\n  return (\r\n    <div className={classes.root} style={{ marginTop: theme.spacing(2) }}>\r\n      <InputLabel>\r\n        {label}\r\n        {// required: show red * and prevent user from saving if null\r\n          isRequired && (\r\n            <span style={{color:'red'}}>&nbsp;*</span>\r\n          )\r\n        } \r\n        {// isSoftRequired: show red * but do not prevent user from saving if null\r\n          isSoftRequired && !isRequired\r\n                          ? (<span style={{color:'red'}}>&nbsp;*</span>)\r\n                          : null\r\n        } \r\n      </InputLabel>\r\n      <Select fullWidth={true} aria-label={description} style={{ height: '42px', borderRadius: \"5px\", margin: 0, background: 'white' }} error={!!error} {...props}>\r\n        {listItems.map((item,i) => <MenuItem key={`${name}-${i}}`} value={item.value} label={item.label}>{item.label}</MenuItem>)}\r\n      </Select>\r\n      <FormHelperText style={{paddingLeft: '.5rem'}}>{helperText}</FormHelperText>\r\n      {\r\n        error?.message && (\r\n          <div style={{ color: 'red', fontSize: '0.875rem' }}>\r\n            {error?.message}\r\n          </div>\r\n        )\r\n      }\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default InputDecorator(SimpleSelect);","import React from 'react';\r\nimport Input from './Input';\r\n\r\nconst rules = {\r\n  pattern: {\r\n    value: /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/,\r\n    message: \"invalid email\"\r\n  }\r\n};\r\n\r\n// Pass additional rules to be added to the rule set. \r\n// Note: If rule is passed in parent component it will overwrite local rules value.\r\nfunction addValidationToRules (additionalRules){\r\n  let rulesCopy = {...rules};\r\n  if(additionalRules){\r\n    Object.assign(rulesCopy, additionalRules);\r\n  }\r\n  return rulesCopy;\r\n}\r\n\r\nexport default ({ ...props }) => <Input onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }} rules={addValidationToRules(props?.addrules)} {...props}/>;\r\n","import React from 'react';\r\nimport InputDecorator from './InputDecorator';\r\nimport Input from './../components/Input';\r\n\r\n\r\nfunction Numeric({ placeholder, min, max, ...props }) {\r\n\r\n if(props.value && props?.value.length > max) {\r\n   props.value = props.value.substring(0, max)\r\n }\r\n  return (\r\n    <Input inputProps={{type: \"number\", max: max, min: min, placeholder: placeholder}} {...props}/>\r\n  );\r\n}\r\n\r\nexport default InputDecorator(Numeric);\r\n","import React from 'react';\r\nimport Input from './Input';\r\n\r\nfunction LargeTextEditor({ characterLimit = 10000, rows, description, control, ...props }) {\r\n  const [value, setValue] = React.useState(0);\r\n  const [overLimit, setOverLimit] = React.useState(false);\r\n  const handleChange = event => {\r\n    setValue(event.target.value.trim().length)\r\n  };\r\n\r\n  const handleInput = () => {\r\n    value > characterLimit ? setOverLimit(true) : setOverLimit(false)\r\n  };\r\n\r\n  return (\r\n    <Input\r\n      onInput={handleChange}\r\n      aria-label={description}\r\n      multiline\r\n      rows={rows || 12}\r\n      helperText={`${value.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")} characters/${characterLimit.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")} characters`}\r\n      defaultValue=\"\"\r\n      onKeyUp={handleInput}\r\n      error={overLimit}\r\n      inputProps={{ maxLength: characterLimit }}\r\n      {...props}\r\n    />\r\n  );\r\n}\r\n\r\nexport default LargeTextEditor;\r\n","import PortalView from \"./../../components/Global/PortalView\";\r\nimport Button from \"../../components/Button\";\r\nimport { FieldSection, FieldRow, FieldSlot } from \"../../components/Forms/FieldSection\";\r\nimport Input from \"../../components/Input\";\r\nimport Telephone from \"../../components/Telephone\";\r\nimport Dropdown from \"../../components/Dropdown\";\r\nimport Email from \"../../components/Email\";\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport Numeric from \"../../components/Numeric\";\r\nimport LargeTextEditor from \"../../components/LargeTextEditor\";\r\nimport apiClient from \"../../utils/API\";\r\nimport { open } from \"../../store/snack/actions\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { useState } from \"react\";\r\n\r\nfunction Feedback() {\r\n  const dispatch = useDispatch();\r\n  const methods = useForm({\r\n    mode: \"onBlur\",\r\n  });\r\n  const [loading, setLoading] = useState(false);\r\n  const { handleSubmit } = methods;\r\n  // const authState = useSelector((state) => state.auth);\r\n\r\n  const onSubmit = async (data) => {\r\n    const {\r\n      Email,\r\n      SenderName,\r\n      PhoneNumber,\r\n      ApplicationNumber,\r\n      FeedbackType,\r\n      Subject,\r\n      Feedback,\r\n    } = data;\r\n\r\n    const Body =\r\n      `Phone: ${PhoneNumber}\\n` +\r\n      `Application Number: ${ApplicationNumber}\\n` +\r\n      `Feedback Type: ${FeedbackType}\\n` +\r\n      `Feedback: ${Feedback}`;\r\n\r\n    try {\r\n      setLoading(true);\r\n      await apiClient.post(`/communication`, {\r\n        Email,\r\n        SenderName,\r\n        Subject,\r\n        Body,\r\n      });\r\n      dispatch(\r\n        open({\r\n          message: \"Feedback sent successfully.\",\r\n          severity: \"success\",\r\n        })\r\n      );\r\n      // show toast or UI action given it was successful\r\n    } catch (err) {\r\n      // show toast or UI action on fail\r\n      dispatch(\r\n        open({\r\n          message: err.message,\r\n          severity: \"success\",\r\n        })\r\n      );\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const onError = (e) => console.log(e);\r\n\r\n  return (\r\n    <FormProvider {...methods}>\r\n      <PortalView>\r\n        <div name=\"FeedbackPage\" className=\"feedback rhythm\">\r\n          {/* Page Intro */}\r\n          <div className=\"page-intro\">\r\n            <div className=\"wrapper\">\r\n              <div className=\"page-intro__layout\">\r\n                <div className=\"page-intro__icon\">\r\n                  <img src=\"/dashboard.svg\" alt=\"Student Portal\" />\r\n                </div>\r\n                <div className=\"page-intro__content rhythm\">\r\n                  <h1 className=\"heading heading--h1\">Feedback</h1>\r\n                  <ul className=\"list\">\r\n                      <li className=\"li\">When filling out the form, if you have created a user profile, use the same information that you entered in your user profile.</li>\r\n                      <li className=\"li\">If you are having{\" \"} <strong>problems with the OSAC Student Portal</strong>, check out the{\" \"} <a href=\"https://oregonstudentaid.gov/scholarships-faq.aspx\">FAQ</a> to see if your problem is answered there.</li>\r\n                      <li className=\"li\">Be sure to check your e-mail for OSAC's response to your question.</li>\r\n                    </ul>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n          <div className=\"form-wrapper\">\r\n            <div className=\"component rhythm\">\r\n              <h2 className=\"heading heading--h3\">Please fill out the following form</h2>\r\n              <FieldSection withDivider={false}>\r\n                <FieldRow>\r\n                  <FieldSlot>\r\n                    <Email name=\"Email\" inputLabel=\"Email\" isRequired={true} />\r\n                  </FieldSlot>\r\n                </FieldRow>\r\n                <FieldRow>\r\n                  <FieldSlot>\r\n                    <Input\r\n                      name=\"SenderName\"\r\n                      inputLabel=\"First Name and Last Name\"\r\n                    />\r\n                  </FieldSlot>\r\n                  <FieldSlot>\r\n                    <Telephone\r\n                      name=\"PhoneNumber\"\r\n                      inputLabel=\"Phone Number\"\r\n                      placeholder=\"Phone Number\"\r\n                    />\r\n                  </FieldSlot>\r\n                </FieldRow>\r\n                <FieldRow>\r\n                  <FieldSlot>\r\n                    <Numeric\r\n                      name=\"ApplicationNumber\"\r\n                      inputLabel=\"Application Number\"\r\n                      placeholder=\"Application Number\"\r\n                    />\r\n                  </FieldSlot>\r\n                  <FieldSlot>\r\n                    <Dropdown\r\n                      name=\"FeedbackType\"\r\n                      label=\"Feedback Type\"\r\n                      listItems={[{ value: \"Example\", label: \"Example\" }]}\r\n                    />\r\n                  </FieldSlot>\r\n                </FieldRow>\r\n                <FieldRow>\r\n                  <FieldSlot>\r\n                    <Input\r\n                      name=\"Subject\"\r\n                      inputLabel=\"Subject\"\r\n                      isRequired={true}\r\n                    />\r\n                  </FieldSlot>\r\n                </FieldRow>\r\n                <FieldRow>\r\n                  <FieldSlot>\r\n                    <LargeTextEditor\r\n                      name=\"Feedback\"\r\n                      inputLabel=\"Feedback or Comments\"\r\n                      placeholder=\"Start writing here...\"\r\n                      wordLimit=\"10000\"\r\n                    />\r\n                  </FieldSlot>\r\n                </FieldRow>\r\n              </FieldSection>\r\n\r\n              <Button  name=\"Submit\" label=\"Submit\" onClick={handleSubmit(onSubmit, onError)} loading={loading} />\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </PortalView>\r\n    </FormProvider>\r\n  );\r\n}\r\n\r\nexport default Feedback;\r\n","import PortalView from \"./../../components/Global/PortalView\";\r\n\r\nfunction Glossary() {\r\n  // const authState = useSelector((state) => state.auth);\r\n\r\n  return (\r\n    <PortalView>\r\n      <div name=\"GlossaryPage\" className=\"content\">\r\n        <div className=\"content-title\">Glossary</div>\r\n      </div>\r\n    </PortalView>\r\n  );\r\n}\r\n\r\nexport default Glossary;\r\n","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Button from './Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n  form: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    margin: 'auto',\r\n    width: 'fit-content',\r\n  },\r\n  formControl: {\r\n    marginTop: theme.spacing(2),\r\n    minWidth: 120,\r\n  },\r\n  formControlLabel: {\r\n    marginTop: theme.spacing(1),\r\n  },\r\n}));\r\n\r\nexport default function MaxWidthDialog({title, buttonLabel, children}) {\r\n  const classes = useStyles();\r\n  const [open, setOpen] = React.useState(false);\r\n\r\n  const handleClickOpen = () => {\r\n    setOpen(true);\r\n  };\r\n\r\n  const handleClose = () => {\r\n    setOpen(false);\r\n  };\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <Button label={buttonLabel} variant='text' onClick={handleClickOpen}/>\r\n      <Dialog\r\n        fullWidth\r\n        open={open}\r\n        onClose={handleClose}\r\n        aria-labelledby=\"max-width-dialog-title\"\r\n      >\r\n        <DialogTitle id=\"max-width-dialog-title\"><h4 className=\"heading heading--h3\">{title}</h4></DialogTitle>\r\n        <DialogContent>\r\n          {children}\r\n        </DialogContent>\r\n        <DialogActions>\r\n          <Button label='close' onClick={handleClose} style={{padding: '1rem'}}/>\r\n        </DialogActions>\r\n      </Dialog>\r\n    </React.Fragment>\r\n  );\r\n}\r\n","import { useSelector } from \"react-redux\";\r\nimport Skeleton from 'react-loading-skeleton';\r\n\r\nfunction ReadOnly({ description, name, value, ...props }) {\r\n  const formState = useSelector((state) => state.form);\r\n  const isLoading = formState.isLoading;\r\n  return (\r\n    isLoading ?\r\n      <Skeleton />\r\n      : (\r\n        <p aria-label={description || name} style={{ whiteSpace: 'pre-line' }} {...props}>\r\n          {value}\r\n        </p>\r\n      )\r\n  );\r\n}\r\n\r\nexport default ReadOnly;\r\n","import ReadOnly from \"./ReadOnly\"\r\n\r\nconst ReadOnlyField = ({ name, value, description = '' }) => {\r\n  return (\r\n    <div className=\"read-only\">\r\n      <div className=\"read-only__title\">{name}</div>\r\n      <div className=\"read-only__data\">\r\n        <ReadOnly name={name} value={value} description={description}/>\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default ReadOnlyField;","import ReadOnlyField from '../ReadOnlyField';\r\nimport { FIELDS, getField } from '../../store/form/fields';\r\nimport { useEffect } from 'react';\r\nimport { actions } from '../../store';\r\nimport { useSelector } from 'react-redux';\r\nimport ConvertCode from '../Utility/ConvertCode';\r\n\r\nexport default function AppSnapshotPromise ({ year }) {\r\n  const formState = useSelector((state) => state.form);\r\n  \r\n  const fieldKeys = [\r\n    FIELDS.FIRST_NAME,\r\n    FIELDS.LAST_NAME,\r\n    FIELDS.OTHER_NAMES,\r\n    FIELDS.BIRTHDATE,\r\n    FIELDS.GENDER__FEMALE,\r\n    FIELDS.GENDER__MALE,\r\n    FIELDS.GENDER__TRANSMAN,\r\n    FIELDS.GENDER__TRANSWOMAN,\r\n    FIELDS.GENDER__NON_BINARY,\r\n    FIELDS.GENDER__NA,\r\n    FIELDS.ALTERNATE_PHONE,\r\n    FIELDS.HOME_PHONE,\r\n    FIELDS.PERMANENT_ADDRESS,\r\n    FIELDS.MAILING_ADDRESS,\r\n    FIELDS.SSN,\r\n    FIELDS.HISPANIC,\r\n    FIELDS.ETHNICITY__AM_INDIAN,\r\n    FIELDS.ETHNICITY__ASIAN,\r\n    FIELDS.ETHNICITY__BLACK,\r\n    FIELDS.ETHNICITY__HAWAIIAN_PI,\r\n    FIELDS.ETHNICITY__WHITE,\r\n    FIELDS.ETHNICITY__NA,   \r\n    FIELDS.HIGHSCHOOL,\r\n    FIELDS.HIGHSCHOOL_TYPE,\r\n    FIELDS.HIGHSCHOOL_GRAD_DATE,\r\n    FIELDS.CORRECTIONAL_FACILITY_HS,\r\n    FIELDS.HIGHSCHOOL_GPA,\r\n    FIELDS.COMM_COLLEGE_START_TERM\r\n];\r\n\r\nuseEffect(() => {\r\n  actions.fetchBasicFields(fieldKeys, year);\r\n},[]);\r\n\r\nconst get = (fieldKey) => formState.fields[fieldKey]?.value;\r\n\r\nconst getNames = (fieldKey) => {\r\n    const stateObject = formState.fields[fieldKey];\r\n    let string = '';\r\n    for (const i in stateObject) {\r\n        string += stateObject[i].FirstName.value+' '+stateObject[i].LastName.value+'\\n'\r\n    }\r\n    return string;\r\n};\r\n\r\nconst getAddress = (fieldKey) => {\r\n    const street = formState.fields[fieldKey]?.Address.value;\r\n    const city = formState.fields[fieldKey]?.CityId.value;\r\n    const county = formState.fields[fieldKey]?.CountyId.value;\r\n    const zip = formState.fields[fieldKey]?.Zip.value;\r\n\r\n    return { street, city, county, zip};\r\n};\r\n\r\nconst getSchoolCode = (fieldKey) => {\r\n  return formState.fields[fieldKey]?.SchoolCode?.value;\r\n};\r\n\r\n  return (\r\n    <>\r\n      <ReadOnlyField \r\n        name=\"name\" \r\n        value={get(FIELDS.FIRST_NAME)+' '+get(FIELDS.LAST_NAME)}\r\n      />\r\n      <ReadOnlyField \r\n        name={getField(FIELDS.OTHER_NAMES).question}\r\n        value={getNames(FIELDS.OTHER_NAMES)}\r\n      />\r\n      <ReadOnlyField \r\n        name=\"Birthday\" \r\n        value={get(FIELDS.BIRTHDATE)}\r\n      />\r\n      <ReadOnlyField \r\n        name=\"Gender identity\"\r\n        value={\r\n          ( get(FIELDS.GENDER__MALE) === true ? 'Male\\n' : '') + \r\n          ( get(FIELDS.GENDER__FEMALE) === true ? 'Female\\n' : '') + \r\n          ( get(FIELDS.GENDER__TRANSMAN) === true ? 'Trans Male/Trans Man\\n' : '') + \r\n          ( get(FIELDS.GENDER__TRANSWOMAN) === true ? 'Trans Female/Trans Woman\\n' : '') + \r\n          ( get(FIELDS.GENDER__NON_BINARY) === true ? 'Non-binary/Genderqueer/Gender non-conforming\\n' : '') + \r\n          ( get(FIELDS.GENDER__NA) === true ? 'Different Identity' : '')\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name=\"Phone number\" \r\n        value={\r\n          ( get(FIELDS.ALTERNATE_PHONE) ? get(FIELDS.ALTERNATE_PHONE)+' (Mobile)\\n' : '') + \r\n          ( get(FIELDS.HOME_PHONE) ? get(FIELDS.HOME_PHONE)+' (Home)\\n' : '')\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name=\"permanent address\"\r\n        value={\r\n          <ConvertCode \r\n            isAddress={true} \r\n            address={getAddress(FIELDS.PERMANENT_ADDRESS)}\r\n          />\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name=\"mailing address\"\r\n        value={\r\n          <ConvertCode \r\n            isAddress={true} \r\n            address={getAddress(FIELDS.MAILING_ADDRESS)}\r\n          />\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name=\"social security number\"\r\n        value={get(FIELDS.SSN) ? '*********' : ''} \r\n      />\r\n      <ReadOnlyField \r\n        name=\"are you hispanic or latino/a/x\"\r\n        value={\r\n          get(FIELDS.HISPANIC) === \"HISPAN\" ? 'Yes' : \r\n          get(FIELDS.HISPANIC) === \"NONHISPAN\" ? 'No' : \r\n          'Choose not to say'\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name=\"racial group or ethnicity\"\r\n        value={\r\n          ( get(FIELDS.ETHNICITY__AM_INDIAN) === true ? 'American Indian or Alaska Native\\n' : '' ) +\r\n          ( get(FIELDS.ETHNICITY__ASIAN) === true ? 'Asian\\n' : '' ) +\r\n          ( get(FIELDS.ETHNICITY__BLACK) === true ? 'Black or African-American\\n' : '' ) +\r\n          ( get(FIELDS.ETHNICITY__HAWAIIAN_PI) === true ? 'Native Hawaiian or Pacific Islander\\n' : '' ) +\r\n          ( get(FIELDS.ETHNICITY__WHITE) === true ? 'White\\n' : '' ) +\r\n          ( get(FIELDS.ETHNICITY__NA) === true ? 'Choose not to say\\n' : '' )\r\n      }\r\n      />\r\n      <ReadOnlyField \r\n        name=\"type of high school or equivalent\"\r\n        value={<ConvertCode codeType=\"HSTYPE\" code={get(FIELDS.HIGHSCHOOL_TYPE)}/>}\r\n      />\r\n      <ReadOnlyField \r\n        name=\"high school\"\r\n        value={<ConvertCode isHS={true} code={getSchoolCode(FIELDS.HIGHSCHOOL)}/>}\r\n      />\r\n      <ReadOnlyField \r\n        name=\"date of high school completion or graduation\"\r\n        value={get(FIELDS.HIGHSCHOOL_GRAD_DATE)}\r\n      />\r\n      <ReadOnlyField \r\n        name=\"community college start term\"\r\n        value={get(FIELDS.COMM_COLLEGE_START_TERM )}\r\n      />\r\n      <ReadOnlyField \r\n        name=\"Did you (or will you) obtain your high school diploma or GED® test transcript while in a correctional facility in Oregon?\"\r\n        value={\r\n          ( get(FIELDS.CORRECTIONAL_FACILITY_HS) === true || get(FIELDS.CORRECTIONAL_FACILITY_HS) === \"True\" ) ? 'Yes' :\r\n          ( get(FIELDS.CORRECTIONAL_FACILITY_HS) === false || get(FIELDS.CORRECTIONAL_FACILITY_HS) === \"False\" ) ? 'No' : ''\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name=\"high school gpa\"\r\n        value={get(FIELDS.HIGHSCHOOL_GPA)}\r\n      />\r\n      \r\n    </>\r\n  );\r\n};","import React from 'react';\r\nimport InputDecorator from './InputDecorator';\r\nimport { Checkbox } from \"@material-ui/core\";\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { useEffect } from 'react';\r\n\r\nconst checkBoxStyles = theme => ({\r\n  root: {\r\n    '&$checked': {\r\n      color: 'rgba(44, 114, 116, 1)',\r\n    },\r\n  },\r\n  checked: {},\r\n  }\r\n)\r\n\r\nexport const CustomCheckbox = withStyles(checkBoxStyles)(Checkbox);\r\n\r\nfunction Checkboxes({name, description, label, disabled = false, isRequired = false, isSoftRequired = false, ...props }) {\r\n\r\n  const [booleanValue, setBooleanValue] = React.useState(false);\r\n  useEffect(() => {\r\n    let val = props.value;\r\n\r\n    if (val === 'False' || val === null) {\r\n      val = false\r\n    }\r\n    if (val === 'True') {\r\n      val = true\r\n    }\r\n    setBooleanValue(val);\r\n  }, [props.value])\r\n\r\n  return (\r\n    <div className=\"checkbox-wrapper\">\r\n      { // required: show red * and prevent user from saving if null\r\n        !label && isRequired && ( <span className=\"required\"> *</span> ) \r\n      }\r\n      { // isSoftRequired: show red * but do not prevent user from saving if null\r\n        !label && !isRequired && isSoftRequired? ( <span className=\"required\"> *</span> ) : null\r\n      }\r\n      <CustomCheckbox\r\n        onChange={(e) => props.onChange(e.target.checked)}\r\n        checked={booleanValue}\r\n        onBlur={props.onBlur}\r\n        inputRef={props.ref}\r\n        disabled={disabled}\r\n        label={label}\r\n      />\r\n      { label && \r\n        <span className=\"checkbox-wrapper__label\">\r\n          {label}\r\n          { isRequired && ( <span className=\"required\"> *</span> ) }\r\n          { !isRequired && isSoftRequired? ( <span className=\"required\"> *</span> ) : null }\r\n        </span>\r\n      }\r\n      \r\n    </div>\r\n  );\r\n}\r\n\r\nexport default InputDecorator(Checkboxes);\r\n\r\n\r\n","import ReadOnlyField from '../ReadOnlyField';\r\nimport { FIELDS, getField } from '../../store/form/fields';\r\nimport { useSelector } from 'react-redux';\r\nimport { useEffect } from 'react';\r\nimport { actions } from '../../store';\r\nimport Checkbox from '../Checkbox';\r\nimport ConvertCode from '../Utility/ConvertCode';\r\n\r\nexport default function AppSnapshotGuard ({ year }) {\r\n\r\n  const formState = useSelector((state) => state.form);\r\n  \r\n  const fieldKeys = [\r\n    FIELDS.FIRST_NAME,\r\n    FIELDS.LAST_NAME,\r\n    FIELDS.OTHER_NAMES,\r\n    FIELDS.MIDDLE_INITIALS,\r\n    FIELDS.BIRTHDATE,\r\n    FIELDS.PRIMARY_CONTACT,\r\n    FIELDS.ALTERNATE_PHONE,\r\n    FIELDS.HOME_PHONE,\r\n    FIELDS.PERMANENT_ADDRESS,\r\n    FIELDS.MAILING_ADDRESS,\r\n    FIELDS.SSN,\r\n    FIELDS.PRIVACY_AGREEMENT,\r\n    FIELDS.CORRECTIONAL_FACILITY_CC,\r\n    FIELDS.FINISHED_BACHELORS_DEGREE,\r\n    FIELDS.NATIONAL_GUARD__UNIT,\r\n    FIELDS.NATIONAL_GUARD__CREDITS_PRESUMMER,\r\n    FIELDS.NATIONAL_GUARD__CREDITS_FALL,\r\n    FIELDS.NATIONAL_GUARD__CREDITS_WINTER,\r\n    FIELDS.NATIONAL_GUARD__CREDITS_SPRING,\r\n    FIELDS.NATIONAL_GUARD__CREDITS_POSTSUMMER,\r\n    FIELDS.COLLEGE_DUAL_ENROLLED\r\n  ];\r\n\r\n  useEffect(() => {\r\n    actions.fetchBasicFields(fieldKeys, year);\r\n  },[]);\r\n\r\n  const get = (fieldKey) => formState.fields[fieldKey]?.value;\r\n\r\n  const getAddress = (fieldKey) => {\r\n    const street = formState.fields[fieldKey]?.Address.value;\r\n    const city = formState.fields[fieldKey]?.CityId.value;\r\n    const county = formState.fields[fieldKey]?.CountyId.value;\r\n    const zip = formState.fields[fieldKey]?.Zip.value;\r\n\r\n    return { street, city, county, zip};\r\n  };\r\n\r\n  const getNames = (fieldKey) => {\r\n    const stateObject = formState.fields[fieldKey];\r\n    let string = '';\r\n    for (const i in stateObject) {\r\n        string += stateObject[i].FirstName.value+' '+stateObject[i].LastName.value+'\\n'\r\n    }\r\n    return string;\r\n  };\r\n\r\n  return (\r\n    <>\r\n      <ReadOnlyField \r\n        name=\"name\" \r\n        value={get(FIELDS.FIRST_NAME)+' '+get(FIELDS.LAST_NAME)}\r\n      />\r\n      <ReadOnlyField \r\n        name={getField(FIELDS.OTHER_NAMES).question}\r\n        value={getNames(FIELDS.OTHER_NAMES)}\r\n      />\r\n      <ReadOnlyField \r\n        name=\"Birthday\" \r\n        value={get(FIELDS.BIRTHDATE)}\r\n      />\r\n      <ReadOnlyField \r\n        name=\"Phone number\" \r\n        value={\r\n          ( get(FIELDS.ALTERNATE_PHONE) ? get(FIELDS.ALTERNATE_PHONE)+' (Mobile)\\n' : '') + \r\n          ( get(FIELDS.HOME_PHONE) ? get(FIELDS.HOME_PHONE)+' (Home)\\n' : '')\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name=\"permanent address\"\r\n        value={\r\n          <ConvertCode \r\n            isAddress={true} \r\n            address={getAddress(FIELDS.PERMANENT_ADDRESS)}\r\n          />\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name=\"mailing address\"\r\n        value={\r\n          <ConvertCode \r\n            isAddress={true} \r\n            address={getAddress(FIELDS.MAILING_ADDRESS)}\r\n          />\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name=\"social security number\"\r\n        value={get(FIELDS.SSN) ? '*********' : ''} \r\n      />\r\n\r\n      <ReadOnlyField \r\n        name={`will you have earned your bachelor's degree by fall ${year}`}\r\n        value={\r\n          ( get(FIELDS.FINISHED_BACHELORS_DEGREE) === \"True\" || get(FIELDS.FINISHED_BACHELORS_DEGREE) === true ) ? 'Yes' : \r\n          ( get(FIELDS.FINISHED_BACHELORS_DEGREE) === \"False\" || get(FIELDS.FINISHED_BACHELORS_DEGREE) === false ) ? 'No' : ''\r\n        }\r\n      />  \r\n      <ReadOnlyField\r\n        name=\"Assigned unit\"\r\n        value={get(FIELDS.NATIONAL_GUARD__UNIT)}\r\n      />\r\n      <ReadOnlyField\r\n        name={`Anticipated credits summer ${year}`}\r\n        value={\r\n          get(FIELDS.NATIONAL_GUARD__CREDITS_PRESUMMER) === null ? 'Not Attending' :\r\n          get(FIELDS.NATIONAL_GUARD__CREDITS_PRESUMMER)\r\n        }\r\n      />\r\n      <ReadOnlyField\r\n        name={`Anticipated credits fall ${year}`}\r\n        value={\r\n          get(FIELDS.NATIONAL_GUARD__CREDITS_FALL) === null ? 'Not Attending' :\r\n          get(FIELDS.NATIONAL_GUARD__CREDITS_FALL)\r\n        }\r\n      />\r\n      <ReadOnlyField\r\n        name={`Anticipated credits winter ${year + 1}`}\r\n        value={\r\n          get(FIELDS.NATIONAL_GUARD__CREDITS_WINTER) === null ? 'Not Attending' :\r\n          get(FIELDS.NATIONAL_GUARD__CREDITS_WINTER)\r\n        }\r\n      />\r\n      <ReadOnlyField\r\n        name={`Anticipated credits spring ${year + 1}`}\r\n        value={\r\n          get(FIELDS.NATIONAL_GUARD__CREDITS_SPRING) === null ? 'Not Attending' :\r\n          get(FIELDS.NATIONAL_GUARD__CREDITS_SPRING)\r\n        }\r\n      />\r\n      <ReadOnlyField\r\n        name={`Anticipated credits summer ${year + 1}`}\r\n        value={\r\n          get(FIELDS.NATIONAL_GUARD__CREDITS_POSTSUMMER) === null ? 'Not Attending' :\r\n          get(FIELDS.NATIONAL_GUARD__CREDITS_POSTSUMMER)\r\n        }\r\n      />\r\n      <div style={{margin: '2rem 1rem'}}>\r\n        <Checkbox \r\n          useController={false} \r\n          name={FIELDS.COLLEGE_DUAL_ENROLLED}\r\n          value={get(FIELDS.COLLEGE_DUAL_ENROLLED)}\r\n          disabled\r\n          label=\"I will be dual enrolled with another school while attending this school.\"\r\n        />\r\n      </div>\r\n      <div style={{margin: '2rem auto'}} className='divider'/>\r\n      <div style={{margin: '2rem 0 0 1rem', textTransform: 'uppercase', fontSize: '14px', color: '#333333', letterSpacing: '1px'}}>\r\n        <b>Privacy Agreement</b>\r\n      </div>\r\n      <ul className=\"list\">\r\n        <li className=\"li\">\r\n          I authorize OSAC to share my application with scholarship processing and review staff, \r\n          donors, high school partners, and selection committees for the purpose of determining \r\n          eligibility and selecting awardees. \r\n        </li>\r\n        <li className=\"li\">\r\n          I understand that by providing contact information, I am giving my \r\n          permission to receive application status updates or general reminders.\r\n        </li>\r\n      </ul>\r\n      <div style={{marginLeft: '1rem'}}>\r\n        <Checkbox \r\n          useController={false} \r\n          name={FIELDS.PRIVACY_AGREEMENT}\r\n          value={get(FIELDS.PRIVACY_AGREEMENT)}\r\n          disabled\r\n          label=\"I certify that I have read, understood, and agree to the above certification statements\"\r\n        />\r\n      </div>\r\n      <div style={{margin: '2rem auto'}} className='divider'/>\r\n    </>\r\n  );\r\n};","import ReadOnlyField from '../ReadOnlyField';\r\nimport { FIELDS, getField } from '../../store/form/fields';\r\nimport { useSelector } from 'react-redux';\r\nimport { useEffect } from 'react';\r\nimport { actions } from '../../store';\r\nimport Checkbox from '../Checkbox';\r\nimport ConvertCode from '../Utility/ConvertCode';\r\n\r\nexport default function AppSnapshotChafee ({ year }) {\r\n\r\n  const formState = useSelector((state) => state.form);\r\n  \r\n  const fieldKeys = [\r\n    FIELDS.FIRST_NAME,\r\n    FIELDS.LAST_NAME,\r\n    FIELDS.OTHER_NAMES,\r\n    FIELDS.BIRTHDATE,\r\n    FIELDS.PRIMARY_CONTACT,\r\n    FIELDS.ALTERNATE_PHONE,\r\n    FIELDS.HOME_PHONE,\r\n    FIELDS.PERMANENT_ADDRESS,\r\n    FIELDS.MAILING_ADDRESS,\r\n    FIELDS.SSN,\r\n    FIELDS.HISPANIC,  \r\n    FIELDS.HIGHSCHOOL,\r\n    FIELDS.HIGHSCHOOL_GPA,\r\n    FIELDS.PRIMARY_CONTACT,\r\n    FIELDS.PRIVACY_AGREEMENT,\r\n    FIELDS.CITIZENSHIP_STATUS,\r\n    FIELDS.MARITAL_STATUS,\r\n    FIELDS.COLLEGE_CHOICE,\r\n    FIELDS.COLLEGE_STANDING,\r\n    FIELDS.OREGON_RESIDENT,\r\n    FIELDS.CHAFEE__PRESUMMER_1,\r\n    FIELDS.CHAFEE__FALL_1,\r\n    FIELDS.CHAFEE__WINTER_1,\r\n    FIELDS.CHAFEE__SPRING_1,\r\n    FIELDS.CHAFEE__POSTSUMMER_1,\r\n    FIELDS.CHAFEE__PRESUMMER_2,\r\n    FIELDS.CHAFEE__FALL_2,\r\n    FIELDS.CHAFEE__WINTER_2,\r\n    FIELDS.CHAFEE__SPRING_2,\r\n    FIELDS.CHAFEE__POSTSUMMER_2,\r\n    FIELDS.CHAFEE__FOSTER_CARE,\r\n    FIELDS.CHAFEE__FOSTER_DHS,\r\n    FIELDS.CHAFEE__FOSTER_OTHER_STATE,\r\n    FIELDS.CHAFEE__FOSTER_TRIBAL,\r\n    FIELDS.CHAFEE__ADOPTED,\r\n    FIELDS.COLLEGE_DUAL_ENROLLED\r\n];\r\n\r\nuseEffect(() => {\r\n  actions.fetchBasicFields(fieldKeys, year);\r\n},[]);\r\n\r\nconst get = (fieldKey) => formState.fields[fieldKey]?.value;\r\n\r\nconst getAddress = (fieldKey) => {\r\n  const street = formState.fields[fieldKey]?.Address.value;\r\n  const city = formState.fields[fieldKey]?.CityId.value;\r\n  const county = formState.fields[fieldKey]?.CountyId.value;\r\n  const zip = formState.fields[fieldKey]?.Zip.value;\r\n\r\n  return { street, city, county, zip};\r\n};\r\n\r\nconst getNames = (fieldKey) => {\r\n  const stateObject = formState.fields[fieldKey];\r\n  let string = '';\r\n  for (const i in stateObject) {\r\n      string += stateObject[i].FirstName.value+' '+stateObject[i].LastName.value+'\\n'\r\n  }\r\n  return string;\r\n};\r\n\r\nconst getSchoolCode = (fieldKey) => {\r\n  return formState.fields[fieldKey]?.SchoolCode.value;\r\n}\r\n\r\n  return (\r\n    <>\r\n      <ReadOnlyField \r\n        name=\"name\" \r\n        value={get(FIELDS.FIRST_NAME)+' '+get(FIELDS.LAST_NAME)}\r\n      />\r\n      <ReadOnlyField \r\n        name={getField(FIELDS.OTHER_NAMES).question}\r\n        value={getNames(FIELDS.OTHER_NAMES)}\r\n      />\r\n      <ReadOnlyField \r\n        name=\"Birthday\" \r\n        value={get(FIELDS.BIRTHDATE)}\r\n      />\r\n      <ReadOnlyField \r\n        name=\"Phone number\" \r\n        value={\r\n          ( get(FIELDS.ALTERNATE_PHONE) ? get(FIELDS.ALTERNATE_PHONE)+' (Mobile)\\n' : '') + \r\n          ( get(FIELDS.HOME_PHONE) ? get(FIELDS.HOME_PHONE)+' (Home)\\n' : '')\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name=\"permanent address\"\r\n        value={\r\n          <ConvertCode \r\n            isAddress={true} \r\n            address={getAddress(FIELDS.PERMANENT_ADDRESS)}\r\n          />\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name=\"mailing address\"\r\n        value={\r\n          <ConvertCode \r\n            isAddress={true} \r\n            address={getAddress(FIELDS.MAILING_ADDRESS)}\r\n          />\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name=\"primary contact\"\r\n        value={<ConvertCode isContact={true} contact={formState.fields[FIELDS.PRIMARY_CONTACT]}/>}\r\n      />\r\n      <ReadOnlyField \r\n        name=\"social security number\"\r\n        value={get(FIELDS.SSN) ? '*********' : ''} \r\n      />\r\n      <ReadOnlyField \r\n        name=\"citizenship status\"\r\n        value={<ConvertCode codeType=\"CITIZEN\" code={get(FIELDS.CITIZENSHIP_STATUS)}/>}\r\n      />\r\n      <ReadOnlyField \r\n        name=\"marital status\"\r\n        value={<ConvertCode codeType=\"STUMS\" code={get(FIELDS.MARITAL_STATUS)}/>}\r\n      />\r\n       \r\n       <ReadOnlyField \r\n        name=\"oregon resident for 12 months preceding enrollment?\"\r\n        value={ \r\n          ( get(FIELDS.OREGON_RESIDENT) === \"True\" || get(FIELDS.OREGON_RESIDENT) === true ) ? 'Yes' : \r\n          ( get(FIELDS.OREGON_RESIDENT) === \"False\" || get(FIELDS.OREGON_RESIDENT) === false ) ? 'No' : ''\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name=\"high school\"\r\n        value={<ConvertCode isHS={true} code={getSchoolCode(FIELDS.HIGHSCHOOL)}/>}\r\n      />\r\n      <ReadOnlyField \r\n        name=\"high school gpa\"\r\n        value={get(FIELDS.HIGHSCHOOL_GPA)}\r\n      />\r\n      <ReadOnlyField \r\n        name=\"college or university name\"\r\n        value={<ConvertCode isCollege={true} code={getSchoolCode(FIELDS.COLLEGE_CHOICE)}/>}\r\n      />\r\n      <ReadOnlyField \r\n        name={`college standing as of fall ${year}`}\r\n        value={<ConvertCode codeType=\"YRINCLG\" code={get(FIELDS.COLLEGE_STANDING)}/>}\r\n      />\r\n      <ReadOnlyField \r\n        name=\"Are you currently in child welfare foster care?\"\r\n        value={\r\n          ( get(FIELDS.CHAFEE__FOSTER_CARE) === 'True' || get(FIELDS.CHAFEE__FOSTER_CARE) === true ) ? 'Yes' :\r\n          ( get(FIELDS.CHAFEE__FOSTER_CARE) === 'False' || get(FIELDS.CHAFEE__FOSTER_CARE) === false ) ? 'No' : ''\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name=\"Which entities provided care?\"\r\n        value={\r\n          (( get(FIELDS.CHAFEE__FOSTER_DHS) === 'True' || get(FIELDS.CHAFEE__FOSTER_DHS) === true ) ? 'Oregon Department of Human Services Child Welfare (DHS, formerly referred to as SCF)\\n' : '') +\r\n          (( get(FIELDS.CHAFEE__FOSTER_TRIBAL) === 'True' || get(FIELDS.CHAFEE__FOSTER_TRIBAL) === true ) ? 'Tribal Foster Care\\n' : '') +\r\n          (( get(FIELDS.CHAFEE__FOSTER_OTHER_STATE) === 'True' || get(FIELDS.CHAFEE__FOSTER_OTHER_STATE) === true ) ? 'Child Welfare system in another state (not Oregon)' : '')\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name={`attending Summer ${year-1}?`}\r\n        value={\r\n          ( get(FIELDS.CHAFEE__PRESUMMER_1) === 'True' || get(FIELDS.CHAFEE__PRESUMMER_1) === true ) ? 'Yes' :\r\n          ( get(FIELDS.CHAFEE__PRESUMMER_1) === 'False' || get(FIELDS.CHAFEE__PRESUMMER_1) === false ) ? 'No' : ''\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name=\"Oregon Child Welfare Adoption or Guardianship Finalized on or after your 13th birthday?\"\r\n        value={\r\n          ( get(FIELDS.CHAFEE__ADOPTED) === 'True' || get(FIELDS.CHAFEE__ADOPTED) === true ) ? 'Yes' :\r\n          ( get(FIELDS.CHAFEE__ADOPTED) === 'False' || get(FIELDS.CHAFEE__ADOPTED) === false ) ? 'No' : ''\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name={`attending Fall ${year-1}?`}\r\n        value={\r\n          ( get(FIELDS.CHAFEE__FALL_1) === 'True' || get(FIELDS.CHAFEE__FALL_1) === true ) ? 'Yes' :\r\n          ( get(FIELDS.CHAFEE__FALL_1) === 'False' || get(FIELDS.CHAFEE__FALL_1) === false ) ? 'No' : ''\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name={`attending winter ${year}?`}\r\n        value={\r\n          ( get(FIELDS.CHAFEE__WINTER_1) === 'True' || get(FIELDS.CHAFEE__WINTER_1) === true ) ? 'Yes' :\r\n          ( get(FIELDS.CHAFEE__WINTER_1) === 'False' || get(FIELDS.CHAFEE__WINTER_1) === false ) ? 'No' : ''\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name={`attending spring ${year}?`}\r\n        value={\r\n          ( get(FIELDS.CHAFEE__SPRING_1) === 'True' || get(FIELDS.CHAFEE__SPRING_1) === true ) ? 'Yes' :\r\n          ( get(FIELDS.CHAFEE__SPRING_1) === 'False' || get(FIELDS.CHAFEE__SPRING_1) === false ) ? 'No' : ''\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name={`attending summer ${year}?`}\r\n        value={\r\n          ( get(FIELDS.CHAFEE__POSTSUMMER_1) === 'True' || get(FIELDS.CHAFEE__POSTSUMMER_1) === true ) ? 'Yes' :\r\n          ( get(FIELDS.CHAFEE__POSTSUMMER_1) === 'False' || get(FIELDS.CHAFEE__POSTSUMMER_1) === false ) ? 'No' : ''\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name={`attending fall ${year}?`}\r\n        value={\r\n          ( get(FIELDS.CHAFEE__FALL_2) === 'True' || get(FIELDS.CHAFEE__FALL_2) === true ) ? 'Yes' :\r\n          ( get(FIELDS.CHAFEE__FALL_2) === 'False' || get(FIELDS.CHAFEE__FALL_2) === false ) ? 'No' : ''\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name={`attending winter ${year+1}?`}\r\n        value={\r\n          ( get(FIELDS.CHAFEE__WINTER_2) === 'True' || get(FIELDS.CHAFEE__WINTER_2) === true ) ? 'Yes' :\r\n          ( get(FIELDS.CHAFEE__WINTER_2) === 'False' || get(FIELDS.CHAFEE__WINTER_2) === false ) ? 'No' : ''\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name={`attending spring ${year+1}?`}\r\n        value={\r\n          ( get(FIELDS.CHAFEE__SPRING_2) === 'True' || get(FIELDS.CHAFEE__SPRING_2) === true ) ? 'Yes' :\r\n          ( get(FIELDS.CHAFEE__SPRING_2) === 'False' || get(FIELDS.CHAFEE__SPRING_2) === false ) ? 'No' : ''\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name={`attending summer ${year+1}?`}\r\n        value={\r\n          ( get(FIELDS.CHAFEE__POSTSUMMER_2) === 'True' || get(FIELDS.CHAFEE__POSTSUMMER_2) === true ) ? 'Yes' :\r\n          ( get(FIELDS.CHAFEE__POSTSUMMER_2) === 'False' || get(FIELDS.CHAFEE__POSTSUMMER_2) === false ) ? 'No' : ''\r\n        }\r\n      />\r\n      <div style={{margin: '2rem 1rem'}}>\r\n        <Checkbox \r\n          useController={false} \r\n          name={FIELDS.COLLEGE_DUAL_ENROLLED}\r\n          disabled\r\n          label=\"I will be dual enrolled with another school while attending this school.\"\r\n        />\r\n      </div>\r\n      <div style={{margin: '2rem auto'}} className='divider'/>\r\n      <div style={{margin: '2rem 0 0 1rem', textTransform: 'uppercase', fontSize: '14px', color: '#333333', letterSpacing: '1px'}}>\r\n        <b>Privacy Agreement</b>\r\n      </div>\r\n      <ul className=\"list\">\r\n        <li className=\"li\">\r\n          I authorize OSAC to share my application with scholarship processing and review staff, \r\n          donors, high school partners, and selection committees for the purpose of determining \r\n          eligibility and selecting awardees. \r\n        </li>\r\n        <li className=\"li\">\r\n          I understand that by providing contact information, I am giving my \r\n          permission to receive application status updates or general reminders.\r\n        </li>\r\n      </ul>\r\n      <div style={{marginLeft: '1rem'}}>\r\n        <Checkbox \r\n          useController={false} \r\n          name='PrivacyAgreement' \r\n          value={get(FIELDS.PRIVACY_AGREEMENT)}\r\n          disabled\r\n          label=\"I certify that I have read, understood, and agree to the above certification statements\"\r\n        />\r\n      </div>\r\n      <div style={{margin: '2rem auto'}} className='divider'/>\r\n    </>\r\n  );\r\n};","/* eslint-disable no-undef */\r\nimport { useEffect, useState } from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Accordion from '@material-ui/core/Accordion';\r\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\r\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport RemoveIcon from '@material-ui/icons/Remove';\r\nimport { getDegree, getOption } from './Utility/ConvertCode';\r\nimport { UNLISTED_COLLEGECODE} from '../store/form/fields';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n  root: {\r\n    width: '100%',\r\n  },\r\n  heading: {\r\n    fontFamily: 'Open Sans',\r\n    fontStyle: 'normal',\r\n    fontWeight: 'bold',\r\n    fontSize: '14px',\r\n    lineHeight: '24px',\r\n    color: '#333333',\r\n    textTransform: 'uppercase',\r\n    opacity: '75%',\r\n  },\r\n  details: {\r\n    opacity: '1',\r\n    textTransform: 'none',\r\n    fontWeight: 'normal',\r\n    fontSize: '14px',\r\n  },\r\n  section: {\r\n    padding: '.5rem 0',\r\n  },\r\n\r\n}));\r\n\r\nfunction CollegeDisplay({details, ...props}) {\r\n  const classes = useStyles();\r\n  const [expanded, setExpanded] = useState(false);\r\n\r\n  return (\r\n    <div className={classes.root} style={{width: '100%'}}>\r\n      <div style={{ paddingBottom: '2rem' }}>\r\n        <Accordion square onChange={() => setExpanded(!expanded)}  style={{ borderRadius: expanded ? '4px 4px 0 0' : '4px'}}>\r\n          <AccordionSummary\r\n            expandIcon={expanded ? <RemoveIcon style={{color: 'white'}}/> : <AddIcon style={{color: 'white'}}/>}\r\n            aria-controls=\"panel1a-content\"\r\n            id=\"panel1a-header\"\r\n            style={{background: 'rgba(44, 114, 116, 1)',  borderRadius: expanded ? '4px 4px 0 0' : '4px'}}\r\n          >\r\n            <div\r\n              style={{}}>\r\n              {details.college} <span className={classes.details} > — {`${details.dates.start} - ${details.dates.end ? details.dates.end : 'Present'}`}</span>\r\n            </div>\r\n          </AccordionSummary>\r\n          <AccordionDetails style={{alignText: 'left'}}>\r\n            <div className={classes.section}>\r\n              <div className={classes.heading} >College/University Name</div>\r\n              <div className={classes.details} >{details.college}</div>\r\n            </div>\r\n            <div className={classes.section}>\r\n              <div className={classes.heading} >Dates Attended</div>\r\n              <div className={classes.details} >{`${details.dates.start} - ${details.dates.end}`}</div>\r\n            </div>\r\n            <div className={classes.section}>\r\n              <div className={classes.heading} >Degree Earned</div>\r\n              <div className={classes.details} >{details.degree}</div>\r\n            </div>\r\n            <div className={classes.section}>\r\n              <div className={classes.heading} >Credits Earned</div>\r\n              <div className={classes.details} >{details.credits}</div>\r\n            </div>\r\n          </AccordionDetails>\r\n        </Accordion>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n\r\n/**\r\n * find reasonable display name given current college field state\r\n * @param {*} field \r\n * @returns \r\n */\r\nasync function getCollegeName(field){\r\n    if (!field.SchoolCode?.value)\r\n        return;\r\n\r\n    if (field.SchoolCode?.value === UNLISTED_COLLEGECODE)\r\n        return field.UnlistedName?.value;\r\n\r\n    const name = await getOption(\"collegehistories\", field.Year?.value, field.SchoolCode?.value);\r\n    if (name)\r\n        return name;\r\n\r\n    if (field.UnlistedName?.value)\r\n        return field.UnlistedName?.value;\r\n\r\n    return '';\r\n}\r\n\r\n// eslint-disable-next-line import/no-anonymous-default-export\r\nexport default ({ colleges })=>{\r\n  const [listColleges, setListColleges] = useState([]);\r\n  useEffect(()=>{\r\n    (async ()=>{\r\n      const _listColleges = [];\r\n      for (const i in colleges) {\r\n        var dto = colleges[i];\r\n        var endDate = `${dto.StopTerm?.value ?? ''} ${dto.StopYear?.value ?? ''}`.trim();\r\n        if (endDate === '')\r\n            endDate = 'Present';\r\n        const college = {\r\n          degree: dto.DegreeEarned?.value ? await getDegree(dto.DegreeEarned?.value) : '',\r\n          college: await getCollegeName(dto),          \r\n          dates: {\r\n            start: `${dto.StartTerm?.value} ${dto.StartYear?.value}`, \r\n            end: endDate\r\n          },\r\n          credits: dto?.CreditsEarned?.value ? dto?.CreditsEarned?.value : ''\r\n        }\r\n        _listColleges.push(college);\r\n      }\r\n      setListColleges(_listColleges)\r\n    })();\r\n  },[colleges]);\r\n\r\n  return (\r\n    listColleges\r\n    .slice(0, colleges?.length)\r\n    .map((item, i) =>\r\n      <CollegeDisplay details={item} key={i}/>\r\n    )\r\n  )\r\n}\r\n","import ReadOnlyField from '../ReadOnlyField';\r\nimport { FIELDS, getField } from '../../store/form/fields';\r\nimport { useSelector } from 'react-redux';\r\nimport { useEffect } from 'react';\r\nimport { actions } from '../../store';\r\nimport Checkbox from '../Checkbox';\r\nimport ConvertCode, { DegreePlans } from '../Utility/ConvertCode';\r\nimport CollegeDisplay from '../CollegeDisplay';\r\n\r\nexport default function AppSnapshotChild ({ year }) {\r\n\r\n  const formState = useSelector((state) => state.form);\r\n  \r\n  const fieldKeys = [\r\n    FIELDS.FIRST_NAME,\r\n    FIELDS.LAST_NAME,\r\n    FIELDS.BIRTHDATE,\r\n    FIELDS.OTHER_NAMES,\r\n    FIELDS.GENDER__FEMALE,\r\n    FIELDS.GENDER__MALE,\r\n    FIELDS.GENDER__TRANSMAN,\r\n    FIELDS.GENDER__TRANSWOMAN,\r\n    FIELDS.GENDER__NON_BINARY,\r\n    FIELDS.GENDER__NA,\r\n    FIELDS.PRONOUNS__MALE,\r\n    FIELDS.PRONOUNS__FEMALE,\r\n    FIELDS.PRONOUNS__NEUTRAL,\r\n    FIELDS.PRONOUNS__OTHER,\r\n    FIELDS.ALTERNATE_PHONE,\r\n    FIELDS.HOME_PHONE,\r\n    FIELDS.PERMANENT_ADDRESS,\r\n    FIELDS.MAILING_ADDRESS,\r\n    FIELDS.PRIMARY_CONTACT,\r\n    FIELDS.SSN,\r\n    FIELDS.CITIZENSHIP_STATUS,\r\n    FIELDS.MARITAL_STATUS,\r\n    FIELDS.PARENTS_MARITAL_STATUS,\r\n    FIELDS.ED_LEVEL_FATHER,\r\n    FIELDS.ED_LEVEL_MOTHER,\r\n    FIELDS.HISPANIC,\r\n    FIELDS.ETHNICITY__AM_INDIAN,\r\n    FIELDS.ETHNICITY__ASIAN,\r\n    FIELDS.ETHNICITY__BLACK,\r\n    FIELDS.ETHNICITY__HAWAIIAN_PI,\r\n    FIELDS.ETHNICITY__WHITE,\r\n    FIELDS.ETHNICITY__NA,    \r\n    FIELDS.OREGON_RESIDENT,\r\n    FIELDS.WORKING__CURRENT,\r\n    FIELDS.WORKING__NEXT_YEAR,\r\n    FIELDS.HIGHSCHOOL,\r\n    FIELDS.HIGHSCHOOL_GRAD_DATE,\r\n    FIELDS.COLLEGE_CHOICE,\r\n    FIELDS.COLLEGE_STANDING,\r\n    FIELDS.COLLEGE_DUAL_ENROLLED,\r\n    FIELDS.FINISHED_COMM_COLLEGE,\r\n    FIELDS.FINISHED_BACHELORS_DEGREE,\r\n    FIELDS.UNDERGRAD_GPA,\r\n    FIELDS.GRADUATE_GPA,\r\n    FIELDS.DEGREES,\r\n    FIELDS.PAST_COLLEGE,\r\n\r\n    FIELDS.CHILD_CARE_PROVIDER__NAME,\r\n    FIELDS.CHILD_CARE_PROVIDER__ADDRESS,\r\n    FIELDS.CHILD_CARE_PROVIDER__LISTED,\r\n    FIELDS.CHILD_CARE_PROVIDER__REGISTERED,\r\n    FIELDS.CHILD_CARE_PROVIDER__PARENT,\r\n    FIELDS.CHILD_CARE_PROVIDER__STATE,\r\n    FIELDS.CHILD_CARE_PROVIDER__CITY,\r\n    FIELDS.CHILD_CARE_PROVIDER__ZIP,\r\n    FIELDS.CHILD_CARE_PROVIDER__PHONE,\r\n    FIELDS.CHILD_CARE_PROVIDER__START_DATE,\r\n    FIELDS.CHILD_CARE_PROVIDER__NEW,\r\n   \r\n    FIELDS.CHILD_CARE_PROVIDER2__STATE,\r\n    FIELDS.CHILD_CARE_PROVIDER2__CITY,\r\n    FIELDS.CHILD_CARE_PROVIDER2__ZIP,\r\n    FIELDS.CHILD_CARE_PROVIDER2__PHONE,\r\n    FIELDS.CHILD_CARE_PROVIDER2__START_DATE,\r\n    FIELDS.CHILD_CARE_PROVIDER2__NEW,\r\n    FIELDS.CHILD_CARE_PROVIDER2__NAME,\r\n    FIELDS.CHILD_CARE_PROVIDER2__ADDRESS,\r\n    FIELDS.CHILD_CARE_PROVIDER2__LISTED,\r\n    FIELDS.CHILD_CARE_PROVIDER2__REGISTERED,\r\n    FIELDS.CHILD_CARE_PROVIDER2__PARENT,\r\n  ];\r\n\r\n  useEffect(() => {\r\n    actions.fetchBasicFields(fieldKeys, year);\r\n  },[]);\r\n\r\n  const get = (fieldKey) => formState.fields[fieldKey]?.value;\r\n\r\n  const getAddress = (fieldKey) => {\r\n    const street = formState.fields[fieldKey]?.Address.value;\r\n    const city = formState.fields[fieldKey]?.CityId.value;\r\n    const county = formState.fields[fieldKey]?.CountyId.value;\r\n    const zip = formState.fields[fieldKey]?.Zip.value;\r\n\r\n    return { street, city, county, zip};\r\n  };\r\n\r\n  const getNames = (fieldKey) => {\r\n    const stateObject = formState.fields[fieldKey];\r\n    let string = '';\r\n    for (const i in stateObject) {\r\n        string += stateObject[i].FirstName.value+' '+stateObject[i].LastName.value+'\\n'\r\n    }\r\n    return string;\r\n  };\r\n\r\n  const getEdLevel = (fieldKey1, fieldKey2) => {\r\n    return { parent1: get(fieldKey1), parent2: get(fieldKey2) };\r\n  };\r\n\r\n  const getSchoolCode = (fieldKey) => {\r\n    return formState.fields[fieldKey]?.SchoolCode.value;\r\n  }\r\n\r\n  const provider1 = {\r\n    name: get(FIELDS.CHILD_CARE_PROVIDER__NAME),\r\n    street: get(FIELDS.CHILD_CARE_PROVIDER__ADDRESS),\r\n    listed: get(FIELDS.CHILD_CARE_PROVIDER__LISTED),\r\n    registered: get(FIELDS.CHILD_CARE_PROVIDER__REGISTERED),\r\n    parent: get(FIELDS.CHILD_CARE_PROVIDER__PARENT),\r\n    state: get(FIELDS.CHILD_CARE_PROVIDER__STATE),\r\n    city: get(FIELDS.CHILD_CARE_PROVIDER__CITY),\r\n    zip: get(FIELDS.CHILD_CARE_PROVIDER__ZIP),\r\n    phone: get(FIELDS.CHILD_CARE_PROVIDER__PHONE),\r\n    start: get(FIELDS.CHILD_CARE_PROVIDER__START_DATE),\r\n    isNew: get(FIELDS.CHILD_CARE_PROVIDER__NEW),\r\n  };\r\n\r\n  const provider2 = {\r\n    name: get(FIELDS.CHILD_CARE_PROVIDER2__NAME),\r\n    street: get(FIELDS.CHILD_CARE_PROVIDER2__ADDRESS),\r\n    listed: get(FIELDS.CHILD_CARE_PROVIDER2__LISTED),\r\n    registered: get(FIELDS.CHILD_CARE_PROVIDER2__REGISTERED),\r\n    parent: get(FIELDS.CHILD_CARE_PROVIDER2__PARENT),\r\n    state: get(FIELDS.CHILD_CARE_PROVIDER2__STATE),\r\n    city: get(FIELDS.CHILD_CARE_PROVIDER2__CITY),\r\n    zip: get(FIELDS.CHILD_CARE_PROVIDER2__ZIP),\r\n    phone: get(FIELDS.CHILD_CARE_PROVIDER2__PHONE),\r\n    start: get(FIELDS.CHILD_CARE_PROVIDER2__START_DATE),\r\n    isNew: get(FIELDS.CHILD_CARE_PROVIDER2__NEW),\r\n  };\r\n\r\n  return (\r\n    <>\r\n      <ReadOnlyField \r\n        name=\"name\" \r\n        value={get(FIELDS.FIRST_NAME)+' '+get(FIELDS.LAST_NAME)}\r\n      />\r\n      <ReadOnlyField \r\n        name={getField(FIELDS.OTHER_NAMES).question} \r\n        value={getNames(FIELDS.OTHER_NAMES)}\r\n      />\r\n      <ReadOnlyField \r\n        name=\"Birthday\" \r\n        value={get(FIELDS.BIRTHDATE)}\r\n      />\r\n      <ReadOnlyField \r\n        name=\"Gender identity\"\r\n        value={\r\n          ( get(FIELDS.GENDER__MALE) === true ? 'Male\\n' : '') + \r\n          ( get(FIELDS.GENDER__FEMALE) === true ? 'Female\\n' : '') + \r\n          ( get(FIELDS.GENDER__TRANSMAN) === true ? 'Trans Male/Trans Man\\n' : '') + \r\n          ( get(FIELDS.GENDER__TRANSWOMAN) === true ? 'Trans Female/Trans Woman\\n' : '') + \r\n          ( get(FIELDS.GENDER__NON_BINARY) === true ? 'Non-binary/Genderqueer/Gender non-conforming\\n' : '') + \r\n          ( get(FIELDS.GENDER__OTHER ) === true ? 'Different Identity' : '')\r\n      }\r\n      />\r\n      <ReadOnlyField \r\n        name=\"pronouns\" \r\n        value={\r\n          (( get(FIELDS.PRONOUNS__MALE) === true || get(FIELDS.PRONOUNS__MALE) === \"True\" ) ? 'He/Him/His\\n' : '' ) +\r\n          (( get(FIELDS.PRONOUNS__FEMALE) === true || get(FIELDS.PRONOUNS__FEMALE) === \"True\" ) ? 'She/Her/Hers\\n' : '' ) +\r\n          (( get(FIELDS.PRONOUNS__NEUTRAL) === true || get(FIELDS.PRONOUNS__NEUTRAL) === \"True\" ) ? 'They/Them/Their\\n' : '' ) +\r\n          (( get(FIELDS.PRONOUNS__OTHER) === true || get(FIELDS.PRONOUNS__OTHER) === \"True\" ) ? 'Other\\n' : '' )\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name=\"Phone number\" \r\n        value={\r\n          ( get(FIELDS.ALTERNATE_PHONE) ? get(FIELDS.ALTERNATE_PHONE)+' (Mobile)\\n' : '') + \r\n          ( get(FIELDS.HOME_PHONE) ? get(FIELDS.HOME_PHONE)+' (Home)\\n' : '')\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name=\"permanent address\"\r\n        value={\r\n          <ConvertCode \r\n            isAddress={true} \r\n            address={getAddress(FIELDS.PERMANENT_ADDRESS)}\r\n          />\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name=\"mailing address\"\r\n        value={\r\n          <ConvertCode \r\n            isAddress={true} \r\n            address={getAddress(FIELDS.MAILING_ADDRESS)}\r\n          />\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name=\"primary contact\"\r\n        value={<ConvertCode isContact={true} contact={formState.fields[FIELDS.PRIMARY_CONTACT]}/>}\r\n      />\r\n      <ReadOnlyField \r\n        name=\"social security number\"\r\n        value={get(FIELDS.SSN) ? '*********' : ''} \r\n      />\r\n      <ReadOnlyField \r\n        name=\"citizenship status\"\r\n        value={<ConvertCode codeType=\"CITIZEN\" code={get(FIELDS.CITIZENSHIP_STATUS)}/>}\r\n      />\r\n      <ReadOnlyField \r\n        name=\"marital status\"\r\n        value={<ConvertCode codeType=\"STUMS\" code={get(FIELDS.MARITAL_STATUS)}/>}\r\n      />\r\n       <ReadOnlyField \r\n        name=\"parents marital status\" \r\n        value={<ConvertCode codeType=\"STUMS\" code={get(FIELDS.PARENTS_MARITAL_STATUS)}/>} \r\n      />\r\n       <ReadOnlyField \r\n        name=\"Parent or guardians' highest completed education\" \r\n        value={<ConvertCode isEdLevel={true} parents={getEdLevel(FIELDS.ED_LEVEL_FATHER, FIELDS.ED_LEVEL_MOTHER)}/>}\r\n      />\r\n      <ReadOnlyField \r\n        name=\"are you hispanic or latino/a/x\"\r\n        value={\r\n          get(FIELDS.HISPANIC) === \"HISPAN\" ? 'Yes' : \r\n          get(FIELDS.HISPANIC) === \"NONHISPAN\" ? 'No' : \r\n          'Choose not to say'\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name=\"racial group or ethnicity\"\r\n        value={\r\n          ( get(FIELDS.ETHNICITY__AM_INDIAN) === true ? 'American Indian or Alaska Native\\n' : '' ) +\r\n          ( get(FIELDS.ETHNICITY__ASIAN) === true ? 'Asian\\n' : '' ) +\r\n          ( get(FIELDS.ETHNICITY__BLACK) === true ? 'Black or African-American\\n' : '' ) +\r\n          ( get(FIELDS.ETHNICITY__HAWAIIAN_PI) === true ? 'Native Hawaiian or Pacific Islander\\n' : '' ) +\r\n          ( get(FIELDS.ETHNICITY__WHITE) === true ? 'White\\n' : '' ) +\r\n          ( get(FIELDS.ETHNICITY__NA) === true ? 'Choose not to say\\n' : '' )\r\n      }\r\n      />\r\n       \r\n       <ReadOnlyField \r\n        name=\"oregon resident for 12 months preceding enrollment?\"\r\n        value={ \r\n          ( get(FIELDS.OREGON_RESIDENT) === \"True\" || get(FIELDS.OREGON_RESIDENT) === true ) ? 'Yes' : \r\n          ( get(FIELDS.OREGON_RESIDENT) === \"False\" || get(FIELDS.OREGON_RESIDENT) === false ) ? 'No' : ''\r\n        }\r\n      />\r\n       <ReadOnlyField \r\n        name=\"are you working 20+ hours a week in the current academic year?\" \r\n        value={ \r\n          ( get(FIELDS.WORKING__CURRENT) === \"True\" || get(FIELDS.WORKING__CURRENT) === true ) ? 'Yes' : \r\n          ( get(FIELDS.WORKING__CURRENT) === \"False\" || get(FIELDS.WORKING__CURRENT) === false ) ? 'No' : ''\r\n        }\r\n      />\r\n       <ReadOnlyField \r\n        name=\"are you planning to work 20+ hours a week in the next academic year?\" \r\n        value={ \r\n          ( get(FIELDS.WORKING__NEXT_YEAR) === \"True\" || get(FIELDS.WORKING__NEXT_YEAR) === true ) ? 'Yes' : \r\n          ( get(FIELDS.WORKING__NEXT_YEAR) === \"False\" || get(FIELDS.WORKING__NEXT_YEAR) === false ) ? 'No' : ''\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name=\"high school\"\r\n        value={<ConvertCode isHS={true} code={getSchoolCode(FIELDS.HIGHSCHOOL)}/>}\r\n      />\r\n      <ReadOnlyField \r\n        name=\"date of high school completion or graduation\"\r\n        value={get(FIELDS.HIGHSCHOOL_GRAD_DATE)}\r\n      />\r\n      <ReadOnlyField \r\n        name=\"college or university name\"\r\n        value={<ConvertCode isCollege={true} code={getSchoolCode(FIELDS.COLLEGE_CHOICE)}/>}\r\n      />\r\n      <ReadOnlyField \r\n        name={`college standing as of fall ${year}`}\r\n        value={<ConvertCode codeType=\"YRINCLG\" code={get(FIELDS.COLLEGE_STANDING)}/>}\r\n      />\r\n      <div style={{margin: '2rem 1rem'}}>\r\n        <Checkbox \r\n          useController={false} \r\n          name={FIELDS.COLLEGE_DUAL_ENROLLED}\r\n          disabled\r\n          label=\"I will be dual enrolled with another school while attending this school.\"\r\n        />\r\n      </div>\r\n      <div style={{margin: '2rem auto 0 auto'}} className='divider'/>\r\n      <ReadOnlyField \r\n        name={`will you have finished two academic years towards a degree or certificate at community college by july 1, ${year}`}\r\n        value={\r\n          ( get(FIELDS.FINISHED_COMM_COLLEGE) === \"True\" || get(FIELDS.FINISHED_COMM_COLLEGE) === true ) ? 'Yes' : \r\n          ( get(FIELDS.FINISHED_COMM_COLLEGE) === \"False\" || get(FIELDS.FINISHED_COMM_COLLEGE) === false ) ? 'No' : ''\r\n        }\r\n      />\r\n      <ReadOnlyField \r\n        name={`will you have earned your bachelor's degree by fall ${year}`}\r\n        value={\r\n          ( get(FIELDS.FINISHED_BACHELORS_DEGREE) === \"True\" || get(FIELDS.FINISHED_BACHELORS_DEGREE) === true ) ? 'Yes' : \r\n          ( get(FIELDS.FINISHED_BACHELORS_DEGREE) === \"False\" || get(FIELDS.FINISHED_BACHELORS_DEGREE) === false ) ? 'No' : ''\r\n        }\r\n      />  \r\n      <ReadOnlyField \r\n        name=\"cumulative undergraduate gpa\"\r\n        value={get(FIELDS.UNDERGRAD_GPA)}\r\n      /> \r\n      <ReadOnlyField \r\n        name=\"cumulative graduate gpa\"\r\n        value={get(FIELDS.GRADUATE_GPA)}\r\n      />\r\n      <ReadOnlyField \r\n        name=\"degrees\"\r\n        value={ \r\n          <DegreePlans degrees={formState.fields[FIELDS.DEGREES]} />\r\n        }\r\n      />\r\n      <div style={{margin: '2rem 2rem 2rem 3rem'}}>\r\n        <b style={{fontSize: '14px', opacity: '.75', letterSpacing: '1px'}}>COLLEGE HISTORY</b>\r\n        <div style={{marginTop: '2rem'}}>\r\n          <CollegeDisplay colleges={formState.fields[FIELDS.PAST_COLLEGE]}/>\r\n        </div>\r\n      </div>\r\n      <div style={{margin: '2rem auto 0 auto'}} className='divider'/>\r\n      <ReadOnlyField \r\n        name=\"children in household\"\r\n      />\r\n      <ReadOnlyField \r\n        name=\"Child providers\"\r\n        value={\r\n          <>\r\n            <ConvertCode isProvider={true} provider={provider1}/>\r\n            <ConvertCode isProvider={true} provider={provider2}/>\r\n          </>\r\n        }\r\n      />\r\n    </>\r\n  );\r\n};","/**\r\n * description of answer set responses from API\r\n */\r\nclass AnswerSet {\r\n\r\n    /**\r\n     * wrapping constructor\r\n     * @param {*} data AnswerSet as provided by the API answers endpoint\r\n     */\r\n    constructor(data) {\r\n        this._data = data;\r\n    }\r\n\r\n    /**\r\n     * are answers still loading\r\n     * @returns {Boolean}\r\n     */\r\n    get isLoading(){\r\n        return !this._data;\r\n    }\r\n\r\n    /**\r\n     * @returns {*} the raw data from the API\r\n     */\r\n    get answers(){\r\n        return this._data;\r\n    }\r\n\r\n    /**\r\n     * answer sets are fetched only from a given year block. Which year do these answers appear to be from?\r\n     * @return {number}\r\n     */\r\n    get year(){\r\n        if (this._data == null)\r\n            return null;\r\n        if (this._data.length == 0)\r\n            return null;\r\n        return this._data[0].Year;\r\n    }\r\n    \r\n    /**\r\n     * get single state for give question\r\n     * @param {String} questionKey \r\n     * @return {*}\r\n     */\r\n    get(questionKey) {\r\n        if (questionKey == null)\r\n            return null;\r\n        if (!this._data)\r\n            return null;        \r\n\r\n        for (let answer of this._data){\r\n            if (answer.QuestionKey?.toUpperCase() === questionKey?.toUpperCase())            \r\n                return answer;\r\n                        \r\n        }\r\n           \r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * get presumed document answer for the given delivery  method\r\n     * @param {string} questionKey \r\n     * @param {*} deliveryType null if not found\r\n     */\r\n    getDocument(questionKey, deliveryType){\r\n        if (questionKey == null)\r\n            return null;\r\n        if (!this._data)\r\n            return null;\r\n        \r\n        questionKey = questionKey.toUpperCase();\r\n        deliveryType = deliveryType?.toUpperCase();\r\n\r\n        for (let answer of this._data){\r\n            if (answer.QuestionKey?.toUpperCase() === questionKey && answer.DeliveryType?.toUpperCase() === deliveryType)          \r\n                return answer;                        \r\n        }\r\n           \r\n        return null;\r\n    }\r\n    \r\n\r\n    /**\r\n     * get all answers responding to a given question\r\n     * @param {String} questionKey \r\n     * @return {Array<*>} all the dto's from the API that reference this question key\r\n     */\r\n    getAll(questionKey){\r\n        if (questionKey == null)\r\n            return [];\r\n        if (this._data == null)\r\n            return [];\r\n        \r\n        return this._data.filter(answer => answer.QuestionKey.toUpperCase() === questionKey.toUpperCase());       \r\n    }\r\n   \r\n    getCompletedAnswers(){\r\n        if (this._data === null)\r\n            return [];\r\n\r\n        let completed = this._data?.filter(a=> (a.Status || '').toLowerCase() === 'complete')\r\n        return completed;       \r\n    }\r\n\r\n    getAnswers(questionKeys){\r\n        // pass in a list of question keys to a list of answers\r\n        if (this._data === null)\r\n            return [];\r\n\r\n        let list = this._data?.filter(a=> questionKeys.includes(a.QuestionKey))\r\n        return list;       \r\n    }\r\n}\r\n\r\n\r\n\r\nexport default AnswerSet;","/**\r\n * interpretation of a question descriptor dto from the program api\r\n */\r\nclass Question {\r\n\r\n    /**\r\n     * \r\n     * @param {*} data raw dto from API\r\n     */\r\n    constructor(data){\r\n        this._data = data;\r\n    }\r\n\r\n    /**\r\n     * just an alias for name\r\n     */\r\n    get key() {\r\n        return this.name;\r\n    }\r\n\r\n    get name(){\r\n        return this._data.Name;\r\n    }\r\n\r\n    get title()\r\n    {\r\n        return this._data.Title;\r\n    }\r\n\r\n    get type(){\r\n        return this._data.Type;\r\n    }\r\n\r\n    get description(){\r\n        return this._data.Description;\r\n    }\r\n\r\n    get stage(){\r\n        return this._data.Stage;\r\n    }\r\n\r\n    get requirementType(){\r\n        return this._data.RequirementType;\r\n    }\r\n\r\n    get isEitherOr(){\r\n        return this.requirementType == \"EitherOr\";\r\n    }\r\n\r\n    /**\r\n     * is this question strictly required\r\n     */\r\n    get isRequired(){\r\n        return this.requirementType == \"Required\";\r\n    }\r\n\r\n    /**\r\n     * is this question to be asked during the main application to it's program. Assumes program context\r\n     * @returns {Boolean}\r\n     */\r\n    get isApplicationStage(){\r\n        return this.stage == 'Application';\r\n    }\r\n    /**\r\n     * is this question to be asked during  the renewal application to it's program. Assumes program context\r\n     * @returns {Boolean}\r\n     */\r\n    get isRenewalStage(){\r\n        return this.stage == 'Renewal';\r\n    }\r\n\r\n    /**\r\n     * determine the actual amount of characters we intend to enforce in the text input/area given any constraints that have been configured for this question\r\n     */\r\n    get maxCharacters(){\r\n        switch (this._data.LengthUnit)\r\n        {\r\n            case \"Character\":\r\n                return this._data.MaximumLength;\r\n            case \"Word\":\r\n                return this._data.MaximumLength * 8;\r\n            default:\r\n                return 10000;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * \r\n     * @param {string} category \r\n     * @returns {boolean}\r\n     */\r\n    hasCategory(category){\r\n        if (!this._data || !this._data.Categories)\r\n            return false;\r\n\r\n        return this._data.Categories.some(c => c.toLowerCase() == category.toLowerCase());\r\n    }\r\n\r\n    /**\r\n     * locate the given display property\r\n     * @param {string} name \r\n     * @returns {string}\r\n     */\r\n      getDisplayProperty(name) {\r\n        return this._data?.DisplayProperties.find(p => p.Name === name)?.Value;\r\n    }\r\n}\r\n\r\nexport default Question","import { useEffect } from \"react\";\r\nimport { getQuestionInfo } from \"../../../store/form/fields\";\r\n\r\n/**\r\n * \r\n * @param {*} param0 \r\n * @returns {Component}\r\n */\r\nfunction ResponseAnswerDisplay({answer}){\r\n    \r\n    \r\n    return <>{answer?.SelectedOption ?? answer?.Response ?? 'None'}</>\r\n\r\n}\r\n\r\nexport default ResponseAnswerDisplay;","import React, { useEffect, useState } from 'react';\r\nimport { Checkbox } from \"@material-ui/core\";\r\n\r\nfunction ReadOnlyCheckbox({ value }) {\r\n  const [updatedVal, setUpdatedVal] = useState(false);\r\n  useEffect(() => {\r\n    setUpdatedVal(value);\r\n  }, [value]);\r\n\r\n  return (\r\n    <Checkbox\r\n      checked={updatedVal}\r\n      disabled\r\n      style={{ paddingLeft: 0 }}\r\n    />\r\n  );\r\n}\r\n\r\nexport default ReadOnlyCheckbox;\r\n","import Checkbox from \"../../ReadOnlyCheckbox\";\r\n\r\n\r\n/**\r\n * \r\n * @param {*} param0 \r\n * @returns \r\n */\r\nfunction BooleanDisplay({answer}){\r\n    \r\n    return <Checkbox value={answer.Response}  />\r\n\r\n}\r\n\r\nexport default BooleanDisplay;","/**\r\n * \r\n * @param {*} param0 \r\n * @returns \r\n */\r\nfunction ContactDisplay({answer}){\r\n\r\n    return (\r\n        <address>\r\n            <div>{answer?.FirstName} {answer?.LastName}</div>\r\n            <div>{answer.Address}</div>\r\n            <div>{answer.Address2}</div>\r\n        </address>\r\n    );\r\n\r\n}\r\n\r\nexport default ContactDisplay;","import { useEffect, useState } from \"react\";\r\nimport apiClient from \"../../../utils/API\";\r\nimport { UNLISTED_COLLEGECODE } from \"../../../store/form/fields\";\r\n\r\n/**\r\n * quick summary of selected high school\r\n * @param {*} param0 answer DTO\r\n */\r\nfunction SchoolDisplay({ answer }) {\r\n\r\n    const [schoolName, setSchoolName] = useState(null);\r\n\r\n    useEffect(() => {\r\n        (async () => {\r\n            if (!answer.SchoolCode || answer.SchoolCode === UNLISTED_COLLEGECODE)\r\n                setSchoolName(answer.UnlistedName);\r\n\r\n            else if (answer.Type == 'College') {\r\n                const college = await apiClient.getCollege(answer.SchoolCode);\r\n                setSchoolName(college?.Name);\r\n            }\r\n            else {\r\n                const highSchool = await apiClient.getHighSchool(answer.SchoolCode);\r\n                setSchoolName(highSchool?.Name);\r\n            }\r\n\r\n        })();\r\n    }, []);\r\n\r\n    return (\r\n        <>\r\n            {schoolName}\r\n        </>\r\n    )\r\n\r\n}\r\n\r\nexport default SchoolDisplay;\r\n","import { useEffect } from \"react\";\r\nimport { useState } from \"react\";\r\nimport apiClient from \"../../../utils/API\";\r\n\r\n/**\r\n *\r\n * @param {*} param0\r\n */\r\nfunction DegreeDisplay({ answer }) {\r\n\r\n    const [degreeName, setDegreeName] = useState(null);\r\n\r\n    useEffect(() => {\r\n        if (!answer.CIPMajorId)\r\n            return;\r\n        (async () => {\r\n            var degree = await apiClient.get(`/major/${answer.CIPMajorId}`);\r\n            setDegreeName(degree.Title)\r\n\r\n        })();\r\n    }, []);\r\n    return <>{degreeName}</>\r\n}\r\nexport default DegreeDisplay;\r\n","/**\r\n * \r\n * @param {*} param0 \r\n * @returns \r\n */\r\nfunction DateDisplay({ answer }) {\r\n\r\n    if (!answer?.Response)\r\n        return (<></>);\r\n\r\n    const dateValue = new Date(Date.parse(answer.Response));\r\n    return <>{dateValue.toLocaleDateString(\"en-US\")}</>;\r\n\r\n}\r\n\r\nexport default DateDisplay;\r\n","/**\r\n * quick summary of activity answer\r\n * @param {*} param0 \r\n * @returns {Component}\r\n */\r\nfunction ActivityDisplay({ answer }) {\r\n\r\n    return <>{answer?.Title}</>;\r\n}\r\n\r\nexport default ActivityDisplay;\r\n","import ResponseAnswerDisplay from \"./ResponseAnswerDisplay\";\r\nimport BooleanDisplay from \"./BooleanDisplay\";\r\nimport ContactDisplay from \"./ContactDisplay\";\r\nimport SchoolDisplay from \"./SchoolDisplay\";\r\nimport DegreeDisplay from \"./DegreeDisplay\";\r\nimport DateDisplay from \"./DateDisplay\";\r\nimport ActivityDisplay from \"./ActivityDisplay\";\r\n\r\n/**\r\n * \r\n * @param {*} param0 \r\n * @returns \r\n */\r\nfunction AnswerDisplay({answer}) {\r\n\r\n    switch (answer.AnswerType) {\r\n\r\n        case 'Date':\r\n            return <DateDisplay answer={answer} />\r\n        case 'Text':        \r\n        case 'Integer':\r\n        case 'Decimal':\r\n            return <ResponseAnswerDisplay answer={answer} />\r\n        case 'Boolean':\r\n            return <BooleanDisplay answer={answer} />\r\n        case 'Contact':\r\n        case 'Address':\r\n            return <ContactDisplay answer={answer} />\r\n        case 'HighSchool':\r\n        case 'College':\r\n            return <SchoolDisplay answer={answer} />\r\n        case 'Degree':\r\n            return <DegreeDisplay answer={answer} />\r\n        case 'Activity':\r\n            return <ActivityDisplay answer={answer} />\r\n        default:\r\n            return <> </>\r\n\r\n    }\r\n}\r\n\r\nexport default AnswerDisplay;","import { useState } from \"react\";\r\nimport { useEffect } from \"react\";\r\nimport apiClient from \"../../utils/API\";\r\nimport {\r\n    FieldSlot,\r\n    FieldSection,\r\n    FieldRow,\r\n} from \"../../components/Forms/FieldSection\";\r\nimport SpinnerSection from \"../../components/Utility/SpinnerSection\";\r\nimport AnswerSet from \"../../utils/dtos/AnswerSet\";\r\nimport Question from \"../../utils/dtos/Question\";\r\nimport AnswerDisplay from \"../answer/readonly\";\r\nimport { getQuestionInfo } from \"../../store/form/fields\";\r\n\r\n\r\n/**\r\n * \r\n * @param {*} param0 \r\n * @returns \r\n */\r\nfunction Scholarship({ year, code }) {\r\n\r\n    const [questionData, setQuestionData] = useState({});\r\n    const questions = questionData.questions?.map(q => new Question(q));\r\n    const answerSet = new AnswerSet(questionData.answers);\r\n\r\n    const isLoading = answerSet.isLoading;\r\n\r\n    useEffect(() => {\r\n        (async () => {\r\n            const questions = await apiClient.get(`question/questions/${code}/${year}`);\r\n            const fieldKeys = questions.map(q => q.Name);\r\n            const data = {\r\n                \"questionKeys\": fieldKeys,\r\n                \"year\": year,\r\n                \"IsVerbose\": true\r\n            };\r\n            const answers = await apiClient.get(\"/answer\", data);\r\n            setQuestionData({questions, answers});\r\n\r\n        })();\r\n    }, []);\r\n\r\n    /**\r\n     * get some resonable description for question\r\n     * @param {Question} question \r\n     * @returns {string}\r\n     */\r\n    function getTitleForQuestion(question){    \r\n        if (question.description)\r\n            return question.description;\r\n      \r\n        return getQuestionInfo(question.name)?.Title ?? question.name;\r\n    }\r\n\r\n   \r\n\r\n    /**\r\n     * is this question even worth displaying\r\n     * @param {Question} question \r\n     */\r\n    function isFluff(question){\r\n        const fluffQuestions = ['activitieschartflag', 'gedinprogressflag', 'hstypecode', 'hasnoschoolactivities', 'hasnoworkactivities', 'hasnovolunteeractivities', 'iscollegehistorycomplete'];\r\n        const name = question.name.toLowerCase();\r\n        if (name === 'testappflag')\r\n            return false;        \r\n        if (name.startsWith('aspire'))\r\n            return true;\r\n        if (fluffQuestions.includes(name))\r\n            return true;       \r\n        if (name.includes('correctional'))\r\n            return true;\r\n        if (question.hasCategory('Contact'))\r\n            return false;\r\n        if (question.hasCategory('HighSchool'))\r\n            return false;\r\n        if (question.hasCategory('Profile'))\r\n            return true;\r\n        if (question.type === 'Transcript')\r\n            return true;\r\n\r\n        return false;\r\n    }\r\n\r\n\r\n    if (isLoading)\r\n        return <SpinnerSection />\r\n\r\n    return (\r\n        <div>\r\n            {questions.filter(q => !isFluff(q)).map((question, index) =>\r\n                <FieldSection\r\n                    title={getTitleForQuestion(question)}\r\n                    withDivider={(index + 1) !== questions.length}\r\n                >\r\n                    {answerSet.getAll(question.name).map(answer =>\r\n\r\n                        <FieldRow>\r\n                            <FieldSlot md={12}>\r\n                                <div className=\"outlined-box\">\r\n                                    <AnswerDisplay answer={answer} />\r\n                                </div>\r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n\r\n                    )}\r\n                </FieldSection>\r\n            )}\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default Scholarship;\r\n","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Accordion from '@material-ui/core/Accordion';\r\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\r\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport RemoveIcon from '@material-ui/icons/Remove';\r\nimport StarRoundedIcon from '@material-ui/icons/StarRounded';\r\nimport Dialog from '../../components/Dialog';\r\nimport AppSnapshotPromise from './AppSnapshotPromise';\r\nimport AppSnapshotGuard from './AppSnapshotGuard';\r\nimport AppSnapshotChafee from './AppSnapshotChafee';\r\nimport AppSnapshotChild from './AppSnapshotChild';\r\nimport { CODES } from '../Utility/ProgramCodes';\r\nimport AppSnapshotScholarship from './AppSnapshotScholarship';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n  root: {\r\n  },\r\n  heading: {\r\n  },\r\n  details: {\r\n  },\r\n  section: {\r\n  },\r\n\r\n}));\r\n\r\nfunction MobileHistoryRow({ details, key, year }) {\r\n  const classes = useStyles();\r\n  const [expanded] = React.useState(false);\r\n\r\n  return (\r\n    <div className=\"rhtyhm\">\r\n      <Accordion>\r\n        <AccordionSummary\r\n          expandIcon={expanded ? <RemoveIcon /> : <AddIcon />}\r\n          aria-controls=\"panel1a-content\"\r\n          id=\"panel1a-header\"\r\n          className=\"accordion__summary\"\r\n        >\r\n          <h5 className=\"heading heading--h5\">\r\n            {details.name}\r\n          </h5>\r\n        </AccordionSummary>\r\n        <AccordionDetails className=\"accordion__details rhythm\">\r\n          <dl>\r\n            <dt><strong>Grant or scholarship:</strong></dt>\r\n            <dd>{details.name}</dd>\r\n          </dl>\r\n          <dl>\r\n            <dt><strong>Application #</strong></dt>\r\n            <dd>{details.appNumber}</dd>\r\n          </dl>\r\n\r\n          <div className={classes.section}>\r\n          {details.isAwarded && \r\n            <div style={{color: '#51C1B0'}}>\r\n              <StarRoundedIcon style={{paddingLeft: '2px'}} fontSize='smaller'/>\r\n              <strong>Awarded!</strong>\r\n            </div>\r\n          }\r\n          </div>\r\n\r\n          <div className={classes.section}>\r\n            <Dialog title={`${details.name} ${details.year}-${details.year + 1}`} buttonLabel='view'>\r\n            {\r\n              details.code === CODES.OREGON_PROMISE ?\r\n                <AppSnapshotPromise year={details.year}/>\r\n              :\r\n              details.code === CODES.NATIONAL_GUARD ?\r\n                <AppSnapshotGuard year={details.year}/>\r\n              :\r\n              details.code === CODES.CHAFEE ?\r\n                <AppSnapshotChafee year={details.year}/>\r\n              :\r\n              details.code === CODES.CHILD_CARE ?\r\n                <AppSnapshotChild year={details.year}/>\r\n              :\r\n                <AppSnapshotScholarship year={details.year} code={details.code} />\r\n            }\r\n            </Dialog>\r\n          </div>\r\n\r\n        </AccordionDetails>\r\n      </Accordion>\r\n    </div>\r\n  );\r\n}\r\n\r\nexport default ({ listApplications })=>{\r\n  return (\r\n    <div className=\"history-list rhythm\">\r\n      {listApplications.map((item, i) =>\r\n        <div className=\"component component--bottom-small-padding rhythm\">\r\n          <h3 className=\"heading heading--h3\">{item.year}</h3>\r\n          {(item.applications).map((app, j) =>\r\n            <MobileHistoryRow key={j} details={app} year={item.year}/>\r\n          )}\r\n        </div>\r\n      )}\r\n    </div>\r\n  )\r\n}","import apiClient from '../../utils/API';\r\n\r\nexport const getHistory = async () => {\r\n  const applications = await apiClient.get(`/application`);\r\n\r\n  let history = [];\r\n\r\n  for (let app of applications) {    \r\n    if (app.ProgramCode == \"FAFSA\" || app.ProgramCode == \"OOG\") //supress these programs for now\r\n      continue;\r\n\r\n    const program = await apiClient.get(`/program/${app.ProgramCode}`);\r\n    const obj = {\r\n      name: program?.Name ?? app.ProgramCode,\r\n      code: app.ProgramCode,\r\n      year: app.Year,\r\n      appNumber: app.AppId  \r\n    };\r\n    history.push(obj)\r\n  }\r\n\r\n  return history;\r\n};","import { useState, useEffect } from \"react\";\r\nimport PortalView from \"./../../components/Global/PortalView\";\r\nimport HistoryIcon from \"@material-ui/icons/History\";\r\nimport AppHistoryMobile from \"../../components/AppHistory/AppHistoryMobile\";\r\nimport { getHistory } from \"../../components/Utility/GetAppHistory\";\r\nimport SpinnerSection from \"./../../components/Utility/SpinnerSection\";\r\n\r\nfunction History() {\r\n  const [applications, setApplications] = useState([]);\r\n\r\n  const [isLoading, setLoading] = useState(true);\r\n  let listApps = [];\r\n\r\n  useEffect(() => {\r\n    (async () => {\r\n      const value = await getHistory();\r\n      setApplications(value);\r\n      setLoading(false);\r\n    })();\r\n  }, []);\r\n\r\n  const groupedApps = applications.reduce((obj, v) => {\r\n    obj[v.year] = obj[v.year] || [];\r\n    obj[v.year].push(v);\r\n    return obj;\r\n  }, {});\r\n\r\n  for (const i in groupedApps) {\r\n    let temp = {\r\n      year:\r\n        groupedApps[i][0].year.toString() +\r\n        \"-\" +\r\n        (groupedApps[i][0].year + 1).toString(),\r\n      applications: Object.values(groupedApps[i]),\r\n    };\r\n    listApps.push(temp);\r\n  }\r\n\r\n  return (\r\n    <PortalView>\r\n      <div name=\"HistoryPage\" className=\"history\">\r\n\r\n        <div className=\"page-intro\">\r\n          <div className=\"wrapper\">\r\n            <div className=\"page-intro__layout\">\r\n              <div className=\"page-intro__icon\">\r\n                <HistoryIcon fontSize=\"large\" style={{ color: \"#f7db6a\", marginTop: \".5rem\" }} />\r\n              </div>\r\n              <div className=\"page-intro__content rhythm\">\r\n                <h1 className=\"heading heading--h1\">\r\n                  Application History\r\n                </h1>\r\n                <a href=\"/dashboard\">Return to Dashboard</a>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <div className=\"component rhythm\">\r\n          <div className=\"wrapper\">\r\n            {!isLoading && (\r\n              <AppHistoryMobile listApplications={listApps} />\r\n            )}\r\n            {isLoading && <SpinnerSection />}\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </PortalView>\r\n  );\r\n}\r\n\r\nexport default History;\r\n","import React from 'react';\r\nimport MuiAccordion from '@material-ui/core/Accordion';\r\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\r\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\r\nimport Button from './Button';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\r\n\r\nconst Accordion = (MuiAccordion);\r\n\r\nexport default function MessageList({ listMessages }) {\r\n  const [expanded, setExpanded] = React.useState(false);\r\n\r\n  const handleChange = (panel) => (event, isExpanded) => {\r\n    setExpanded(isExpanded ? panel : false);\r\n  };\r\n\r\n  return (\r\n    <div className=\"message-list\">\r\n      {listMessages.map((item, i) =>\r\n        <Accordion className=\"message\" expanded={expanded === `panel${i}`} onChange={handleChange(`panel${i}`)}>\r\n          <AccordionSummary aria-controls=\"panel1bh-content\" id=\"panel1bh-header\">\r\n            <div className=\"message__header\">\r\n              <div className=\"message__header-from\">\r\n                {expanded === `panel${i}` ?\r\n                  <ExpandMoreIcon fontSize='small'/> :\r\n                  <ChevronRightIcon fontSize='small'/>}\r\n                <strong>{item.from}</strong>\r\n              </div>\r\n              <div className=\"message__header-date\">{(item.sent).substr(0, 9)}</div>\r\n              <div className=\"message__header-title\">{item.title}</div>\r\n            </div>\r\n          </AccordionSummary>\r\n\r\n          <AccordionDetails className=\"message__body rhythm\">\r\n\r\n            <div className=\"message__body-content\" dangerouslySetInnerHTML={ { __html: item.message }}/>\r\n            <div><Button label='Close' className=\"button button--text\" onClick={handleChange(`panel${i}`)}/></div>\r\n          </AccordionDetails>\r\n        </Accordion>\r\n      )}\r\n    </div>\r\n  );\r\n}\r\n","import { useState, useEffect } from \"react\";\r\nimport PortalView from \"./../../components/Global/PortalView\";\r\nimport MessageList from \"../../components/MessageList\";\r\nimport MailIcon from \"@material-ui/icons/MailOutline\";\r\nimport apiClient from \"../../utils/API\";\r\nimport Spinner from \"../../components/Utility/Spinner\";\r\n\r\nfunction Messages() {\r\n  const [loading, setLoading] = useState(true);\r\n  const [messages, setMessages] = useState([\r\n    // {\r\n    //   title: \"Your 2021-22 Scholarship Application Status\",\r\n    //   from: \"Noreply@hecc.oregon.gov\",\r\n    //   sent: \"2/16/2021 12:49PM\",\r\n    //   message: `Dear Anthony Mendoza,\\n\r\n    //         Congratulations on being awarded a scholarship through OSAC.\\n\r\n    //         According to your scholarship application you plan to attend Concordia University for the 2020-2021 Academic Year.\r\n    //         We will be sending your scholarship funds to the college listed in your scholarship application. If the school in your application is incorrect, your scholarship will go to the wrong school and will cause a delay in receiving your scholarship funds.\\n\r\n    //         If you need to change your college, please do so by:\r\n    //         Logging into your OSAC Student Portal\r\n    //         Proceed to Section 9: College Plans in the 2020-21 Scholarship Application\r\n    //         Update College of Choice to the college you plan on attending for 2020-21 Application\\n\r\n    //         You can also check or update your college of choice at any time during the 2020-21 academic year.\\n\r\n    //         If you have any questions or need assistance please contact OSAC by replying to this email.\\n\\n\r\n    //         Thank you,\\nOSAC Scholarship Team`,\r\n    // },\r\n  ]);\r\n\r\n  const FilteringOptions = {\r\n    MOST_RECENT: \"Most Recent\",\r\n    HIDDEN: \"Hidden\",\r\n  };\r\n\r\n  //Object.values(FilteringOptions) = [\"Most Recent\", \"Hidden\"]; // <- can be used for the dropdown\r\n  let sortOptions = [];\r\n  for (const [value, label] of Object.entries(FilteringOptions)) {\r\n    sortOptions = [...sortOptions, { value: label, label }];\r\n  }\r\n\r\n  const [filteringParams, setFilteringParams] = useState({\r\n    searchQuery: \"\",\r\n    filteringOption: FilteringOptions.MOST_RECENT,\r\n    totalPages: 3, // can set default -1\r\n  });\r\n\r\n  const tips = document.getElementById('tips');\r\n  const tipsTrigger = document.getElementById('tipslist-trigger');\r\n  const toggleTips = () => {\r\n    tips.classList.toggle('tipslist--expanded');\r\n    tipsTrigger.classList.toggle('active');\r\n  };\r\n\r\n  const [hideIntro, setHideIntro] = useState(true)\r\n  useEffect(() => {\r\n    // this will be called when filteringParams updates\r\n    (async () => {\r\n      try {\r\n        const communications = await apiClient.get(\"/communication\");\r\n        setMessages([\r\n          ...communications.map((comm) => ({\r\n            from: comm.Sender,\r\n            title: comm.Subject,\r\n            sent: comm.TimeSent,\r\n            message: comm.Body,\r\n          })),\r\n          // {\r\n          //   title: \"Your 2021-22 Scholarship Application Status\",\r\n          //   from: \"Noreply@hecc.oregon.gov\",\r\n          //   sent: \"2/16/2021 12:49PM\",\r\n          //   message: `Dear Anthony Mendoza,\\n\r\n          //           Congratulations on being awarded a scholarship through OSAC.\\n\r\n          //           According to your scholarship application you plan to attend Concordia University for the 2020-2021 Academic Year.\r\n          //           We will be sending your scholarship funds to the college listed in your scholarship application. If the school in your application is incorrect, your scholarship will go to the wrong school and will cause a delay in receiving your scholarship funds.\\n\r\n          //           If you need to change your college, please do so by:\r\n          //           Logging into your OSAC Student Portal\r\n          //           Proceed to Section 9: College Plans in the 2020-21 Scholarship Application\r\n          //           Update College of Choice to the college you plan on attending for 2020-21 Application\\n\r\n          //           You can also check or update your college of choice at any time during the 2020-21 academic year.\\n\r\n          //           If you have any questions or need assistance please contact OSAC by replying to this email.\\n\\n\r\n          //           Thank you,\\nOSAC Scholarship Team`,\r\n          // },\r\n        ]);\r\n        if (communications.length === 0){\r\n          setHideIntro(false)\r\n        }\r\n      } catch (err) {\r\n        console.error(err);\r\n      }\r\n      setLoading(false);\r\n    })();\r\n  }, [filteringParams]);\r\n\r\n  return (\r\n    <PortalView>\r\n      <div name=\"MessagesPage\" className=\"messages\">\r\n        {/* Page Intro */}\r\n        <div className=\"page-intro\">\r\n          <div className=\"wrapper\">\r\n            <div className=\"page-intro__layout\">\r\n              <div className=\"page-intro__icon\">\r\n                <MailIcon fontSize=\"large\" style={{ marginTop: \".5rem\", color: \"#D6743D\" }} />\r\n              </div>\r\n              <div className=\"page-intro__content rhythm\">\r\n                <h1 className=\"heading heading--h1\">Messages</h1>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <div className=\"wrapper\">\r\n\r\n          {loading? \r\n            <div style={{ marginTop: \".75rem\" }}>\r\n              <Spinner />\r\n            </div> \r\n          : null}\r\n\r\n          { !hideIntro &&\r\n            <div className=\"rhythm component component--top-small-padding text text--small\">\r\n\r\n              <h2 className=\"heading heading--h5 pointer\" id=\"tipslist-trigger\" onClick={toggleTips}>\r\n                <span>\r\n                  <svg style={{'width': '1.5rem'}} fontSize=\"small\" className=\"MuiSvgIcon-root MuiSvgIcon-fontSizeSmall css-ptiqhd-MuiSvgIcon-root\" focusable=\"false\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" data-testid=\"ChevronRightIcon\"><path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"></path></svg>\r\n                </span>\r\n                OSAC has not yet sent you any email messages.\r\n              </h2>\r\n              <ul className=\"list tipslist\" id=\"tips\">\r\n                <li className=\"li\">Make sure your email address is correct.</li>\r\n                <li className=\"li\">Check that any spam filtering allows emails from OSAC.</li>\r\n                <li className=\"li\">OSAC emails may originate from these email domains: osac.state.or.us, state.or.us, hecc.oregon.gov</li>\r\n                <li className=\"li\">OSAC may use generic email addresses, such as for Awardinfo@hecc@oregon.gov used to award scholarships</li>\r\n                <li className=\"li\">An OSAC staff member may use their OSAC email address to assist you with your application</li>\r\n                <li className=\"li\">OSAC will never contact you to ask for money</li>\r\n              </ul>\r\n            </div>\r\n          }\r\n\r\n          <div className=\"component message-list\">\r\n            <MessageList listMessages={messages} />\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </PortalView>\r\n  );\r\n}\r\nexport default Messages;\r\n","import React, { useEffect } from 'react';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport _get from 'lodash.get';\r\nimport InputDecorator from '../InputDecorator';\r\n\r\n\r\nfunction HiddenInput({ name, defaultValue, value, isRequired, ...props }) {\r\n\r\n\r\n  const { register, setValue, unregister } = useFormContext({ mode: 'onBlur' });\r\n  \r\n  useEffect(()=>{\r\n    let resolvedValue = value || defaultValue;\r\n    register(name);\r\n    if(resolvedValue){\r\n      setValue(name,resolvedValue);\r\n    }\r\n\r\n    return () => unregister(name);\r\n  },[value]);\r\n\r\n  // This allows the hidden input to unregister if not required \r\n  // or else the field will be required until input is entered\r\n  useEffect(()=>{\r\n    if(isRequired === false){\r\n      unregister(name);\r\n    }\r\n  },[isRequired]);\r\n\r\n  return null;\r\n}\r\n\r\nexport default InputDecorator(HiddenInput)","import { useSelector } from 'react-redux';\r\nimport Button from './Button';\r\nimport Spinner from './Utility/Spinner'\r\n\r\n/**\r\n * render the common layout for a form section\r\n * @param {*} param0 \r\n *      isEditable is ture when we are in actual edit mode\r\n * @returns \r\n */\r\nexport default function FormSection({ title, status, isEditable, onEditClick, onSaveClick, onCancelClick, children, loading, displayOnLoad, editButtonText = 'Edit' }) {\r\n    const reduxFormState = useSelector((state) => state.form);\r\n    const isFetchingData = reduxFormState.isLoading;\r\n    return (\r\n        <div className=\"form-section\">\r\n            <div className=\"form-section__header\">\r\n                <h3 className=\"heading heading--h4\">{status} {title}</h3>\r\n                {!isEditable && onEditClick &&\r\n                    <Button variant=\"text\" label={editButtonText} alt={editButtonText} onClick={onEditClick} disabled={isFetchingData} />\r\n                }\r\n            </div>\r\n            <div className=\"form-section__content\">\r\n\r\n                {displayOnLoad && loading &&\r\n                    <Spinner />\r\n                }\r\n                {(!displayOnLoad || !loading) && children}\r\n\r\n                {isEditable && (onCancelClick || onSaveClick) &&\r\n                    <div className=\"save-edit-end\">\r\n                        {onCancelClick &&\r\n                            <Button name='CancelEditBasicInfo' label='Cancel' variant='outline' onClick={onCancelClick} disabled={isFetchingData || loading} />\r\n                        }\r\n                        {onSaveClick &&\r\n                            <Button name='SaveBasicInfo' onClick={onSaveClick} label='Save' loading={loading} disabled={isFetchingData || loading} />\r\n                        }\r\n                    </div>\r\n                }\r\n\r\n            </div>\r\n        </div>\r\n    );\r\n};\r\n","import React, { Fragment } from \"react\";\r\nimport Lock from \"@material-ui/icons/Lock\";\r\n//import EditIcon from '@material-ui/icons/Edit';\r\nimport CheckCircle from \"@material-ui/icons/CheckCircle\";\r\nimport { ErrorOutline } from \"@material-ui/icons\";\r\nimport {Tooltip} from \"@material-ui/core\";\r\n\r\n/**\r\n * present answer lock status to student\r\n * \r\n * @param {*} param0\r\n */\r\nfunction AnswerLock({ answer }) {\r\n\r\n    if (!answer) {\r\n        // if no answer return nothing.\r\n        return (<Fragment/>);\r\n    }\r\n\r\n    if (!answer.IsLocked)\r\n    {        \r\n        if (answer.IsValid === false)\r\n            //TODO: can we use some variation of {<div dangerouslySetInnerHTML={{__html: answer.ReviewStatusDescription}}></div>} reliably?\r\n            return (\r\n                <Tooltip title=\"Staff review of application indicates this information may be incorrect. Please check answer.\">            \r\n                    <ErrorOutline />\r\n                </Tooltip>\r\n            );\r\n        return null;\r\n    }        \r\n\r\n    let lockReason = \"Answer has been locked by OSAC\";\r\n    if (answer.LockReason === \"Verified\")\r\n        lockReason = <><CheckCircle />Answer has been verified.</>;\r\n    else if (answer.LockReason === \"Eligibility\")\r\n        lockReason = \"Answer is currently being used to determine your eligibility for financial aid.\"      \r\n    else if (answer.LockReason === \"Outdated\")\r\n        lockReason = \"Answer is outdated and no longer being used\";\r\n\r\n    //lockReason += \" \" + answer.QuestionKey;\r\n\r\n    return (\r\n        <Tooltip title={lockReason}>            \r\n            <Lock />\r\n        </Tooltip>\r\n    );\r\n\r\n    \r\n    \r\n\r\n}\r\nexport default AnswerLock;","import AnswerLock from \"./status/AnswerLock\";\r\nimport Checkbox from \"../Checkbox\";\r\n\r\n/**\r\n * prompt for boolean answer that is a ceritification of some fact\r\n * \r\n * @returns {Component}\r\n */\r\nfunction CertifyAnswer({answer, disabled, label, ...props}){\r\n    \r\n    const isDisabled = disabled || answer.IsLocked;\r\n\r\n    return (             \r\n        <Checkbox name={answer.FieldKey} {...props} disabled={isDisabled} label={<>{label} <AnswerLock answer={answer} /></>} />                \r\n    );\r\n}\r\nexport default CertifyAnswer;","import React, { useState } from \"react\";\r\nimport { InputLabel, useTheme } from '@material-ui/core';\r\nimport { get } from 'lodash'\r\nimport { useFormContext } from 'react-hook-form';\r\nimport moment from 'moment';\r\nimport { useEffect } from 'react';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport Select from '@material-ui/core/Select';\r\nimport HiddenInput from './Utility/HiddenInput';\r\nimport FormControl from '@material-ui/core/FormControl';\r\n\r\n/**\r\n * prompt for a date from student only providing a month and a year\r\n * @param {*} param0 \r\n * @returns {Component}\r\n */\r\nexport default function MonthYearPicker({ label, name, isDisabled = false, defaultValue, isRequired = false }) {\r\n    const { register, unregister, setValue, trigger, errors, setError, clearErrors } = useFormContext({ mode: 'onBlur' });\r\n    const error = get(errors, name);\r\n    const theme = useTheme();\r\n    \r\n    const defaultDate = defaultValue ? new Date(defaultValue) : null;\r\n    const defaultMonth = defaultDate ? (defaultDate.getMonth() + 1).toString() : null;\r\n    const defaultYear = defaultDate?.getFullYear()?.toString();\r\n\r\n     //compose a reasonable list of years relative to the current year (mostly in the past, a little in the future)\r\n     const currentYear = (new Date()).getFullYear();\r\n     const range = (start, stop, step) => Array.from({ length: (stop - start) / step + 1 }, (_, i) => start + (i * step));\r\n     const years = range(currentYear + 3, currentYear - 100, -1);\r\n \r\n     const yearOptions = years.map((year) => {\r\n         return {\r\n             label: year,\r\n             value: year.toString(),\r\n         };\r\n     });\r\n \r\n     const monthOptions = moment.months().map((month, i) => {\r\n         return {\r\n             label: month,\r\n             value: (i + 1).toString(),\r\n         };\r\n     });\r\n\r\n    const [month, setMonth] = useState(defaultMonth || \"\");\r\n    const [year, setYear] = useState(defaultYear || \"\");\r\n    const [monthYear, setMonthYear] = useState(\"\");\r\n    \r\n    const onMonthChange = ({ target: { value } }) => {\r\n        setMonth(value);\r\n        trigger(name);\r\n    }\r\n\r\n    const onYearChange = ({ target: { value } }) => {        \r\n        setYear(value);\r\n        trigger(name);\r\n    }\r\n\r\n    useEffect(() => {\r\n        register(name, { required: isRequired });\r\n\r\n        return () => {\r\n            unregister(name);\r\n        };\r\n    }, [register, unregister]);\r\n\r\n    useEffect(() => {\r\n        const isValidMonth = monthOptions.some(x => x.value === month);\r\n        const isValidYear = yearOptions.some(x => x.value === year);\r\n\r\n        if (isValidMonth && isValidYear) {\r\n            setMonthYear(`${year}-${month}`);\r\n            clearErrors(name);\r\n            return;\r\n        }\r\n        if ((month && !isValidMonth) || (year && !isValidYear)) {\r\n            setMonthYear(\"\");\r\n            setError(name, { type: 'manual', message: \"Select month and year from dropdown\" });\r\n            return;\r\n        }\r\n        if (isRequired && (month || year)) {\r\n            setError(name, { type: 'manual', message: \"Month and Year are required\" });\r\n        }\r\n    }, [month, year]);\r\n\r\n    \r\n    return (\r\n        <div style={{ marginTop: theme.spacing(2), position: 'relative' }}>\r\n            <InputLabel>\r\n                {label}{isRequired && <span style={{ color: 'red' }}>&nbsp;*</span>}\r\n            </InputLabel>\r\n            <HiddenInput isRequired={isRequired} name={name} value={monthYear} />\r\n            <Picker label=\"Month\" value={month} onChange={onMonthChange} error={error} disabled={isDisabled} options={monthOptions} isRequired={isRequired} />\r\n            <Picker label=\"Year\" value={year} onChange={onYearChange} error={error} disabled={isDisabled} options={yearOptions} isRequired={isRequired}/>\r\n            {error && (<div style={{ color: 'red', fontSize: '0.875rem' }}>{error.message}</div>)}\r\n        </div>\r\n    );\r\n}\r\n\r\nfunction Picker({ label, value, onChange, error, disabled, options, isRequired }) {\r\n    return (\r\n        <FormControl style={{ minWidth: \"10em\"}}>\r\n            <InputLabel shrink={false}>{value ? '' : label}</InputLabel>\r\n            <Select value={value} onChange={onChange} error={!!error} disabled={disabled}\r\n                style={{ height: '42px', borderRadius: \"5px\", margin: 0, background: 'white' }}\r\n            >\r\n                {options.map(({ label, value }) => <MenuItem key={value} value={value}>{label}</MenuItem>)}\r\n            </Select>\r\n        </FormControl>\r\n    );\r\n}\r\n","import MaskedDatePicker from \"../MaskedDatePicker\";\r\nimport MonthYearPicker from \"../MonthYearPicker\";\r\nimport AnswerLock from \"./status/AnswerLock\";\r\n//import { useFormContext } from \"react-hook-form\";\r\n\r\n/**\r\n * detail of the date we wish to prompt for\r\n */\r\nexport const DateResolution = {\r\n    DAY : 'DAY',\r\n    MONTH : 'MONTH',\r\n    TERM : 'TERM'\r\n}\r\n\r\n/**\r\n * prompt for a date answer\r\n * \r\n * @param {DateResolution} resolution \r\n * @returns {Component}\r\n */\r\nfunction DateAnswer({resolution = DateResolution.DAY, answer, label, disabled, ...props}){\r\n\r\n    \r\n    //useFormContext();\r\n   \r\n    const fullLabel = (\r\n        <>\r\n            {label}\r\n            <AnswerLock answer={answer} />\r\n        </>\r\n    );\r\n\r\n    const isDisabled = disabled || answer.IsLocked;\r\n\r\n    if (!answer || answer.IsLoading === true)\r\n        return null; //don't prompt for answer until we can get proper defaults\r\n \r\n    if (resolution === DateResolution.MONTH)\r\n        return <MonthYearPicker name={answer.FieldKey} {...props} label={fullLabel} isDisabled={isDisabled} defaultValue={answer.Response} />\r\n\r\n    return <MaskedDatePicker name={answer.FieldKey} {...props} label={fullLabel} disabled={isDisabled} />                 \r\n}\r\n\r\nexport default DateAnswer;","import AnswerLock from \"./status/AnswerLock\";\r\nimport Input from \"../Input\";\r\nimport Telephone from \"../Telephone\";\r\nimport LargeTextEditor from \"../LargeTextEditor\";\r\n\r\n/**\r\n * \r\n */\r\nexport const TextVariant = {\r\n  ZIPCODE: 'ZIPCODE',\r\n  ADDRESS: 'ADDRESS',\r\n  TELEPHONE: 'TELEPHONE',\r\n  ESSAY: 'ESSAY'\r\n};\r\n\r\n/**\r\n * render a simple text field for the given answer\r\n * \r\n * @param {*} param0.answer api DTO description of the Text-type answer\r\n * @param {string} param0.inputLabel label to prompt student for info\r\n * @param {TextVariant} param0.varian  what, if any, structure of text are we prompting for. no variant means small text box as default\r\n * @returns {Component}\r\n */\r\nfunction TextAnswer({ answer, inputLabel, disabled, variant, ...props }) {\r\n\r\n  const isDisabled = disabled || answer.IsLocked;\r\n\r\n  const fullLabel = <>{inputLabel} <AnswerLock answer={answer} /></>;\r\n\r\n  let rules = null;\r\n  if (variant == TextVariant.ZIPCODE)\r\n    rules = {\r\n      pattern: {\r\n        value: /(^\\d{5}$)|(^\\d{9}$)|(^\\d{5}-\\d{4}$)/,\r\n        message: 'Invalid zipcode'\r\n      }\r\n    };\r\n\r\n  else if (variant == TextVariant.ADDRESS)\r\n    rules = {\r\n      pattern: {\r\n        value: /^[a-zA-Z0-9\\s-]+$/,\r\n        message: \"Invalid Address\"\r\n      }\r\n    };\r\n\r\n  else if (variant == TextVariant.TELEPHONE)\r\n    return <Telephone name={answer.FieldKey} inputLabel={fullLabel} {...props} disabled={isDisabled} />\r\n\r\n  else if (variant == TextVariant.ESSAY)\r\n    //indicate requirement of essays, but we always allow students to save as they go if they want.\r\n    return (\r\n      <>\r\n        {fullLabel}\r\n        {props.isRequired && <span className=\"required\">*</span> }        \r\n        <br />\r\n        <LargeTextEditor name={answer.FieldKey} {...props} variant=\"outlined\" isRequired={false} disabled={isDisabled}  /> \r\n      </>\r\n    );\r\n\r\n  return <Input\r\n    name={answer.FieldKey}\r\n    inputLabel={fullLabel}\r\n    placeholder={inputLabel}\r\n    disabled={isDisabled} \r\n    rules={rules}\r\n    {...props}\r\n  />\r\n}\r\n\r\nexport default TextAnswer;","import { actions } from './../../store';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport Input from './../../components/Input';\r\nimport { AnswerTypeNameProps, FIELDS, getField } from '../../store/form/fields';\r\nimport MaskedDatePicker from './../../components/MaskedDatePicker';\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport { Delete as DeleteIcon } from '@material-ui/icons';\r\nimport React, { useState, useEffect } from 'react';\r\nimport Button from '../../components/Button';\r\nimport RepeatableField, { repeatableFieldName } from '../../components/Utility/RepeatableField';\r\nimport { FieldSection, FieldRow, FieldSlot } from '../../components/Forms/FieldSection';\r\nimport HiddenInput from '../../components/Utility/HiddenInput';\r\nimport FormSection from '../../components/FormSection';\r\nimport { open } from \"../../store/snack/actions\";\r\nimport CertifyAnswer from '../../components/answer/CertifyAnswer';\r\nimport DateAnswer from '../../components/answer/DateAnswer';\r\nimport TextAnswer from '../../components/answer/TextAnswer';\r\n\r\nfunction EditBasicInfo({section, onChange, onCancel }) {\r\n  const formState = useSelector((state) => state.form);\r\n\r\n  const methods = useForm({\r\n    mode: 'onBlur'\r\n  });\r\n  const { getValues, setValue, handleSubmit, setError, clearErrors, watch, formState: localFormState } = methods;\r\n  const watchLastName = watch(FIELDS.LAST_NAME, false)\r\n  const watchBirthday = watch(FIELDS.BIRTHDATE, false)\r\n  const [loading, setLoading] = useState(false)\r\n\r\n  const dispatch = useDispatch();\r\n\r\n\r\n  const onSubmit = async (data, e) => {\r\n    // console.log(\"Data\", data)\r\n    try {\r\n      setLoading(true)\r\n\r\n      const result = await actions.submitForm(data, [],\r\n        [`${FIELDS.LAST_NAME}-confirm`,\r\n        `${FIELDS.BIRTHDATE}-confirm`,\r\n        //'PronounVerify',\r\n        'GenderVerify',\r\n      ]);\r\n\r\n\r\n      if(typeof onChange === 'function'){\r\n        onChange(true);\r\n      }\r\n\r\n    } catch(e) {\r\n      dispatch(open({\r\n        message: e.message,\r\n        severity: \"success\",\r\n      }))\r\n      console.error({e})\r\n    } finally {\r\n      setLoading(false)\r\n    }\r\n  };\r\n\r\n  const onError = (errors) => {\r\n    console.log(\"ERROR\", errors);\r\n    dispatch(\r\n      open({\r\n        message: \"This section is not complete. Be sure to resolve all errors above.\",\r\n        severity: \"success\",\r\n      }));\r\n  }\r\n\r\n  useEffect(() => {\r\n    window.addEventListener('beforeunload', alertUser)\r\n    return () => {\r\n      window.removeEventListener('beforeunload', alertUser)\r\n    }\r\n  }, []);\r\n\r\n  const validateConfirm = (value, compareValue) => {\r\n    // console.log(value, compareValue)\r\n    if (value === compareValue) {\r\n      return true\r\n    } else {\r\n      return \"Does not match\"\r\n    }\r\n  }\r\n\r\n  const validateDate = (value) => {\r\n    if (value !== 'Invalid date') {\r\n      return true\r\n    } else {\r\n      return \"Please enter a valid date\"\r\n    }\r\n  }\r\n\r\n  const [genderError, setGenderError] = useState(null)\r\n  const validateGender = (value) => {\r\n    const genderFields = [\r\n      FIELDS.GENDER__FEMALE,\r\n      FIELDS.GENDER__MALE,\r\n      FIELDS.GENDER__TRANSWOMAN,\r\n      FIELDS.GENDER__TRANSMAN,\r\n      FIELDS.GENDER__NON_BINARY,\r\n      FIELDS.GENDER__OTHER,\r\n      FIELDS.GENDER__NA\r\n    ]\r\n    const genderValues = genderFields.map(f => getValues(f))\r\n    const isGenderFilled = genderValues.some(gv => gv === 'True' || gv === true)\r\n    if (isGenderFilled === true) {\r\n      setGenderError(null)\r\n      return true\r\n    } else {\r\n      setGenderError(\"Please select at least one Gender Identity\")\r\n      return false\r\n    }\r\n  }\r\n\r\n  const handleBirthdayChange = (value) => {\r\n    setValue(FIELDS.BIRTHDATE, value)\r\n  }\r\n\r\n  const alertUser = e => {\r\n    e.preventDefault()\r\n    e.returnValue = ''\r\n  }\r\n\r\n  const get = (fieldKey) => formState.fields[fieldKey]?.value;\r\n\r\n\r\n  useEffect(() => {\r\n    setValue(`${FIELDS.LAST_NAME}-confirm`, formState.fields[FIELDS.LAST_NAME]?.value)\r\n  },\r\n  [formState.fields[FIELDS.LAST_NAME]?.value])\r\n\r\n  const [confirmBirthdate, setConfirmBirthdate] = useState(null)\r\n  useEffect(() => {\r\n    setValue(`${FIELDS.BIRTHDATE}-confirm`, formState.fields[FIELDS.BIRTHDATE]?.value)\r\n    setConfirmBirthdate(formState.fields[FIELDS.BIRTHDATE]?.value)\r\n  },\r\n  [formState.fields[FIELDS.BIRTHDATE]?.value])\r\n\r\n\r\n  return (\r\n    <FormProvider {...methods} >\r\n      <form onSubmit={handleSubmit(onSubmit, onError)} >\r\n        <FormSection \r\n          title='Basic Information'\r\n          isEditable={true} \r\n          onSaveClick={handleSubmit(onSubmit, onError)} \r\n          onCancelClick={onCancel} \r\n          loading={loading}>\r\n          <FieldSection title=\"Name\">\r\n            <FieldRow>\r\n              <FieldSlot >\r\n                <TextAnswer onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }} answer={section.getAnswerByField(FIELDS.FIRST_NAME)} inputLabel='Legal First Name' placeholder=\"Legal First Name\" variant='outlined' isRequired={true} />\r\n              </FieldSlot>\r\n              <FieldSlot>\r\n                <TextAnswer onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }} answer={section.getAnswerByField(FIELDS.MIDDLE_INITIALS)} inputLabel='Legal Middle Name/Initial' placeholder=\"Legal Middle Name Initial\" variant='outlined' />\r\n              </FieldSlot>\r\n              <FieldSlot>\r\n                <TextAnswer onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }} answer={section.getAnswerByField(FIELDS.LAST_NAME)} inputLabel='Legal Last Name' placeholder=\"Legal Last Name\" variant='outlined' isRequired={true} />\r\n              </FieldSlot>\r\n              <FieldSlot>\r\n                <Input onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }} name={`${FIELDS.LAST_NAME}-confirm`} inputLabel='Confirm Legal Last Name' placeholder=\"Legal Last Name\" variant='outlined' isRequired={true} rules={{ validate: value => validateConfirm(value, watchLastName) }}/>\r\n              </FieldSlot>\r\n            </FieldRow>\r\n          </FieldSection>\r\n\r\n          <FieldSection title={getField(FIELDS.OTHER_NAMES).question}>\r\n            <RepeatableField name={FIELDS.OTHER_NAMES}>\r\n              {(indices, handleAddIndex, handleDeleteIndex, previouslyDeletedIndices) => {\r\n                return (\r\n                  <>\r\n                    {indices.map((i,index) => {\r\n                      const [firstNameFieldName, middleNameFieldName, lastNameFieldName, id] = [\r\n                        repeatableFieldName(FIELDS.OTHER_NAMES, i, AnswerTypeNameProps.FIRST_NAME),\r\n                        repeatableFieldName(FIELDS.OTHER_NAMES, i, AnswerTypeNameProps.MIDDLE_NAME),\r\n                        repeatableFieldName(FIELDS.OTHER_NAMES, i, AnswerTypeNameProps.LAST_NAME),\r\n                        repeatableFieldName(FIELDS.OTHER_NAMES, i, AnswerTypeNameProps.ID)\r\n                      ]\r\n\r\n                      return (\r\n                        <FieldRow>\r\n                          <FieldSlot>\r\n                            <HiddenInput name={id}/>\r\n                            <Input\r\n                              name={firstNameFieldName}\r\n                              defaultValue={getValues(firstNameFieldName)}\r\n                              key={firstNameFieldName}\r\n                              inputLabel='First Name'\r\n                              variant='outlined'\r\n                              isRequired={true}\r\n                              onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                              />\r\n                          </FieldSlot>\r\n                          <FieldSlot>\r\n                            <Input\r\n                              name={middleNameFieldName}\r\n                              defaultValue={getValues(middleNameFieldName)}\r\n                              key={middleNameFieldName}\r\n                              inputLabel='Middle Name'\r\n                              variant='outlined'\r\n                              onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                              />\r\n                          </FieldSlot>\r\n                          <FieldSlot>\r\n                            <Input\r\n                              name={lastNameFieldName}\r\n                              defaultValue={getValues(lastNameFieldName)}\r\n                              key={lastNameFieldName}\r\n                              inputLabel='Last Name'\r\n                              variant='outlined'\r\n                              isRequired={true}\r\n                              onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                              />\r\n                            <DeleteIcon style={{ color: 'rgba(255, 0, 0, 0.5)' }}onClick={handleDeleteIndex(i)} />\r\n                          </FieldSlot>\r\n                        </FieldRow>\r\n                      )\r\n                    })}\r\n                    <FieldRow>\r\n                      <FieldSlot style={{ marginTop: '0.5rem' }}>\r\n                        <Button name='AddName' label='+ Add name' variant='text' style={{ textTransform: \"capitalize\" }} onClick={handleAddIndex} />\r\n                      </FieldSlot>\r\n                    </FieldRow>\r\n                  </>\r\n                )\r\n              }}\r\n            </RepeatableField>\r\n          </FieldSection>\r\n\r\n          <FieldSection title=\"Birthdate\">\r\n            <FieldRow>\r\n              <FieldSlot>\r\n                <DateAnswer \r\n                    rules={{ validate: value => validateDate(value) }}\r\n                    answer={section.getAnswerByField(FIELDS.BIRTHDATE)}                 \r\n                    minDate={new Date(\"01-01-1934\")} \r\n                    disableFuture={true} name={FIELDS.BIRTHDATE} \r\n                    label='Birthdate' isRequired={true} \r\n                    onChange={handleBirthdayChange} />\r\n              </FieldSlot>\r\n              <FieldSlot>\r\n                <MaskedDatePicker minDate={new Date(\"01-01-1934\")} disableFuture={true} name={`${FIELDS.BIRTHDATE}-confirm`} label='Confirm Birthdate' isRequired={true} rules={{ validate: value => validateConfirm(value, watchBirthday) }} defaultValue={confirmBirthdate} />\r\n              </FieldSlot>\r\n              <FieldSlot></FieldSlot>\r\n            </FieldRow>\r\n          </FieldSection>\r\n\r\n\r\n          <FieldSection title=\"Gender Identity\" isRequired>\r\n            <HiddenInput name=\"GenderVerify\" rules={{ validate: value => validateGender(value) }}></HiddenInput>\r\n            <FieldRow>\r\n              <FieldSlot>\r\n                { genderError && <div style={{ marginTop: '.75rem', color: 'red'}}>{genderError}</div> }\r\n\r\n                <CertifyAnswer label=\"Female\" answer={section.getAnswerByField(FIELDS.GENDER__FEMALE)} />\r\n                <CertifyAnswer label=\"Male\" answer={section.getAnswerByField(FIELDS.GENDER__MALE)} />\r\n                <CertifyAnswer label=\"Trans Female/Trans Woman\" answer={section.getAnswerByField(FIELDS.GENDER__TRANSWOMAN)} />\r\n                <CertifyAnswer label=\"Trans Male/Trans Man\" answer={section.getAnswerByField(FIELDS.GENDER__TRANSMAN)} />\r\n                <CertifyAnswer label=\"Non-binary/Genderqueer/Gender non-conforming\" answer={section.getAnswerByField(FIELDS.GENDER__NON_BINARY)} />\r\n                <CertifyAnswer label=\"Different Identity\" answer={section.getAnswerByField(FIELDS.GENDER__OTHER)} />\r\n                <CertifyAnswer label=\"Choose not to say\" answer={section.getAnswerByField(FIELDS.GENDER__NA)} />\r\n               \r\n              </FieldSlot>\r\n            </FieldRow>\r\n          </FieldSection>\r\n\r\n          <FieldSection title=\"Pronouns\" isRequired={false}>\r\n\r\n          <HiddenInput name=\"PronounVerify\"/>\r\n            <FieldRow>\r\n              <FieldSlot>\r\n                <CertifyAnswer label=\"She/Her/Hers\" answer={section.getAnswerByField(FIELDS.PRONOUNS__FEMALE)} />\r\n                <CertifyAnswer label=\"He/Him/His\" answer={section.getAnswerByField(FIELDS.PRONOUNS__MALE)} />\r\n                <CertifyAnswer label=\"They/Them/Their\" answer={section.getAnswerByField(FIELDS.PRONOUNS__NEUTRAL)} />               \r\n              </FieldSlot>\r\n              <TextAnswer onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }} answer={section.getAnswerByField(FIELDS.PRONOUNS__OTHER)} \r\n                    inputLabel='Other Pronouns' placeholder=\"Enter other preferred pronouns\" variant='outlined'/>\r\n            </FieldRow>\r\n          </FieldSection>\r\n\r\n          <FieldSection title=\"Identity Certification\">\r\n            <FieldRow>\r\n              {/* Note: container propr will enable flexbox, so we can use alignItems */}\r\n              <FieldSlot>\r\n                <CertifyAnswer answer={section.getAnswerByField(FIELDS.CERTIFY_IDENTITY)} isRequired={true} label=\"I certify that I am the person named above.\" />\r\n              </FieldSlot>\r\n            </FieldRow>\r\n          </FieldSection>\r\n   \r\n        </FormSection>\r\n      </form>\r\n    </FormProvider>\r\n  );\r\n}\r\n\r\nexport default EditBasicInfo;\r\n","import React, { useEffect } from 'react';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport InputDecorator from './InputDecorator';\r\nimport { makeStyles, useTheme } from '@material-ui/core/styles';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport { get } from 'lodash';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n    root: {\r\n    },\r\n    input: (props) => {\r\n    }\r\n}));\r\n\r\nfunction DropdownSearch({ name, rules, isRequired = false, fontSize = '12px', standardVariant = false, description, label = '', listItems, variant = 'outlined', placeholder, inputLabel, style, value, includeUnlisted, ...props }) {\r\n    \r\n    const classes = useStyles({\r\n        standardVariant\r\n    });\r\n    const theme = useTheme();\r\n    const methods = useFormContext({ mode: 'onBlur' });\r\n    const { errors } = methods;\r\n    const error = get(errors, name);\r\n\r\n    const { setValue } = useFormContext({ mode: 'onBlur' });\r\n\r\n    // Autocomplete requires a value of type { label: '...', value: '...' }, the backend only returns value, so we need to add the missing label to the object for it to be selected in the dropdown\r\n    useEffect(() => {\r\n        if ((typeof value === 'object' && value && !value.label) || (includeUnlisted && value === null)) {\r\n            const resolvedValueDict = listItems.find((item) => item.value == ((includeUnlisted && value === null) ? value : value.value));\r\n            if (resolvedValueDict && resolvedValueDict.label) {\r\n                try {\r\n                    setValue(name, resolvedValueDict);\r\n                } catch (err) {\r\n                    if (typeof props.onChange === 'function') {\r\n                        props.onChange(resolvedValueDict);\r\n                    }\r\n                    // suppress - as error only thrown when useController is set to false - i.e not controlled with react hook form \r\n                }\r\n            }\r\n        }\r\n    }, [value, listItems]);\r\n\r\n\r\n    return (\r\n\r\n        <div className={classes.root} style={{ marginBottom: !!error && '.5rem' }}>\r\n            <InputLabel>\r\n                {inputLabel}\r\n                {\r\n                    isRequired && (\r\n                        <span style={{ color: 'red', backgroundColor: 'transparent' }}> * </span>\r\n                    )\r\n                }\r\n            </InputLabel>\r\n            <Autocomplete\r\n                {...props}\r\n                variant=\"standard\"\r\n                fullWidth={true}\r\n                className={`${classes.input} field`}\r\n                options={listItems}\r\n                getOptionLabel={(option) => option?.label || ''}\r\n                getOptionSelected={(option) => {\r\n                    const isMatch = option.value == value?.value;\r\n                    //// console.log(`Dropdown comparison ${option.value} == ${value?.value}`,isMatch)\r\n                    return isMatch;\r\n                }}\r\n                value={value}\r\n                renderInput={(params) => (\r\n                    <TextField\r\n                        {...params}\r\n                        placeholder={placeholder}\r\n                        label={label}\r\n                        aria-label={description}\r\n                        variant={!standardVariant ? variant : 'standard'}\r\n                        style={style}\r\n                        error={!!error}\r\n                    />\r\n                )}\r\n                blurOnSelect={true}\r\n                onChange={(_, data) => props.onChange(data)}\r\n            />\r\n            {\r\n                error?.message && (\r\n                    <div style={{ color: 'red', fontSize: '0.875rem' }}>\r\n                        {error?.message}\r\n                    </div>\r\n                )\r\n            }\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default InputDecorator(DropdownSearch, null, { isValueObject: true }); ","import React from 'react';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport InputDecorator from './InputDecorator';\r\nimport { Controller } from \"react-hook-form\";\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Input from './Input';\r\n\r\n\r\nconst zipRules= {\r\n  pattern: {\r\n    value: /(^\\d{5}$)|(^\\d{9}$)|(^\\d{5}-\\d{4}$)/ ,\r\n    message: 'Invalid zipcode'\r\n  }\r\n};\r\n\r\n\r\nexport default ({ ...props }) => <Input onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }} rules={zipRules} {...props}/>;\r\n","import React from 'react';\r\nimport Input from './Input';\r\n\r\nconst addressRules = {\r\n  pattern: {\r\n    value: /^[a-zA-Z0-9\\s-]+$/,\r\n    message: \"Invalid Address\"\r\n  }\r\n};\r\n\r\nexport default ({ ...props }) => <Input onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }} rules={addressRules} {...props}/>;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport { AnswerTypeAddressProps } from '../../store/form/fields';\r\nimport { compositeFieldname } from '../../utils';\r\nimport apiClient from '../../utils/API';\r\n\r\n/**\r\n * \r\n * @param {*} param0 \r\n * @returns \r\n */\r\nconst AddressPicker = ({ name, only = '', children }) => {\r\n\r\n    const methods = useFormContext({ mode: 'onBlur' });\r\n    const { watch } = methods;\r\n\r\n    const [statesOriginal, setStatesOriginal] = useState([]);\r\n    const states = statesOriginal.map(state => ({\r\n        label: state.Name,\r\n        value: Number(state.Id),\r\n        stateCode: state.StateCode,\r\n    }));\r\n\r\n    const [counties, setCounties] = useState([]);\r\n    const [cities, setCities] = useState([]);\r\n    const noCounties = (counties.length === 0);\r\n\r\n\r\n    const state = watch(compositeFieldname(name,AnswerTypeAddressProps.STATE));\r\n    const county = watch(compositeFieldname(name,AnswerTypeAddressProps.COUNTY));\r\n    const city = watch(compositeFieldname(name,AnswerTypeAddressProps.CITY));\r\n    const zip = watch(compositeFieldname(name,AnswerTypeAddressProps.ZIP));\r\n    const streetAddress = watch(compositeFieldname(name,AnswerTypeAddressProps.ADDRESS));\r\n\r\n    const getValue = (value) => {\r\n        if(typeof value === 'object' && value) return value?.value;\r\n        return value;\r\n    }\r\n\r\n    useEffect(()=>{\r\n        if(only && only !=='state') return;\r\n\r\n        (async ()=>{           \r\n            try{\r\n                const states = await apiClient.get('/state-and-territory/states-and-territories');\r\n                states.unshift({\r\n                    \"Id\": -1,\r\n                    \"StateCode\": null,\r\n                    \"AnsiCode\": null,\r\n                    \"Abbreviation\": null,\r\n                    \"Name\": \"Unlisted/Foreign Country\"\r\n                })\r\n                setStatesOriginal(states)            \r\n            } catch(err){\r\n                console.error(err);\r\n            }\r\n        })();\r\n    },[]);\r\n\r\n    useEffect(()=> {\r\n        if (only && only !=='county') return;\r\n\r\n        if (!state) return;\r\n\r\n        (async ()=>{\r\n            \r\n            try {                           \r\n                const counties = await apiClient.get('/county/counties', { \"StateId\": state.value });\r\n                                              \r\n                setCounties(counties.map(county => {\r\n                    return {\r\n                        label: county.CountyName,\r\n                        value: Number(county.Id)\r\n                    }\r\n                }))\r\n\r\n                // -1 lets us indicate unlisted is selected\r\n                if(state?.value == null) {\r\n                    state.value = -1\r\n                }\r\n                // -1 lets us indicate unlisted is selected\r\n                if (city && city?.value == null) {\r\n                    city.value = -1\r\n                }\r\n\r\n            } catch(err){\r\n                console.error(err);\r\n            }\r\n        })();\r\n    },[state])\r\n\r\n    useEffect(()=>{\r\n        if (only && only !=='city') return;\r\n\r\n        if (!county && !noCounties) return;\r\n\r\n        (async ()=>{\r\n           \r\n            try {\r\n           \r\n                let cities = []\r\n                if (noCounties) {\r\n                    const stateCode = getValue(state);\r\n                    const chosenState = statesOriginal.find(state => parseInt(state.Id) === stateCode)\r\n              \r\n                    cities = await apiClient.get(`/city/search?lookup.stateAbbreviation=${chosenState.Abbreviation}`)\r\n                } else {\r\n                    cities = await apiClient.get(`/city/cities/${getValue(county)}`);\r\n                }\r\n\r\n                cities.unshift({\r\n                    \"Id\": -1,\r\n                    \"Name\": \"Unlisted City\",\r\n                    \"State\": null\r\n                })\r\n                setCities(cities.map(city => {\r\n                    return {\r\n                        label: city.Name,\r\n                        value: Number(city.Id)\r\n                    }\r\n                }))\r\n            } catch(err){\r\n                console.error(err);\r\n            }\r\n        })();\r\n    },[county, state]);\r\n\r\n    return (\r\n        <>\r\n            {children({\r\n                states,\r\n                counties,\r\n                cities,\r\n                streetAddress,\r\n                state,\r\n                county,\r\n                city,\r\n                zip,\r\n                noCounties,\r\n            })}\r\n        </>\r\n    );\r\n}\r\n\r\nexport default AddressPicker;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { actions } from './../../store';\r\nimport { useSelector } from 'react-redux';\r\nimport Input from './../../components/Input';\r\nimport Checkbox from './../../components/Checkbox';\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport Email from './../../components/Email';\r\nimport Telephone from './../../components/Telephone';\r\nimport DropdownSearch from './../../components/DropdownSearch';\r\nimport ZipCode from './../../components/ZipCodeInput';\r\nimport AddressInput from './../../components/AddressInput';\r\nimport { FieldSection, FieldRow, FieldSlot } from \"../../components/Forms/FieldSection\";\r\nimport {FIELDS, AnswerTypeAddressProps, AnswerTypeContactProps, ContactFieldType} from \"../../store/form/fields\";\r\nimport AddressPicker from '../../components/DataDriven/AddressPicker';\r\nimport {compositeFieldname, getReduxField} from \"../../utils\";\r\nimport FormSection from '../../components/FormSection';\r\nimport auth from '../../auth'\r\nimport { useDispatch } from \"react-redux\";\r\nimport { open } from \"../../store/snack/actions\";\r\nimport HiddenInput from \"../../components/Utility/HiddenInput\";\r\nimport _get from 'lodash/get'\r\nimport Dropdown from '../../components/Dropdown';\r\nimport apiClient from \"../../utils/API\";\r\n\r\n\r\nfunction EditContactInfo({ onChange, onCancel }) {\r\n  const reduxFormState = useSelector((state) => state.form);\r\n  const isFetchingData = reduxFormState.isLoading;\r\n    const methods = useForm({\r\n      mode: 'onBlur'\r\n    });\r\n\r\n    const [email, setEmail] = useState('');\r\n    const { errors, handleSubmit, handleChange, watch } = methods;\r\n\r\n    const [loading, setLoading] = useState(false)\r\n    const dispatch = useDispatch();\r\n\r\n  const onSubmit = async (data, e) => {\r\n      try {\r\n        setLoading(true)\r\n        \r\n\r\n        // No different Mailing Address, then clear Mailing address if it already exists.\r\n        if (!differentMailingAddress) {\r\n          data.MAILING_ADDRESS = null;\r\n        }\r\n\r\n      // #4230: Split the Zip Code into Zip and ZipPlus4 when it's length is more than 5.\r\n      if(data.PERMANENT_ADDRESS?.Zip)\r\n      {\r\n          let zipCode = data.PERMANENT_ADDRESS.Zip;\r\n          if (zipCode.length > 5){\r\n            data.PERMANENT_ADDRESS.Zip = zipCode.substr(0, 5);\r\n            data.PERMANENT_ADDRESS.ZipPlus4 = zipCode.substr(zipCode.length-4, 4);\r\n          }\r\n      }\r\n      if(data.PRIMARY_CONTACT?.Zip)\r\n      {\r\n          let zipCode = data.PRIMARY_CONTACT.Zip;\r\n          if (zipCode.length > 5){\r\n            data.PRIMARY_CONTACT.Zip = zipCode.substr(0, 5);\r\n            data.PRIMARY_CONTACT.ZipPlus4 = zipCode.substr(zipCode.length-4, 4);\r\n          }\r\n      }\r\n      if(data.MAILING_ADDRESS?.Zip)\r\n      {\r\n          let zipCode = data.MAILING_ADDRESS.Zip;\r\n          if (zipCode.length > 5){\r\n            data.MAILING_ADDRESS.Zip = zipCode.substr(0, 5);\r\n            data.MAILING_ADDRESS.ZipPlus4 = zipCode.substr(zipCode.length-4, 4);\r\n          }\r\n      }\r\n        const result = await actions.submitForm(data,[],['PHONE_VALIDATION']);\r\n        // console.log(data, e);\r\n        if(typeof onChange === 'function'){\r\n          onChange(true);\r\n        }\r\n      } catch(e) {\r\n        dispatch(open({\r\n          message: e.message,\r\n          severity: \"success\",\r\n        }))\r\n        console.error({e})\r\n      } finally {\r\n        setLoading(false)\r\n      }\r\n    };\r\n\r\n    const onError = (errors, e) => {\r\n      console.log(errors, e);\r\n      dispatch(open({\r\n        message: 'Some fields are empty or missing. Please scroll up and look for instructions in red text.',\r\n        severity: \"success\",\r\n      }))\r\n    }\r\n\r\n    const handleChangeEmail = (e) => {\r\n      e.preventDefault();\r\n      // console.log(auth);\r\n      auth.changeEmail();\r\n    }\r\n    const ChangeEmailLink = (<a href=\"#\" className='helperTextLink' onClick={handleChangeEmail}>Change Email Address</a>);\r\n\r\n    useEffect(()=>{\r\n      // this method may be async in the future to get from graph api, as getting from token relies on having the email user claim enabled in b2c.\r\n      const userEmail = auth.getUserEmail();\r\n      setEmail(userEmail);\r\n    },[]);\r\n\r\n    const [relationshipItems, setRelationshipItems] = useState([]);\r\n    const [relationshipOtherId, setRelationshipOtherId] = useState(null);\r\n    useEffect(async () => {       \r\n        let relationshipTypes = await apiClient.get(`relationship-type/relationship-types`);\r\n        relationshipTypes = relationshipTypes.filter(r => r.IsObsolete !== true); //.sort((a,b) => a.IsOther ? b.IsOther ? 0 : 1 : 0 );\r\n        var relationshipItems = relationshipTypes.map(r => ({                    \r\n            label: r.Description,\r\n            value: '' + r.Id\r\n        }));    \r\n        relationshipItems.unshift({label: ' -- ', value: ''});\r\n        var otherId = '' + relationshipTypes.find(x => x.IsOther)?.Id;\r\n        setRelationshipOtherId(otherId);\r\n        setRelationshipItems(relationshipItems);\r\n    },[]);\r\n\r\n    const watchAlternatePhone = watch(FIELDS.ALTERNATE_PHONE)\r\n    const watchPrimaryPhone = watch(FIELDS.HOME_PHONE)\r\n\r\n    const validatePhoneNumber = (v) => {\r\n      // console.log(\"Phones\", watchAlternatePhone, watchPrimaryPhone, !watchAlternatePhone && !watchPrimaryPhone)\r\n      if (!watchAlternatePhone && !watchPrimaryPhone) {\r\n          return \"At least one number is required\"\r\n      } else {\r\n        return true\r\n      }\r\n    }\r\n\r\n    const phoneError = _get(errors, 'PHONE_VALIDATION.message')\r\n\r\n    const verifyAdditionalEmail = (v) => {\r\n      if (v === email) {\r\n        return \"You cannot use the same email address\"\r\n      } else {\r\n        return true\r\n      }\r\n    }\r\n    const poBoxRules = {\r\n      pattern: {\r\n        value: /^(?!.*(?:(.*((p|post)[-.\\s]*(o|off|office)[-.\\s]*(box|bin)[-.\\s]*)|.*((p |post)[-.\\s]*(box|bin)[-.\\s]*)))).*$/i,\r\n        message: \"invalid input\"\r\n      }\r\n    };\r\n\r\n    const get = (fieldKey) => reduxFormState.fields[fieldKey]?.value;\r\n    const [differentMailingAddress, setDifferentMailingAddress] = useState(getReduxField(compositeFieldname(FIELDS.MAILING_ADDRESS,AnswerTypeAddressProps.ADDRESS)) !== null);\r\n\r\n    const toggleMailingAddress = () => {\r\n      setDifferentMailingAddress(!differentMailingAddress)\r\n    }\r\n\r\n    const relationshipTypeWatch = watch(compositeFieldname(FIELDS.PRIMARY_CONTACT,AnswerTypeContactProps.RELATION));\r\n\r\n    return (\r\n      <FormProvider {...methods} >\r\n        <form onSubmit={handleSubmit(onSubmit, onError)} >\r\n        <FormSection title='Contact Information' isEditable={true} onSaveClick={handleSubmit(onSubmit, onError)} onCancelClick={onCancel} loading={loading}>\r\n\r\n          <FieldSection title=\"Email\">\r\n              <FieldRow>\r\n                <FieldSlot>\r\n                  <Email\r\n                    isRequired={true}\r\n                    useController={false}\r\n                    inputLabel='Email'\r\n                    placeholder='Email'\r\n                    HelperTextComponent={ChangeEmailLink}\r\n                    disabled={false}\r\n                    value={email}\r\n                  />\r\n                </FieldSlot>\r\n              </FieldRow>\r\n            </FieldSection>\r\n\r\n          <FieldSection title=\"Phone Number (one phone number required)\" isRequired>\r\n            { phoneError &&\r\n              <FieldRow>\r\n                <FieldSlot>\r\n                  <strong style={{ color: 'red' }}>At least one number is required</strong>\r\n                </FieldSlot>\r\n              </FieldRow>\r\n            }\r\n            <FieldRow>\r\n              <FieldSlot>\r\n                <HiddenInput name=\"PHONE_VALIDATION\" rules={{ validate: value => validatePhoneNumber(value) }} />\r\n                <Telephone name={FIELDS.ALTERNATE_PHONE} inputLabel='Mobile Phone Number' placeholder='Mobile Phone Number' variant='outlined' />\r\n                <Checkbox name={FIELDS.PRIMARY_PHONE_CELL_FLAG} label=\"Text about updates\" />\r\n              </FieldSlot>\r\n              <FieldSlot>\r\n                <Telephone name={FIELDS.HOME_PHONE} inputLabel='Home Phone Number' placeholder='Home Phone Number' variant='outlined' />\r\n              </FieldSlot>\r\n            </FieldRow>\r\n          </FieldSection>\r\n\r\n          <FieldSection>\r\n            <FieldRow>\r\n              <FieldSlot md={6}>\r\n                <AddressPicker name={FIELDS.PERMANENT_ADDRESS}>\r\n                  {({\r\n                    states,\r\n                    counties,\r\n                    cities,\r\n                    state,\r\n                    county,\r\n                    city,\r\n                    noCounties\r\n                  }) => {\r\n                    return (\r\n                      <FieldSection title=\"Permanent Address\" withDivider={false} >\r\n                        <FieldRow>\r\n                          <FieldSlot>\r\n                            <AddressInput\r\n                              name={compositeFieldname(FIELDS.PERMANENT_ADDRESS,AnswerTypeAddressProps.ADDRESS)}\r\n                              inputLabel='Street Address'\r\n                              placeholder='Street Address'\r\n                              variant='outlined'\r\n                              isRequired={true}\r\n                              rules={poBoxRules}\r\n                            />\r\n                          </FieldSlot>\r\n                        </FieldRow>\r\n                        <h4 className='heading heading--h5'>State/Province</h4>\r\n                          <FieldRow>\r\n                            <FieldSlot>\r\n                              <DropdownSearch\r\n                                onKeyPress={(e) => {\r\n                                  e.key === 'Enter' && e.preventDefault();\r\n                                }}\r\n                                isRequired={true}\r\n                                inputLabel='State'\r\n                                placeholder='State'\r\n                                name={compositeFieldname(FIELDS.PERMANENT_ADDRESS, AnswerTypeAddressProps.STATE)}\r\n                                listItems={states}\r\n                                variant='outlined'/>\r\n                            </FieldSlot>\r\n                          </FieldRow>\r\n                        { state?.value == -1 &&\r\n                          <div style={{\r\n                            backgroundColor: 'lightgrey',\r\n                            padding: '1rem'\r\n                          }}>\r\n                            <label><strong>Unlisted State or Foreign Country?</strong></label>\r\n                            <Input name={compositeFieldname(FIELDS.PERMANENT_ADDRESS,AnswerTypeAddressProps.UNLISTED_STATE_NAME)} placeholder='Enter the name of your unlisted state/province here.' isRequired={true} ></Input>\r\n                        </div>\r\n                        }\r\n                        { state && !noCounties &&\r\n                          <FieldRow>\r\n                            <FieldSlot>\r\n                              <DropdownSearch\r\n                                onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                                isRequired={true}\r\n                                inputLabel='County'\r\n                                placeholder='County'\r\n                                name={compositeFieldname(FIELDS.PERMANENT_ADDRESS,AnswerTypeAddressProps.COUNTY)}\r\n                                listItems={counties}\r\n                                variant='outlined'\r\n                              />\r\n                            </FieldSlot>\r\n                          </FieldRow>\r\n                        }\r\n                        { (county || noCounties) &&\r\n                          <FieldRow>\r\n                            <FieldSlot>\r\n                              <DropdownSearch\r\n                                onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                                isRequired={true}\r\n                                inputLabel='City'\r\n                                placeholder='City'\r\n                                name={compositeFieldname(FIELDS.PERMANENT_ADDRESS,AnswerTypeAddressProps.CITY)}\r\n                                listItems={cities}\r\n                                variant='outlined' />\r\n                            </FieldSlot>\r\n                          </FieldRow>\r\n                        }\r\n                        {city?.value == -1 &&\r\n                          <div\r\n                            style={{\r\n                              backgroundColor: 'lightgrey',\r\n                              padding: '1rem'\r\n                            }}>\r\n                            <label><strong>Unlisted City?</strong></label>\r\n                            <Input\r\n                              name={compositeFieldname(FIELDS.PERMANENT_ADDRESS, AnswerTypeAddressProps.UNLISTED_CITY_NAME)}\r\n                              isRequired={true}\r\n                              placeholder='Enter the name of your unlisted city here.'></Input>\r\n                          </div>\r\n                        }\r\n                        { city &&\r\n                          <FieldRow>\r\n                            <FieldSlot>\r\n                              <ZipCode\r\n                                isRequired={state?.value !== -1}\r\n                                name={compositeFieldname(FIELDS.PERMANENT_ADDRESS,AnswerTypeAddressProps.ZIP)}\r\n                                inputLabel='Zip Code'\r\n                                placeholder='Zip Code'\r\n                                variant='outlined' />\r\n                            </FieldSlot>\r\n                          </FieldRow>\r\n                        }\r\n                        <FieldRow style={{marginTop: '4rem'}}>\r\n                          <FieldSlot>\r\n                            <Checkbox name='differentMailingAddress' value={differentMailingAddress} onChange={toggleMailingAddress} label=\"Different Mailing Address\" />\r\n                          </FieldSlot>\r\n                        </FieldRow>\r\n                      </FieldSection>\r\n                    )\r\n                  }}\r\n                </AddressPicker>\r\n              </FieldSlot>\r\n\r\n              {/* Mailing Address Section*/}\r\n              { differentMailingAddress &&\r\n              <FieldSlot>\r\n                <br/>\r\n                <AddressPicker name={FIELDS.MAILING_ADDRESS}>\r\n                  {({\r\n                    states,\r\n                    counties,\r\n                    cities,\r\n                    state,\r\n                    county,\r\n                    city,\r\n                    noCounties\r\n                  }) => {\r\n                    return (\r\n                      <FieldSection title=\"Mailing Address\" withDivider={false} >\r\n                        <FieldRow>\r\n                          <FieldSlot>\r\n                            <AddressInput\r\n                              name={compositeFieldname(FIELDS.MAILING_ADDRESS,AnswerTypeAddressProps.ADDRESS)}\r\n                              inputLabel='Street Address'\r\n                              placeholder='Street Address'\r\n                              variant='outlined'\r\n                              isRequired={differentMailingAddress}\r\n                              rules={poBoxRules}\r\n                            />\r\n                          </FieldSlot>\r\n                        </FieldRow>\r\n                        <h4 className='heading heading--h5'>State/Province</h4>\r\n                        <FieldRow>\r\n                            <FieldSlot>\r\n                              <DropdownSearch\r\n                                onKeyPress={(e) => {\r\n                                  e.key === 'Enter' && e.preventDefault();\r\n                                }}\r\n                                isRequired={differentMailingAddress}\r\n                                name={compositeFieldname(FIELDS.MAILING_ADDRESS, AnswerTypeAddressProps.STATE)}\r\n                                inputLabel='State'\r\n                                placeholder='State'\r\n                                listItems={states}\r\n                                variant='outlined'                                \r\n                              />\r\n                            </FieldSlot>\r\n                          { state?.value == -1 &&\r\n                            <div style={{\r\n                              backgroundColor: 'lightgrey',\r\n                              padding: '1rem'\r\n                            }}>\r\n                              <label><strong>Unlisted State or Foreign Country?</strong></label>\r\n                              <Input isRequired={differentMailingAddress} name={compositeFieldname(FIELDS.MAILING_ADDRESS,AnswerTypeAddressProps.UNLISTED_STATE_NAME)} placeholder='Enter the name of your unlisted state/province here.'></Input>\r\n                            </div>\r\n                          }\r\n                        </FieldRow>\r\n                        { state && !noCounties &&\r\n                          <FieldRow>\r\n                            <FieldSlot>\r\n                              <DropdownSearch\r\n                                onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                                isRequired={differentMailingAddress}\r\n                                name={compositeFieldname(FIELDS.MAILING_ADDRESS,AnswerTypeAddressProps.COUNTY)}\r\n                                inputLabel='County'\r\n                                placeholder='County'\r\n                                listItems={counties}\r\n                                variant='outlined'                                \r\n                              />\r\n                            </FieldSlot>\r\n                          </FieldRow>\r\n                        }\r\n                        { (county || noCounties) &&\r\n                          <FieldRow>\r\n                            <FieldSlot>\r\n                              <DropdownSearch\r\n                                onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                                isRequired={differentMailingAddress}\r\n                                name={compositeFieldname(FIELDS.MAILING_ADDRESS,AnswerTypeAddressProps.CITY)}\r\n                                inputLabel='City'\r\n                                placeholder='City'\r\n                                listItems={cities}\r\n                                variant='outlined'                                \r\n                              />\r\n                            </FieldSlot>\r\n                          </FieldRow>\r\n                        }\r\n                        {city?.value == -1 &&\r\n                          <div\r\n                            style={{\r\n                              backgroundColor: 'lightgrey',\r\n                              padding: '1rem'\r\n                            }}>\r\n                            <label><strong>Unlisted City?</strong></label>\r\n                            <Input\r\n                              name={compositeFieldname(FIELDS.MAILING_ADDRESS, AnswerTypeAddressProps.UNLISTED_CITY_NAME)}\r\n                              isRequired={differentMailingAddress}\r\n                              placeholder='Enter the name of your unlisted city here.'></Input>\r\n                          </div>\r\n                        }\r\n                        { city &&\r\n                          <FieldRow>\r\n                            <FieldSlot>\r\n                              <ZipCode\r\n                                name={compositeFieldname(FIELDS.MAILING_ADDRESS,AnswerTypeAddressProps.ZIP)}\r\n                                inputLabel= 'Zip Code'\r\n                                placeholder='Zip Code'\r\n                                variant='outlined'\r\n                                isRequired={state?.value !== -1}\r\n                              />\r\n                            </FieldSlot>\r\n                          </FieldRow>\r\n                        }\r\n                      </FieldSection>\r\n                    )\r\n                  }}\r\n                </AddressPicker>\r\n              </FieldSlot>\r\n              }\r\n            </FieldRow>\r\n          </FieldSection>\r\n\r\n          <FieldSection title=\"Additional Contact\" >\r\n            <FieldRow>\r\n              <FieldSlot>          \r\n                <Dropdown name={compositeFieldname(FIELDS.PRIMARY_CONTACT,AnswerTypeContactProps.RELATION)} label=\"Relationship To Applicant\" listItems={relationshipItems}/>        \r\n            </FieldSlot>\r\n              { relationshipTypeWatch === relationshipOtherId && (\r\n                <FieldSlot>\r\n                  <Input onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }} \r\n                    name={compositeFieldname(FIELDS.PRIMARY_CONTACT,AnswerTypeContactProps.RELATION_UNLISTED)} inputLabel='Specify Relationship' placeholder='Specify Relationship' \r\n                    variant='outlined' />\r\n                </FieldSlot>\r\n              ) || null\r\n              }\r\n            </FieldRow>\r\n            <FieldRow>\r\n              <FieldSlot>\r\n                <Input onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }} name={compositeFieldname(FIELDS.PRIMARY_CONTACT,AnswerTypeContactProps.FIRST_NAME)} inputLabel='First Name' placeholder='First Name' variant='outlined' />\r\n              </FieldSlot>\r\n              <FieldSlot>\r\n                <Input onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }} name={compositeFieldname(FIELDS.PRIMARY_CONTACT,AnswerTypeContactProps.LAST_NAME)} inputLabel='Last Name' placeholder='Last Name' variant='outlined' />\r\n              </FieldSlot>\r\n            </FieldRow>\r\n            <FieldRow>\r\n              <FieldSlot md={6}>\r\n                <Email addrules={{ validate: value => verifyAdditionalEmail(value) }} isRequired={false} name={compositeFieldname(FIELDS.PRIMARY_CONTACT,AnswerTypeContactProps.EMAIL)} inputLabel='Email' placeholder='Email' variant='outlined' />\r\n              </FieldSlot>\r\n            </FieldRow>\r\n\r\n            <AddressPicker name={FIELDS.PRIMARY_CONTACT}>\r\n              {({\r\n                states,\r\n                counties,\r\n                cities,\r\n                state,\r\n                county,\r\n                city,\r\n                noCounties\r\n              }) => {\r\n                return (\r\n                  <>\r\n                    <FieldRow>\r\n                      <FieldSlot md={6}>\r\n                        <Input\r\n                          onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                          name={compositeFieldname(FIELDS.PRIMARY_CONTACT,AnswerTypeContactProps.ADDRESS)}\r\n                          inputLabel='Street Address'\r\n                          placeholder='Street Address'\r\n                          variant='outlined'\r\n                          \r\n                        />\r\n                      </FieldSlot>\r\n                    </FieldRow>\r\n                    <FieldRow>\r\n                        <FieldSlot md={6}>\r\n                          <DropdownSearch\r\n                            onKeyPress={(e) => {\r\n                              e.key === 'Enter' && e.preventDefault();\r\n                            }}\r\n                            name={compositeFieldname(FIELDS.PRIMARY_CONTACT, AnswerTypeContactProps.STATE)}\r\n                            inputLabel='State'\r\n                            placeholder='State'\r\n                            listItems={states}\r\n                            variant='outlined'\r\n                          />\r\n                        </FieldSlot>\r\n                      { state?.value == -1 &&\r\n                        <div style={{\r\n                          backgroundColor: 'lightgrey',\r\n                          padding: '1rem'\r\n                        }}>\r\n                          <label><strong>Unlisted State or Foreign Country?</strong></label>\r\n                          <Input name={compositeFieldname(FIELDS.PRIMARY_CONTACT,AnswerTypeAddressProps.UNLISTED_STATE_NAME)} \r\n                            placeholder='Enter the name of your unlisted state/province here.'></Input>\r\n                        </div>\r\n                      }\r\n                    </FieldRow>\r\n                    { state && !noCounties &&\r\n                      <FieldRow>\r\n                        <FieldSlot md={6}>\r\n                          <DropdownSearch\r\n                            onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                       \r\n                            name={compositeFieldname(FIELDS.PRIMARY_CONTACT,AnswerTypeContactProps.COUNTY)}\r\n                            inputLabel='County'\r\n                            placeholder='County'\r\n                            listItems={counties}\r\n                            variant='outlined'\r\n                          />\r\n                        </FieldSlot>\r\n                      </FieldRow>\r\n                    }\r\n                    { (county || noCounties) &&\r\n                      <FieldRow>\r\n                        <FieldSlot md={6}>\r\n                          <DropdownSearch\r\n                            onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}           \r\n                            name={compositeFieldname(FIELDS.PRIMARY_CONTACT,AnswerTypeContactProps.CITY)}\r\n                            inputLabel='City'\r\n                            placeholder='City'\r\n                            listItems={cities}\r\n                            variant='outlined'\r\n                          />\r\n                        </FieldSlot>\r\n                      </FieldRow>\r\n                    }\r\n                    {city?.value == -1 &&\r\n                      <div\r\n                        style={{\r\n                          backgroundColor: 'lightgrey',\r\n                          padding: '1rem'\r\n                        }}>\r\n                        <label><strong>Unlisted City?</strong></label>\r\n                        <Input\r\n                          name={compositeFieldname(FIELDS.PRIMARY_CONTACT, AnswerTypeAddressProps.UNLISTED_CITY_NAME)}\r\n                          placeholder='Enter the name of your unlisted city here.'></Input>\r\n                      </div>\r\n                    }\r\n                    { city &&\r\n                      <FieldRow>\r\n                        <FieldSlot md={6}>\r\n                          <ZipCode\r\n                            name={compositeFieldname(FIELDS.PRIMARY_CONTACT,AnswerTypeContactProps.ZIP)}\r\n                            inputLabel='Zip Code'\r\n                            placeholder='Zip Code'\r\n                            variant='outlined'\r\n                          />\r\n                        </FieldSlot>\r\n                      </FieldRow>\r\n                    }\r\n                  </>\r\n                )\r\n              }}\r\n            </AddressPicker>\r\n\r\n            <FieldRow>\r\n              <FieldSlot md={6}>\r\n                <Telephone name={compositeFieldname(FIELDS.PRIMARY_CONTACT,AnswerTypeContactProps.PHONE)} inputLabel='Phone Number' variant='outlined' placeholder='Phone Number' />\r\n              </FieldSlot>\r\n            </FieldRow>\r\n            <FieldRow>\r\n              <FieldSlot md={12}>\r\n                <div className=\"mt-05\">\r\n                  <Checkbox name={compositeFieldname(FIELDS.PRIMARY_CONTACT,AnswerTypeContactProps.SEND_TEXTS)} label=\"Text about updates\" />\r\n                </div>\r\n                <div >\r\n                  <Checkbox name={compositeFieldname(FIELDS.PRIMARY_CONTACT,AnswerTypeContactProps.INCLUDE_EMAILS)} label=\"I approve this contact to also receive my application related emails and/or speak with OSAC staff about my account.\" />\r\n                </div>\r\n              </FieldSlot>\r\n            </FieldRow>\r\n          </FieldSection>\r\n         \r\n        </FormSection>\r\n      </form>\r\n    </FormProvider>\r\n  );\r\n}\r\n\r\nexport default EditContactInfo;\r\n","import React from 'react';\r\nimport Radio from '@material-ui/core/Radio';\r\nimport RadioGroup from '@material-ui/core/RadioGroup';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport FormLabel from '@material-ui/core/FormLabel';\r\nimport InputDecorator from './InputDecorator';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport { get } from 'lodash';\r\n\r\nfunction RadioButtonsGroup({ name, listItems, label, description, control, disabled= false, style, ...props}) {\r\n\r\n \r\n  const methods = useFormContext({ mode: 'onBlur' });\r\n  const errors = methods?.errors\r\n  let error = null;\r\n  if (errors) {\r\n    error = get(errors, name)\r\n  }\r\n  return (\r\n    <FormControl component=\"fieldset\" className=\"radio-group\">\r\n      { label && \r\n        <FormLabel component=\"legend\">\r\n          <h4 className=\"heading heading--h5\"> {label}\r\n          { props.isRequired? <span className=\"required\"> *</span> : null }\r\n          { !props.isRequired && props.isSoftRequired? <span className=\"required\"> *</span> : null }\r\n          </h4>\r\n        </FormLabel>\r\n      }\r\n      { error && <div style={{ color: 'red'}}>* Selection is required</div>}\r\n      <RadioGroup aria-label={description} {...props}>\r\n        {listItems.map((item,i) =>\r\n          <FormControlLabel\r\n            style={props.labelStyle}\r\n            key={`${label}-option-${i}`}\r\n            value={item.value}\r\n            control={\r\n              <Radio\r\n                color=\"primary\"\r\n                style={style}\r\n              />\r\n\r\n            }\r\n            label={item.label}\r\n            disabled={item.disabled === true || item.disabled === 'True' || disabled === true}\r\n          />)}\r\n      </RadioGroup>\r\n    </FormControl>\r\n  );\r\n};\r\n\r\nexport default InputDecorator(RadioButtonsGroup);\r\n","import React from 'react';\r\nimport InputDecorator from './InputDecorator';\r\nimport NumericFormat from './NumericFormat';\r\n\r\nconst rules = { \r\n  pattern: {\r\n    value: /^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$/,\r\n    message: \"Invalid SSN\"\r\n  }\r\n};\r\n\r\nfunction SSNtext({ description = 'SSN', label, control, ...props }) {\r\n  \r\n  return (\r\n  <NumericFormat \r\n    label={label}\r\n    format='###-##-####'\r\n    aria-label={description}\r\n    {...props}\r\n    />\r\n  );\r\n}\r\n\r\nexport default InputDecorator(SSNtext, rules);","import { useEffect, useState } from 'react';\r\nimport apiClient from '../../utils/API';\r\nimport Dropdown from '../Dropdown';\r\nimport DropdownSearch from '../DropdownSearch';\r\nimport AnswerLock from './status/AnswerLock';\r\n\r\n/**\r\n * presents an answer response as a form field with selectable options\r\n * \r\n * @param {*} param0 \r\n */\r\nfunction DropdownAnswer({answer, disabled, label, ...props}){\r\n\r\n    const [items, setItems] = useState([]);\r\n\r\n    useEffect(async ()=>{\r\n       \r\n        if (!answer.Year)\r\n            return; //not ready to specify answer yet\r\n  \r\n        const options = await apiClient.getOptionsAsListItems(answer.QuestionKey, answer.Year);\r\n        setItems(options);\r\n \r\n    },[answer.Year]);\r\n\r\n    const isSearchable =  items.length > 20;\r\n    const isDisabled = disabled || answer.IsLocked;\r\n\r\n    const fullLabel = (\r\n        <>\r\n            {label}\r\n            <AnswerLock answer={answer} />\r\n        </>\r\n    );\r\n\r\n    if (isSearchable)\r\n        return <DropdownSearch listItems={items} name={answer.FieldKey} disabled={isDisabled} inputLabel={fullLabel} {...props} /> \r\n    \r\n    return <Dropdown listItems={items} name={answer.FieldKey} disabled={isDisabled} label={fullLabel}  {...props} />\r\n}\r\n\r\nexport default DropdownAnswer;","import RadioGroup from './RadioGroup';\r\nimport { stringy } from '../utils'\r\nimport { useSelector } from \"react-redux\";\r\n\r\n/*\r\n  This requires a little voodoo on the calling component or view,\r\n  until we can figure out a better way to intercept\r\n  the state change here and convert it back to boolean\r\n\r\n  Example:\r\n\r\n  In the calling component/page, if you need to do any true/false\r\n  evaluations on this variable, make sure you import the 'truthy'\r\n  method from the 'utils' library:\r\n\r\n    import { truthy } from \"../../utils\";\r\n\r\n  Next, in the calling component/view, you will need to set a watch\r\n  variable for the field, as such:\r\n\r\n    const watchOregonResident = watch(FIELDS.OREGON_RESIDENT)\r\n\r\n  When you call this component, pass that watch variable in as the value,\r\n  with the actual field name as the name prop:\r\n\r\n    <BooleanRadioGroup name={FIELDS.OREGON_RESIDENT} value={watchOregonResident} isRequired={false} />\r\n\r\n  And use the 'truthy' function as a filter for your evaluation, as\r\n  it will check for a boolean true, or a string 'True' and return a boolean:\r\n\r\n    if (truthy(watchOregonResident)) {\r\n      // do something\r\n    }\r\n*/\r\n\r\nconst defaultListItems = [\r\n    { value: 'True', label: 'Yes' },\r\n    { value: 'False', label: 'No' },\r\n]\r\n\r\nexport default function BooleanRadioGroup({ name, defaultValue, listItems = defaultListItems, ...props }) {\r\n    const fieldNameValue = useSelector((state) => state.form.fields[name]);\r\n\r\n    if (!defaultValue && fieldNameValue && fieldNameValue.value !== null) {\r\n        // transform boolean to string before passing down to radiogroup component\r\n        defaultValue = stringy(fieldNameValue.value)\r\n    }\r\n\r\n    return (\r\n        <RadioGroup\r\n            name={name}\r\n            listItems={listItems}\r\n            labelStyle={{ paddingRight: 1 + 'rem' }}\r\n            defaultValue={defaultValue}\r\n            {...props} />\r\n    )\r\n};\r\n","import BooleanRadioGroup from \"../BooleanRadioGroup\";\r\nimport AnswerLock from \"./status/AnswerLock\";\r\nimport { stringy } from \"../../utils\";\r\nimport { useEffect } from \"react\";\r\nimport { useFormContext } from \"react-hook-form\";\r\n\r\n/**\r\n * prompt for a standard boolean answer. \r\n * \r\n * Presents as a yes/no radio group\r\n * \r\n * @param {*} param0 \r\n * @returns {Component}\r\n */\r\nfunction BooleanAnswer({ answer, disabled, label, ...props }) {\r\n\r\n    const isDisbled = disabled || answer.IsLocked;\r\n\r\n    const { errors, formState, getValues, setValue, handleSubmit, watch } = useFormContext();\r\n\r\n    useEffect(() => {\r\n        if (answer.IsLoading !== false)\r\n            return;\r\n\r\n        const defaultValue = answer.Response === true ? 'True' : answer.Response === false ? 'False' : answer.Response;\r\n        setValue(answer.FieldKey, defaultValue);\r\n\r\n    }, [answer.IsLoading]);\r\n\r\n    return (\r\n        <>\r\n            <p>\r\n                {label} {\r\n                    (label !== undefined && props.isRequired) && (\r\n                        <span style={{ color: 'red' }}>&nbsp;*</span>\r\n                    )\r\n                } <AnswerLock answer={answer} />\r\n            </p>\r\n            <BooleanRadioGroup\r\n                disabled={isDisbled}\r\n                name={answer.FieldKey}\r\n                {...props}\r\n            />\r\n        </>\r\n    );\r\n}\r\n\r\nexport default BooleanAnswer;","import { useEffect, useState } from 'react';\r\nimport apiClient from '../../utils/API';\r\nimport RadioGroup from \"../RadioGroup\";\r\nimport AnswerLock from './status/AnswerLock';\r\n\r\n/**\r\n * presents an answer response as a form field with selectable options\r\n * \r\n * @param {*} param0 \r\n */\r\nfunction RadioGroupAnswer({answer, disabled, label, ...props}){\r\n\r\n    const [items, setItems] = useState([]);\r\n\r\n    useEffect(async ()=>{\r\n       \r\n        if (!answer.Year)\r\n            return; //not ready to specify answer yet\r\n  \r\n        const options = await apiClient.get('/answer/options', {\r\n            questionKey: answer.QuestionKey,\r\n            year: answer.Year\r\n        });\r\n        setItems(options.map(r => ({\r\n            ...r,\r\n            label: r.Name,\r\n            value: r.Value\r\n        })));\r\n \r\n    },[answer.Year]);\r\n\r\n    const isDisabled = disabled || answer.IsLocked;\r\n\r\n    const fullLabel = (\r\n        <>\r\n            {label}\r\n            <AnswerLock answer={answer} />\r\n        </>\r\n    );\r\n  \r\n    return <RadioGroup listItems={items} name={answer.FieldKey} disabled={isDisabled} label={fullLabel} {...props} />\r\n}\r\n\r\nexport default RadioGroupAnswer;","import { actions } from \"./../../store\";\r\nimport Checkbox from \"./../../components/Checkbox\";\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport RadioGroup from \"../../components/RadioGroup\";\r\nimport SSN from \"./../../components/SSNtext\";\r\nimport {\r\n    FieldSection,\r\n    FieldSlot,\r\n    FieldRow,\r\n} from \"../../components/Forms/FieldSection\";\r\nimport {\r\n    FIELDS,\r\n} from \"../../store/form/fields\";\r\nimport FormSection from \"../../components/FormSection\";\r\nimport { open } from \"../../store/snack/actions\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport React, { useState } from \"react\";\r\nimport HiddenInput from \"../../components/Utility/HiddenInput\";\r\nimport { useEffect } from \"react\";\r\nimport { getReduxField } from \"../../utils\";\r\nimport { Alert, AlertTitle } from '@material-ui/lab';\r\nimport CertifyAnswer from \"../../components/answer/CertifyAnswer\";\r\nimport DropdownAnswer from \"../../components/answer/DropdownAnswer\";\r\nimport BooleanAnswer from \"../../components/answer/BooleanAnswer\";\r\nimport TextAnswer from \"../../components/answer/TextAnswer\";\r\nimport RadioGroupAnswer from \"../../components/answer/RadioGroupAnswer\";\r\n\r\nfunction EditAboutInfo({ section, onChange, onCancel }) {\r\n   \r\n    const fafsaYear = section.year;\r\n \r\n    const methods = useForm({\r\n        mode: \"onBlur\",\r\n    });\r\n    const {\r\n        errors,\r\n        formState,\r\n        getValues,\r\n        setValue,\r\n        handleSubmit,\r\n        watch,\r\n    } = methods;\r\n\r\n    const [loading, setLoading] = useState(false);\r\n    const dispatch = useDispatch();\r\n\r\n    const onSubmit = async (data, e) => {\r\n        let exclude = [\"SSN-confirm\", \"RacialGroupValidate\"]\r\n        if (getReduxField(FIELDS.SSN) == '*********') {\r\n            exclude = [\"SSN-confirm\", \"RacialGroupValidate\", \"appstudentlogin.ssn\"]\r\n        }\r\n        if (data.OTSG__ENROLLED_TRIBE === null) {\r\n            exclude.push(\"OTSG__ENROLLED_TRIBE\")\r\n        }\r\n\r\n        try {\r\n            setLoading(true);\r\n            const result = await actions.submitForm(\r\n                data,\r\n                [],\r\n                exclude\r\n            );\r\n            // console.log(data, e);\r\n            if (typeof onChange === \"function\") {\r\n                onChange(true);\r\n            }\r\n        } catch (e) {\r\n            dispatch(\r\n                open({\r\n                    message: e.message,\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        } finally {\r\n            setLoading(false);\r\n        }\r\n    };\r\n\r\n    const onError = (errors) => {\r\n        console.log(\"ERROR\", errors);\r\n        dispatch(\r\n            open({\r\n                message: \"This section is not complete. Be sure to resolve all errors above.\",\r\n                severity: \"success\",\r\n            }));\r\n    };\r\n\r\n    const racialFields = [\r\n        FIELDS.ETHNICITY__AM_INDIAN,\r\n        FIELDS.ETHNICITY__ASIAN,\r\n        FIELDS.ETHNICITY__BLACK,\r\n        FIELDS.ETHNICITY__HAWAIIAN_PI,\r\n        FIELDS.ETHNICITY__WHITE,\r\n        FIELDS.ETHNICITY__NA,    \r\n        FIELDS.GENDER__NA,\r\n    ];\r\n\r\n    const [racialError, setRacialError] = useState(null);\r\n    const validateRacialGroup = () => {\r\n        const racialValues = racialFields.map((f) => getValues(f));\r\n        const isRacialFilled = racialValues.some(\r\n            (gv) => gv === \"True\" || gv === true\r\n        );\r\n        if (\r\n            isRacialFilled === true\r\n        ) {\r\n            setRacialError(null);\r\n            return true;\r\n        } else {\r\n            setRacialError(\"Please select at least one option\");\r\n            return false;\r\n        }\r\n    };\r\n\r\n    const watchPreferNotToAnswer = watch(FIELDS.ETHNICITY__NA);\r\n    useEffect(() => {\r\n        if (watchPreferNotToAnswer === true) {\r\n            racialFields.map((rf) => {\r\n                if (rf !== FIELDS.ETHNICITY__NA) {\r\n                    setValue(rf, false);\r\n                }\r\n            });\r\n        }\r\n    }, [watchPreferNotToAnswer]);\r\n\r\n    const watchAmericanIndian = watch(FIELDS.ETHNICITY__AM_INDIAN);\r\n    const watchAsian = watch(FIELDS.ETHNICITY__ASIAN);\r\n    const watchBlack = watch(FIELDS.ETHNICITY__BLACK);\r\n    const watchHawiian = watch(FIELDS.ETHNICITY__HAWAIIAN_PI);\r\n    const watchWhite = watch(FIELDS.ETHNICITY__WHITE);\r\n    useEffect(() => {\r\n        if (watchAmericanIndian === true || watchAsian === true || watchBlack === true || watchHawiian === true || watchWhite === true) {\r\n            setValue(FIELDS.ETHNICITY__NA, false);\r\n        };\r\n    }, [watchAmericanIndian, watchAsian, watchBlack, watchHawiian, watchWhite]);\r\n\r\n    const [editSSN, setEditSSN] = useState(false);\r\n    const watchNoSsn = watch('noSsn');\r\n    const watchSsnLater = watch('ssnLater');\r\n    const watchOregonResident = watch(FIELDS.OREGON_RESIDENT)\r\n    const watchSSN = watch(FIELDS.SSN)\r\n\r\n    // #3712: Social Security Questions are Exclusive\r\n    // Social security question should not allow both check boxes. It should allow either or neither.\r\n    // Otherwise stated: Should be exclusive true or neither true to show edit box.\r\n    useEffect(() => {\r\n        if (watchNoSsn === true) {\r\n\r\n            setValue('ssnLater', false);\r\n        }\r\n\r\n    }, [watchNoSsn]);\r\n\r\n    useEffect(() => {\r\n        if (watchSsnLater === true) {\r\n\r\n            setValue('noSsn', false);\r\n        }\r\n\r\n    }, [watchSsnLater]);\r\n\r\n    const validateConfirm = (value, compareValue) => {\r\n        if (value === compareValue) {\r\n            return true\r\n        } else {\r\n            return \"Does not match\"\r\n        }\r\n    }\r\n\r\n    const toggleSSN = (e) => {\r\n        e.preventDefault()\r\n        setEditSSN(!editSSN)\r\n    }\r\n    var isSsnProvided = getReduxField(FIELDS.SSN) === '*********';\r\n\r\n    //=====( FAFSA  LOGIC )\r\n\r\n    const fafsaAnswer = section.getAnswerByField(FIELDS.FAFSA_FILING_DATE)?.Response?.split('T')[0];\r\n    const [fafsaStatus, setFafsaStatus] = useState(null);\r\n    const watchFafsa = watch(FIELDS.FAFSA_FILING_DATE);\r\n\r\n    useEffect(() => {\r\n        if(watchFafsa !== \"1801-01-01\"){\r\n            setFafsaStatus(false)\r\n        }\r\n        else{\r\n            setFafsaStatus(true)\r\n        }\r\n    }, [watchFafsa]);\r\n\r\n    const validateFafsaChoice = (value) => {\r\n        if (value) {\r\n            return true;\r\n        } else {\r\n            return false;\r\n        }\r\n    };\r\n\r\n\r\n    //=====( RENDER RETURN )\r\n    \r\n    return (\r\n        <FormProvider {...methods}>\r\n            <form onSubmit={handleSubmit(onSubmit, onError)}>\r\n                <FormSection\r\n                    title=\"About Me\"\r\n                    isEditable={true}\r\n                    onSaveClick={handleSubmit(onSubmit, onError)}\r\n                    onCancelClick={onCancel}\r\n                    loading={loading}\r\n                >\r\n                    <FieldSection title=\"Social Security Number\" isRequired>\r\n                        <FieldRow>\r\n                            <FieldSlot md={4}>\r\n                                \r\n                                {!watchNoSsn && !watchSsnLater &&\r\n                                    <div>\r\n                                        {isSsnProvided ? '***–**–****' : 'Not provided'}\r\n                                        &nbsp; &nbsp;\r\n                                        <button className=\"button\"  onClick={toggleSSN} \r\n                                            style={{\r\n                                                fontSize: '0.7em',\r\n                                                lineHeight: '0.7em',\r\n                                                padding: '0.5em 1em',\r\n                                                minWidth: 'fit-content',\r\n                                                minHeight: 'fit-content'\r\n                                                }}>Edit</button>                                      \r\n                                    </div>\r\n                                }\r\n\r\n                                {!watchNoSsn && !watchSsnLater && editSSN && \r\n                                    <SSN\r\n                                        name={FIELDS.SSN}\r\n                                        inputLabel=\"SSN\"\r\n                                        placeholder=\"SSN\"\r\n                                        variant=\"outlined\"\r\n                                        isRequired={!watchSsnLater && !watchNoSsn}//{true}\r\n                                    />\r\n                                } \r\n                                {!watchNoSsn && !watchSsnLater && editSSN && \r\n                                    <FieldSlot md={4}>\r\n                                        <SSN\r\n                                            name={`${FIELDS.SSN}-confirm`}\r\n                                            inputLabel=\"Confirm SSN\"\r\n                                            placeholder=\"Confirm SSN\"\r\n                                            variant=\"outlined\"\r\n                                            isRequired={!watchSsnLater && !watchNoSsn}//{true}\r\n                                            rules={(!watchSsnLater && !watchNoSsn) ? { validate: value => validateConfirm(value, watchSSN) } : {}}\r\n                                        />\r\n                                    </FieldSlot>\r\n                                }\r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n                        <FieldRow>\r\n                            <FieldSlot md={4}>\r\n                                <div className=\"mt-05\">\r\n                                    <Checkbox name=\"noSsn\" label=\"I do not have a SSN\" />\r\n                                </div>\r\n                                {!isSsnProvided &&\r\n                                    <div>\r\n                                        <Checkbox name=\"ssnLater\" label=\"I will enter my SSN later\" />\r\n                                    </div>\r\n                                }\r\n                                \r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n\r\n                    </FieldSection>\r\n\r\n                    <FieldSection>\r\n                        <FieldRow>\r\n                            <FieldSlot md={4}>\r\n                             <RadioGroupAnswer label=\"Are you hispanic or latino/a/x?\" answer={section.getAnswerByField(FIELDS.HISPANIC)} isRequired={true} />\r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n                    </FieldSection>\r\n\r\n                    <FieldSection title=\"Racial Group or Ethnicity?\" isRequired>\r\n                        <FieldRow>\r\n                            <FieldSlot>\r\n                                <HiddenInput\r\n                                    name=\"RacialGroupValidate\"\r\n                                    rules={{ validate: (value) => validateRacialGroup(value) }}\r\n                                ></HiddenInput>\r\n                                {racialError && (\r\n                                    <div style={{ marginTop: \".75rem\", color: \"red\" }}>\r\n                                        {racialError}\r\n                                    </div>\r\n                                )}\r\n                                <CertifyAnswer answer={section.getAnswerByField(FIELDS.ETHNICITY__AM_INDIAN)} label=\"American Indian or Alaska Native\" />\r\n                                <CertifyAnswer answer={section.getAnswerByField(FIELDS.ETHNICITY__ASIAN)} label=\"Asian\" />\r\n                                <CertifyAnswer answer={section.getAnswerByField(FIELDS.ETHNICITY__BLACK)} label=\"Black or African-American\" />\r\n                                <CertifyAnswer answer={section.getAnswerByField(FIELDS.ETHNICITY__HAWAIIAN_PI)} label=\"Native Hawaiian or Pacific Islander\" />\r\n                                <CertifyAnswer answer={section.getAnswerByField(FIELDS.ETHNICITY__WHITE)} label=\"White\" />\r\n                                <CertifyAnswer answer={section.getAnswerByField(FIELDS.ETHNICITY__NA)} label=\"Choose not to say\" />\r\n\r\n                                <TextAnswer answer={section.getAnswerByField(FIELDS.ETHNICITY__OTHER)}                                  \r\n                                    placeholder=\"Enter additional race/ethnicity info\"\r\n                                    inputLabel=\"Other Race/Ethnicity Categories (optional)?\"\r\n                                />\r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n                    </FieldSection>\r\n\r\n                    <FieldSection title=\"Enrolled Tribe Status\">\r\n                        <FieldRow>\r\n                            <div className=\"tribe-selection\">\r\n                                <h3 className=\"heading heading--h4 academic-year\">\r\n                                    Select your Enrolled Tribe\r\n                                </h3>\r\n                                <br />\r\n                                <DropdownAnswer answer={section.getAnswerByField(FIELDS.OTSG__ENROLLED_TRIBE)} label=\"Select Your Tribe\" isRequired={true} />\r\n                            </div>\r\n                        </FieldRow>\r\n                    </FieldSection>\r\n\r\n                    <FieldSection title=\"Select all that apply\">\r\n                        <FieldRow>\r\n                            <FieldSlot>\r\n                                <CertifyAnswer answer={section.getAnswerByField(FIELDS.HAS_DEPENDENT_CHILDREN)} label=\"I have dependent children.\" />\r\n                                <CertifyAnswer answer={section.getAnswerByField(FIELDS.IS_NATIONAL_GUARD_MEMBER)}\r\n                                    label=\"I am currently serving in the Oregon National Guard.\" />\r\n                                <CertifyAnswer answer={section.getAnswerByField(FIELDS.IS_TEACHER_CANDIDATE_MEMBER)}\r\n                                    label=\"I will be enrolled in a TSPC approved Educator Preparation Program that results in 1) Preliminary teacher licensure, OR 2) School Personnel licenses, including school counseling, social work, and school psychology.\" />\r\n                                <CertifyAnswer answer={section.getAnswerByField(FIELDS.FOSTER_CARE)}\r\n                                    label='I am currently or formerly in foster care or participating in an independent living program.' />\r\n                                <CertifyAnswer answer={section.getAnswerByField(FIELDS.EARLY_LEARNING_MAJOR)}\r\n                                    label='My degree will be related to working with or supporting work in the field of Early Learning and Care.' />                              \r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n                    </FieldSection>\r\n\r\n                    <FieldSection\r\n                        title={`Have you filed the FAFSA/ORSAA for ${fafsaYear\r\n                            }-${fafsaYear + 1}?`}\r\n                        isRequired={true}\r\n                    >\r\n                        <FieldRow>\r\n                            <FieldSlot md={4}>\r\n                                <RadioGroup\r\n                                    name={FIELDS.FAFSA_FILING_DATE}\r\n                                    defaultValue={fafsaAnswer}\r\n                                    rules={{ validate: (value) => validateFafsaChoice(value) }}\r\n                                    listItems={[\r\n                                        { value: \"1801-01-01\", label: \"Yes, I have filed\" },\r\n                                        { value: \"1802-01-01\", label: \"I will file the FAFSA/ORSAA\" },\r\n                                        { value: \"1803-01-01\", label: \"No, I will not file the FAFSA/ORSAA\", },\r\n\r\n                                    ]}\r\n                                />\r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n                    </FieldSection>\r\n\r\n                    {/* #3748/SP220: Show a message \"If you do not file the FAFSA/ORSAA, you will not be considered for scholarships or grants that require the FAFSA/ORSAA.\" \r\n              when student answers \"I will file the FAFSA/ORSAA\" or \"No, I will not file the FAFSA/ORSAA\". */\r\n                        (!fafsaStatus) ?\r\n                            <div>\r\n                                <Alert severity=\"warning\" color=\"warning\" >\r\n                                    <AlertTitle>FAFSA/ORSAA Warning</AlertTitle>\r\n                                    If you do not file the FAFSA/ORSAA, you will not be considered for scholarships or grants that require the FAFSA/ORSAA.\r\n                                </Alert>\r\n                            </div> : \"\"\r\n                    }\r\n\r\n                 \r\n\r\n                    <FieldSection title=\"Applicant Type\">\r\n                        <FieldRow>\r\n                            <FieldSlot>\r\n                                <CertifyAnswer answer={section.getAnswerByField(FIELDS.TEST_APPLICATION)} isRequired={false}\r\n                                    label=\"This is a test application. (I am a counselor, parent of an applicant, volunteer, educator, a high school junior or other non-applicant.)\" />\r\n                            </FieldSlot>\r\n                            <Alert severity=\"warning\" color=\"warning\">\r\n                                If test application is selected, this application will not be considered for any financial aid.\r\n                            </Alert>\r\n                        </FieldRow>\r\n                    </FieldSection>\r\n\r\n                    <FieldSection>\r\n                        <h4 className=\"heading heading--h5\">As of Fall Term {fafsaYear}, have you been an Oregon resident for 12 months preceding college enrollment? <span style={{ color: 'red' }}>*</span></h4>\r\n                        <FieldRow>\r\n                            <FieldSlot>\r\n                                <BooleanAnswer answer={section.getAnswerByField(FIELDS.OREGON_RESIDENT)} value={watchOregonResident} isRequired={true} />\r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n                    </FieldSection>\r\n\r\n                </FormSection>\r\n            </form>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\nexport default EditAboutInfo;\r\n","import React from 'react';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport InputDecorator from './InputDecorator';\r\nimport { Controller } from \"react-hook-form\";\r\nimport Input from './Input';\r\n\r\nexport default (props) => <Input type=\"password\" autoComplete=\"current-password\" {...props}/>","import { actions } from \"./../../store\";\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport Password from \"./../../components/Password\";\r\nimport { FieldSection, FieldRow, FieldSlot } from \"../../components/Forms/FieldSection\";\r\nimport { FIELDS } from \"../../store/form/fields\";\r\nimport FormSection from \"../../components/FormSection\";\r\nimport auth from \"../../auth\";\r\nimport { open } from \"../../store/snack/actions\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { useState } from \"react\";\r\nimport DropdownAnswer from \"../../components/answer/DropdownAnswer\";\r\nimport CertifyAnswer from \"../../components/answer/CertifyAnswer\";\r\n\r\nfunction EditAccountInfo({ section, onChange, onCancel }) {\r\n  \r\n  const methods = useForm({\r\n    mode: \"onBlur\",\r\n  });\r\n  const { errors, formState, getValues, setValue, handleSubmit } = methods;\r\n\r\n  const [loading, setLoading] = useState(false);\r\n  const dispatch = useDispatch();\r\n\r\n  const onSubmit = async (data, e) => {\r\n    try {\r\n      setLoading(true);\r\n      const result = await actions.submitForm(data);\r\n      // console.log(data, e);\r\n      if (typeof onChange === \"function\") {\r\n        onChange(true);\r\n      }\r\n    } catch (e) {\r\n      dispatch(\r\n        open({\r\n          message: e.message,\r\n          severity: \"success\",\r\n        })\r\n      );\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const onError = (errors, e) => {\r\n    // console.log(errors, e);\r\n  };\r\n\r\n  const handleChangePassword = (e) => {\r\n    e.preventDefault();\r\n    auth.changePassword();\r\n  };\r\n\r\n  const ChangePassLink = (\r\n    <a href=\"#\" className=\"helperTextLink\" onClick={handleChangePassword}>Change Password</a>\r\n  );\r\n\r\n  return (\r\n    <FormProvider {...methods}>\r\n      <form onSubmit={handleSubmit(onSubmit, onError)}>\r\n        <FormSection\r\n          title=\"Account Info, Password, Privacy\"\r\n          isEditable={true}\r\n          onSaveClick={handleSubmit(onSubmit, onError)}\r\n          onCancelClick={onCancel}\r\n          loading={loading}\r\n        >\r\n          <FieldSection title=\"Password?\">\r\n            <FieldRow>\r\n              <FieldSlot>\r\n                <Password\r\n                  onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                  useController={false}\r\n                  inputLabel=\"Password\"\r\n                  variant=\"outlined\"\r\n                  disabled={true}\r\n                  value=\"*********\"\r\n                  HelperTextComponent={ChangePassLink}\r\n                />\r\n              </FieldSlot>\r\n            </FieldRow>\r\n          </FieldSection>\r\n\r\n          <FieldSection title=\"How did you hear about OSAC Grants and Scholarships?\">\r\n            <FieldRow>\r\n              <FieldSlot>\r\n                <DropdownAnswer answer={section.getAnswerByField(FIELDS.OSAC_REFERRAL)} isRequired={true} label=\"How did you hear about us?\" />              \r\n              </FieldSlot>\r\n            </FieldRow>\r\n          </FieldSection>\r\n\r\n          <FieldSection title=\"Certification\" withDivider={false}>\r\n            <FieldRow column align=\"flex-start\">\r\n              <FieldSlot>\r\n                <CertifyAnswer answer={section.getAnswerByField(FIELDS.PRIVACY_AGREEMENT)}               \r\n                  isRequired={false}\r\n                  row={false}\r\n                  label=\"This certification takes the place of a signature. By checking\r\n                    this box, you certify that you have read, understood, and agree\r\n                    to the following statements:\"\r\n                />\r\n\r\n                <ul className=\"list list--checklist\">\r\n                  <li className=\"li\">\r\n                    {\" \"}\r\n                    I certify the accuracy of my application(s) and\r\n                    all accompanying documents and, if requested, agree to\r\n                    provide proof of this information.\r\n                  </li>\r\n                  <li className=\"li\">\r\n                    {\" \"}\r\n                    I give permission to the Oregon Office of Student Access and\r\n                    Completion (OSAC) to request and use data from my Free\r\n                    Application for Federal Student Aid (FAFSA) or Oregon\r\n                    Student Aid Application (ORSAA).\r\n                  </li>\r\n                  <li className=\"li\">\r\n                    {\" \"}\r\n                    I understand that by providing my contact information, I am\r\n                    giving permission to receive application status updates or\r\n                    general reminders.\r\n                  </li>\r\n                  <li className=\"li\">\r\n                    {\" \"}\r\n                    OSAC cannot guarantee applicants will receive OSAC grants or\r\n                    scholarships. I agree to hold harmless, defend, and\r\n                    indemnify OSAC for any acts, failures to act, or omissions\r\n                    of OSAC, its employees, agents, volunteers, or any State of\r\n                    Oregon employee.\r\n                  </li>\r\n                  <li className=\"li\">\r\n                    {\" \"}\r\n                    I authorize OSAC to share my application information with\r\n                    high school and college officials for additional financial\r\n                    and educational information consistent with federal and\r\n                    state laws. Information may also be shared with the\r\n                    Department of Human Services (DHS) for the Chafee ETG,\r\n                    childcare providers for the Child Care Grant, \r\n                    Oregon Tribes for the Oregon Student Tribal Grant, \r\n                    Oregon National Guard officials for the Oregon National \r\n                    Guard State Tuition Assistance program, Educator Advancement Council (EAC) for the Oregon Teachers Scholars Program, and\r\n                    scholarship selection committees and donors. I understand\r\n                    that data may be shared through the Oregon Financial Aid\r\n                    Exchange (OFAX). I also allow my information to be shared\r\n                    with OSAC-approved researchers.\r\n                  </li>\r\n                  <li className=\"li\">\r\n                    {\" \"}\r\n                    Under the Privacy Act of 1974, I understand that I am not\r\n                    required to provide my Social Security Number, however, if I\r\n                    don’t provide it, I understand I will not be considered for\r\n                    OSAC grants or scholarships that require that information. I\r\n                    also understand that if I have not completed the FAFSA or\r\n                    ORSAA, I will not be considered for OSAC need-based grants\r\n                    or scholarships.\r\n                  </li>\r\n                </ul>\r\n              </FieldSlot>\r\n            </FieldRow>\r\n          </FieldSection>\r\n\r\n          <FieldSection title=\"Publicity Release (optional)\">\r\n            <FieldRow>\r\n              <FieldRow>\r\n                <FieldSlot>\r\n                  <CertifyAnswer answer={section.getAnswerByField(FIELDS.PUBLICITY_RELEASE)}\r\n                    isRequired={false}\r\n                    row={false}\r\n                    label=\"If selected to receive an OSAC grant or scholarship award, I\r\n                    give permission to OSAC to publicize the award through a\r\n                    press release, media story, report, or other promotional\r\n                    materials.\"\r\n                  />\r\n                </FieldSlot>\r\n              </FieldRow>\r\n            </FieldRow>\r\n          </FieldSection>\r\n          \r\n        </FormSection>\r\n      </form>\r\n    </FormProvider>\r\n  );\r\n}\r\n\r\nexport default EditAccountInfo;\r\n","import { useEffect, useState } from 'react';\r\nimport { useForm, useFormContext } from \"react-hook-form\";\r\nimport { AnswerTypeHighschoolProps } from \"../../store/form/fields\";\r\nimport { compositeFieldname } from \"../../utils\";\r\nimport { FieldRow, FieldSection, FieldSlot } from \"../../components/Forms/FieldSection\";\r\nimport Checkbox from \"../../components/Checkbox\";\r\nimport Input from \"../../components/Input\";\r\nimport DropdownSearch from '../DropdownSearch';\r\nimport AnswerLock from './status/AnswerLock';\r\nimport AddressPicker from '../DataDriven/AddressPicker';\r\nimport { Alert, AlertTitle, Link } from '@material-ui/core';\r\nimport apiClient from '../../utils/API';\r\n\r\n\r\n\r\n/**\r\n * whether or not to display the city dropdown, based on address field state\r\n * \r\n * in long-form for easier deugging\r\n */\r\nfunction isCityDisplayed(states, counties, cities, state, county, city) {\r\n    if (!county)\r\n        return false;\r\n    if (cities && cities.length > 0)\r\n        return true;\r\n    return false;\r\n}\r\n\r\n\r\n/**\r\n * whether or not to display the unlisted city field, based on address field state\r\n * \r\n * in long-form for easier deugging\r\n */\r\nfunction isUnlistedCityDisplayed(states, counties, cities, state, county, city) {\r\n    if (state && state.value === -1)\r\n        return true;\r\n    if (city && city.value === -1)\r\n        return true;\r\n    return false;\r\n}\r\n\r\n/**\r\n * display sort order for high school options\r\n * @param {*} h1 high school DTO\r\n * @param {*} h2 high school DTO\r\n * @returns \r\n */\r\nfunction highSchoolOrder(h1, h2) {\r\n    const compareState1 = h1.State === 'OR' ? 'A' : h1.State;\r\n    const compareState2 = h2.State === 'OR' ? 'A' : h2.State;\r\n\r\n    if (compareState1 > compareState2) {\r\n        return 1;\r\n    }\r\n    if (compareState1 < compareState2) {\r\n        return -1;\r\n    }\r\n\r\n    if (h1.Name > h2.Name) {\r\n        return 1;\r\n    }\r\n    if (h1.Name < h2.Name) {\r\n        return -1;\r\n    }\r\n    return 0;\r\n}\r\n\r\n/**\r\n * \r\n * @param {string} hs \r\n */\r\nfunction describeHighSchool(hs) {\r\n    const locations = [hs.City, hs.State];\r\n    let locationDescriptor = locations.filter(x => x?.trim()).join(', ');\r\n    if (locationDescriptor.trim())\r\n        locationDescriptor = `(${locationDescriptor})`;\r\n\r\n    return `${hs.Name} ${locationDescriptor}`;\r\n}\r\n\r\nfunction levenshteinDistance(s, t) {\r\n    if (!s.length) return t.length;\r\n    if (!t.length) return s.length;\r\n    const arr = [];\r\n    for (let i = 0; i <= t.length; i++) {\r\n        arr[i] = [i];\r\n        for (let j = 1; j <= s.length; j++) {\r\n            arr[i][j] =\r\n                i === 0\r\n                    ? j\r\n                    : Math.min(\r\n                        arr[i - 1][j] + 1,\r\n                        arr[i][j - 1] + 1,\r\n                        arr[i - 1][j - 1] + (s[j - 1] === t[i - 1] ? 0 : 1)\r\n                    );\r\n        }\r\n    }\r\n    return arr[t.length][s.length];\r\n};\r\n\r\n/**\r\n * just rote content words distinct to the school\r\n * @param {string} hsName \r\n */\r\nfunction stripContentWords(hsName){\r\n    const skipWords = [ \"school\", \"academy\", \"high\", \"charter\", \"learning\", \"university\", \"college\", \"center\", \"completion\", \"community\", \"middle\", \"highschool\", \"comm\", ''];  \r\n\r\n    const contentWords = hsName?.split(' ').map(x => x.trim().toLowerCase()).filter(x => x.length > 2 && !skipWords.includes(x));\r\n    const rehydratedName = contentWords.join(' ');\r\n    return rehydratedName;\r\n}\r\n\r\n/**\r\n * \r\n * @param {*} h1 \r\n * @param {*} h2 \r\n * @returns \r\n */\r\nfunction possibleHighSchoolSort(h1, h2) {\r\n    if (h1.unlistedDistance > h2.unlistedDistance) \r\n        return 1;\r\n    \r\n    if (h1.unlistedDistance < h2.unlistedDistance) \r\n        return -1;    \r\n\r\n    return 0;\r\n}\r\n\r\n/**\r\n * full prompt for an highchool type question\r\n * @param {*} param0.answer\r\n * @param {String} param0.hstype high school type, selected elsewhere\r\n * @param {Boolean} param0.disabled disable fields for the whole block\r\n * @returns {Component}\r\n */\r\nconst HighSchoolAnswer = ({ answer, hstype, disabled }) => {\r\n\r\n    const name = answer.FieldKey;\r\n    const unlistedSchoolFieldName = \"UnlistedHS\"; //is school unlisted or not\r\n    const schoolCodeFieldName = compositeFieldname(name, AnswerTypeHighschoolProps.SCHOOL_CODE);  //selected school code\r\n    const unlistedSchoolNameFieldName = compositeFieldname(name, AnswerTypeHighschoolProps.UNLISTED_NAME); //if unlisted, hand-entered name\r\n\r\n    const methods = useForm({ mode: \"onBlur\", });\r\n\r\n    const { setValue, getValues } = useFormContext({ mode: 'onBlur' });\r\n\r\n    const isInitialSchoolUnlisted = !answer.SchoolCode && !!answer.UnlistedName;\r\n    const [isUnlistedHs, setUnlistedHs] = useState(isInitialSchoolUnlisted);\r\n    const [listedSchool, setListedSchool] = useState(answer.SchoolCode);\r\n    const [unlistedName, setUnlitedName] = useState(answer.UnlistedName);\r\n    const [highschools, setHighschools] = useState([]);\r\n\r\n    /**\r\n     * track unlisted name where we can use it later\r\n     * TODO: only because watches are broken :-(\r\n     * @param {Event} e \r\n     */\r\n    const handleUnlistedNameChange = (e) => {\r\n        setUnlitedName(e.target.value);\r\n        setValue(unlistedSchoolNameFieldName, e.target.value);\r\n    }\r\n\r\n    /**\r\n     * \r\n     * @param {Event} e \r\n     */\r\n    const handlePossibleSchoolClick = (schoolCode, e) => {\r\n        const school = highschools.find(h => h.Id === schoolCode);\r\n        const schoolSelection = {\r\n            value: schoolCode,\r\n            label: school.Name\r\n        };\r\n        setUnlistedHs(false);\r\n        setListedSchool(schoolSelection);\r\n        setValue(schoolCodeFieldName, schoolSelection);\r\n    }\r\n\r\n    /**\r\n     * handle check/uncheck of unlisted hs box\r\n     * @param {boolean} isUnlisted \r\n     */\r\n    const updateUnlistedHs = (isUnlisted) => {\r\n        setUnlistedHs(isUnlisted);\r\n        if (isUnlisted) {\r\n            const currentSchoolCode = getValues(schoolCodeFieldName);\r\n            setListedSchool(currentSchoolCode);\r\n            setValue(schoolCodeFieldName, '');\r\n        }\r\n        else\r\n            setValue(schoolCodeFieldName, listedSchool);\r\n\r\n    }\r\n\r\n    /**\r\n     * \r\n     */\r\n    async function loadHighSchools() {\r\n\r\n        let selectableTypes = [];\r\n        if (hstype == 'CC') {\r\n            selectableTypes = ['CC'];\r\n        }\r\n        else if (hstype == 'ALT' || hstype == 'TRD') {\r\n            selectableTypes = ['ALT', 'TRD']\r\n        }\r\n        else if (hstype == 'GED' || hstype == 'GEDHM') {\r\n            selectableTypes = ['GED']\r\n        }\r\n        const schoolResults = await Promise.all(selectableTypes.map(x => apiClient.get(`high-school/high-schools/${x}`)));\r\n        const highschools = schoolResults.flatMap(x => x);\r\n\r\n        setHighschools(highschools);\r\n    }\r\n\r\n    /**\r\n     * \r\n     */\r\n    useEffect(() => {\r\n        if (!hstype)\r\n            return;\r\n\r\n        loadHighSchools();\r\n\r\n    }, [hstype])\r\n\r\n\r\n\r\n    const isDisabled = disabled || answer.IsLocked;\r\n\r\n    const items = highschools.sort(highSchoolOrder).map(r => {\r\n        const label = describeHighSchool(r);\r\n        return {\r\n            label: label,\r\n            value: r.Id\r\n        }\r\n    });\r\n\r\n    \r\n    // const possibleListedHighSchools = contentWords ? highschools.filter(x => contentWords.some(w => x.Name.toLowerCase().includes(w))) : [];\r\n    let possibleListedHighSchools = [];\r\n    if (unlistedName) {\r\n        for (var hs of highschools) {\r\n            hs.unlistedDistance = levenshteinDistance(stripContentWords(hs.Name), stripContentWords(unlistedName));\r\n        }\r\n\r\n        possibleListedHighSchools = highschools.sort(possibleHighSchoolSort).slice(0, 10);\r\n    }\r\n    \r\n     \r\n\r\n    return (\r\n        <div>\r\n            {hstype !== 'HMSCH' && hstype !== 'UNSTD' &&\r\n                <>\r\n                    <FieldSlot>\r\n                        <DropdownSearch\r\n                            name={schoolCodeFieldName}\r\n                            inputLabel={<>High School <AnswerLock answer={answer} /></>}\r\n                            isRequired={!isUnlistedHs}\r\n                            disabled={isDisabled || isUnlistedHs}\r\n                            key={schoolCodeFieldName}\r\n                            listItems={items}\r\n                        />\r\n                    </FieldSlot>\r\n                    <FieldSlot>\r\n                        <Checkbox disabled={isDisabled} Controller={false}\r\n                            checked={isUnlistedHs}\r\n                            value={isUnlistedHs}\r\n                            name={unlistedSchoolFieldName}\r\n                            defaultValue={isUnlistedHs}\r\n                            label=\"My high school is not listed\"\r\n                            onChange={updateUnlistedHs}\r\n                        />\r\n                    </FieldSlot>\r\n                </>\r\n            }\r\n\r\n            {(isUnlistedHs || hstype == 'HMSCH') && (\r\n                <FieldRow>\r\n                    <FieldSlot>\r\n                        <FieldSection\r\n                            title=\"High School Information\"\r\n                            withDivider={false}\r\n                        ></FieldSection>\r\n                        <Input\r\n                            onChange={handleUnlistedNameChange}\r\n                            isRequired={true}\r\n                            name={unlistedSchoolNameFieldName}\r\n                            inputLabel=\"Enter high school name\"\r\n                            disabled={isDisabled}\r\n                            value={unlistedName}\r\n                            defaultValue={answer.UnlistedName}\r\n                        />\r\n\r\n                        {possibleListedHighSchools.length > 0 &&\r\n                            <Alert severity=\"info\">\r\n\r\n                                <AlertTitle>Did you mean...?</AlertTitle>\r\n                                <ul className=\"list\">\r\n                                    {possibleListedHighSchools.map(h =>\r\n                                        <li className=\"li\" onClick={(e) => handlePossibleSchoolClick(h.Id, e)}>\r\n                                            <Link>{h.Name}</Link> ({h.City}, {h.State}) \r\n                                        </li>\r\n                                    )}\r\n                                </ul>\r\n                            </Alert>\r\n                        }\r\n\r\n\r\n                        <AddressPicker name={name}>\r\n                            {({\r\n                                states,\r\n                                counties,\r\n                                cities,\r\n                                state,\r\n                                county,\r\n                                city,\r\n                                noCounties,\r\n                            }) => {                               \r\n                                return (\r\n                                    <div>\r\n                                        <FieldRow>\r\n                                            <FieldSlot>\r\n                                                <DropdownSearch\r\n                                                    onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                                                    isRequired={true}\r\n                                                    inputLabel=\"State\"\r\n                                                    placeholder=\"State\"\r\n                                                    name={compositeFieldname(name, AnswerTypeHighschoolProps.STATE)}\r\n                                                    listItems={states}\r\n                                                    variant=\"outlined\"\r\n                                                />\r\n                                            </FieldSlot>\r\n                                        </FieldRow>\r\n\r\n                                        {state?.value == -1 &&\r\n                                            <div style={{\r\n                                                backgroundColor: 'lightgrey',\r\n                                                padding: '1rem',\r\n                                                marginBottom: '1rem'\r\n                                            }}>\r\n                                                <label><strong>Unlisted State or Foreign Country<span className=\"required\">*</span></strong></label>\r\n                                                <Input name={compositeFieldname(name, AnswerTypeHighschoolProps.UNLISTED_STATE_NAME)}\r\n                                                    placeholder='Enter the name of your unlisted state/province here.'></Input>\r\n                                            </div>\r\n                                        }\r\n\r\n                                        {state && !noCounties &&\r\n                                            <FieldRow>\r\n                                                <FieldSlot>\r\n                                                    <DropdownSearch\r\n                                                        onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                                                        isRequired={true}\r\n                                                        inputLabel=\"County\"\r\n                                                        placeholder=\"County\"\r\n                                                        name={compositeFieldname(name, AnswerTypeHighschoolProps.COUNTY)}\r\n                                                        listItems={counties}\r\n                                                        variant=\"outlined\"\r\n                                                    />\r\n                                                </FieldSlot>\r\n                                            </FieldRow>\r\n                                        }\r\n                                        {isCityDisplayed(states, counties, cities, state, county, city) && (\r\n                                            <FieldRow>\r\n                                                <FieldSlot>\r\n                                                    <DropdownSearch\r\n                                                        onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                                                        isRequired={true}\r\n                                                        inputLabel=\"City\"\r\n                                                        placeholder=\"City\"\r\n                                                        name={compositeFieldname(name, AnswerTypeHighschoolProps.CITY)}\r\n                                                        listItems={cities}\r\n                                                        variant=\"outlined\"\r\n                                                    />\r\n                                                </FieldSlot>\r\n                                            </FieldRow>\r\n                                        )}\r\n\r\n                                        {isUnlistedCityDisplayed(states, counties, cities, state, county, city) &&\r\n                                            <div\r\n                                                style={{\r\n                                                    backgroundColor: 'lightgrey',\r\n                                                    padding: '1rem',\r\n                                                }}>\r\n                                                <label><strong>Unlisted City<span className=\"required\">*</span></strong></label>\r\n                                                <Input\r\n                                                    name={compositeFieldname(name, AnswerTypeHighschoolProps.UNLISTED_CITY_NAME)}\r\n                                                    placeholder='Enter the name of your unlisted city here.'></Input>\r\n                                            </div>\r\n                                        }\r\n\r\n                                    </div>\r\n                                );\r\n                            }}\r\n                        </AddressPicker>\r\n                    </FieldSlot>\r\n                </FieldRow>\r\n            )}\r\n\r\n        </div>\r\n    );\r\n}\r\nexport default HighSchoolAnswer;\r\n","import { propsToClassKey } from '@material-ui/styles';\r\nimport React from 'react';\r\nimport Input from './Input';\r\n\r\nconst NumericalDecimal = (props) => {\r\n\r\n  let numberPattern = null;\r\n  let message = \"invalid input\";\r\n  if (props.precision && props.scale) {\r\n    var wholePart = props.precision - props.scale;\r\n    numberPattern = '\\\\d{0,' + wholePart + '}(\\\\.\\\\d{0,' + props.scale +'})?';\r\n\r\n    const maxNumber = 10**wholePart-1;\r\n    const minNumber = props.allowNegative === false ? 0 : -maxNumber;\r\n    message = \"Number must be between \" + minNumber + \" and \" + maxNumber + \" and only goes to \" + props.scale + \" decimal place\" + (props.scale > 1 ? \"s\" : \"\");\r\n  }  \r\n  else {\r\n    numberPattern = '\\\\d+([.]\\\\d*)?|[.]\\\\d+';\r\n  }\r\n\r\n\r\n  if (props.allowNegative === false) {\r\n    numberPattern = '[+]?' + numberPattern;\r\n  }\r\n  else {\r\n    numberPattern = '[+-]?' + numberPattern;\r\n  }\r\n  numberPattern = '^' + numberPattern + '$';\r\n\r\n  const decimalRules = {\r\n    pattern: {\r\n      value: new RegExp(numberPattern),\r\n      message: message\r\n    }\r\n  };\r\n\r\n  return (\r\n    <Input {...props} onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }} rules={decimalRules} />\r\n  );\r\n}\r\n\r\n\r\nexport default NumericalDecimal\r\n","import NumericDecimal from \"../NumericDecimal\";\r\nimport AnswerLock from \"./status/AnswerLock\";\r\n\r\n/**\r\n * prompt for a decimal number\r\n * \r\n * @param {*} param0 \r\n * @returns {Component}\r\n */\r\nfunction DecimalAnswer({answer, disabled, inputLabel, ...props}){\r\n\r\n\r\n    return <NumericDecimal    \r\n            inputLabel={<>{inputLabel} <AnswerLock answer={answer} /></>}\r\n            placeholder={inputLabel}\r\n            precision={0.01}\r\n            disabled={disabled || answer.IsLocked}\r\n            allowNegative={false}\r\n            name={answer.FieldKey}\r\n            {...props}        \r\n        />\r\n    \r\n}\r\n\r\nexport default DecimalAnswer;","import { useForm, FormProvider } from \"react-hook-form\";\r\nimport React, { useState, useEffect } from \"react\";\r\nimport { FIELDS, getField } from \"../../store/form/fields\";\r\nimport { truthy, toBooleanString } from \"../../utils\";\r\nimport FormSection from \"../../components/FormSection\";\r\nimport { open } from \"../../store/snack/actions\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport moment from \"moment\";\r\nimport { FieldRow, FieldSection, FieldSlot } from \"../../components/Forms/FieldSection\";\r\nimport Checkbox from \"../../components/Checkbox\";\r\nimport HiddenInput from \"../../components/Utility/HiddenInput\";\r\nimport DropdownAnswer from \"../../components/answer/DropdownAnswer\";\r\nimport HighSchoolAnswer from \"../../components/answer/HighSchoolAnswer\";\r\nimport DateAnswer, { DateResolution } from \"../../components/answer/DateAnswer\";\r\nimport BooleanAnswer from \"../../components/answer/BooleanAnswer\";\r\nimport DecimalAnswer from \"../../components/answer/DecimalAnswer\";\r\nimport TextAnswer from \"../../components/answer/TextAnswer\";\r\nimport CertifyAnswer from \"../../components/answer/CertifyAnswer\";\r\nimport { Alert } from \"@material-ui/core\";\r\n\r\n/**\r\n * stadard High School section\r\n * \r\n * @param {function} param.onChange \r\n * @param {function} param.onCancel \r\n * @param {SectionHelper} param.section \r\n * @returns {Component}\r\n */\r\nfunction EditHighschool({\r\n    hideCorrectional = false,\r\n    onChange,\r\n    onCancel,\r\n    section\r\n}) {\r\n\r\n\r\n    const methods = useForm({\r\n        mode: \"onBlur\",\r\n    });\r\n\r\n    const {\r\n        errors,\r\n        formState,\r\n        getValues,\r\n        setValue,\r\n        handleSubmit,\r\n        watch,\r\n    } = methods;\r\n\r\n\r\n\r\n \r\n    const [loading, setLoading] = useState(false);\r\n    const dispatch = useDispatch();\r\n\r\n\r\n    const NO_GPA_FLAG = \"0.01\";\r\n    const FIELD_NoLetterGrades = \"NoLetterGrades\";\r\n    const watchGpa = watch(FIELDS.HIGHSCHOOL_GPA);\r\n    const watchNoLetterGrades = watch(FIELD_NoLetterGrades);\r\n\r\n    useEffect(() => {\r\n\r\n        if (`${watchGpa}` === NO_GPA_FLAG) {\r\n            setValue(FIELDS.HIGHSCHOOL_GPA, \"\");\r\n            setValue(FIELD_NoLetterGrades, true);\r\n        }\r\n\r\n    }, [watchGpa]);\r\n\r\n \r\n    const onSubmit = async (data, e) => {\r\n        try {\r\n            setLoading(true);\r\n            if (watchNoLetterGrades === true) {\r\n                data[FIELDS.HIGHSCHOOL_GPA] = NO_GPA_FLAG;\r\n            }\r\n            if (data[FIELDS.CORRECTIONAL_FACILITY_RELEASE_DATE]) {\r\n                data[FIELDS.CORRECTIONAL_FACILITY_RELEASE_DATE] = moment(\r\n                    data[FIELDS.CORRECTIONAL_FACILITY_RELEASE_DATE]\r\n                ).format(\"YYYY-MM\");\r\n            }           \r\n            // Cleanup the HS dropdown pre-selection, when Unlisted HS check box is checked.\r\n            if (data.HIGHSCHOOL?.UnlistedName) {\r\n                data.UnlistedHS = true;\r\n                data.HIGHSCHOOL.SchoolCode = null;\r\n            }\r\n            if (data[FIELDS.HIGHSCHOOL_TYPE] === 'UNSTD') {\r\n                data.UnlistedHS = false;\r\n                data.HIGHSCHOOL = {\r\n                    UnlistedName: null,\r\n                    SchoolCode: null\r\n                };\r\n                data[FIELDS.HIGHSCHOOL_GRAD_DATE] = null;\r\n            }\r\n\r\n            const results = await section.saveAnswers(data, dispatch);\r\n            if (results){\r\n                if (results.isDeadlineImpacted) {\r\n                    dispatch(\r\n                        open({\r\n                            message: \"High school change could impact your Oregon Promise deadline. Please check your Oregon Promise application for more details.\",\r\n                            severity: \"success\",\r\n                        })\r\n                    );\r\n                }\r\n                if (results.isOptionsImpacted) {\r\n                    dispatch(\r\n                        open({\r\n                            message: \"Your Oregon Promise cohort could not be determined from your changes. Please check your Oregon Promise application.\",\r\n                            severity: \"success\",\r\n                        })\r\n                    );\r\n                }\r\n                if (section.completion.isIncorrect){\r\n                    dispatch(\r\n                        open({\r\n                            message: \"High School information is incomplete or incorrect. Please review and correct the information.\",\r\n                            severity: \"error\",\r\n                        })\r\n                    );\r\n                }\r\n                else if (typeof onChange === \"function\") {\r\n                    onChange(true);\r\n                }             \r\n            }\r\n        }\r\n        finally {\r\n            setLoading(false);\r\n        }                                       \r\n\r\n    };\r\n\r\n    const onError = (errors, e) => {\r\n        // console.log('ERROR',errors, e);\r\n    };\r\n\r\n    useEffect(() => {\r\n        window.addEventListener(\"beforeunload\", alertUser);\r\n        return () => {\r\n            window.removeEventListener(\"beforeunload\", alertUser);\r\n        };\r\n    }, []);\r\n\r\n    const alertUser = (e) => {\r\n        e.preventDefault();\r\n        e.returnValue = \"\";\r\n    };\r\n\r\n    const watchHighSchoolType = watch(FIELDS.HIGHSCHOOL_TYPE);\r\n    const gedSectionRequired = watchHighSchoolType === \"GED\" || watchHighSchoolType === \"GEDHM\";\r\n\r\n\r\n    const watchCorrectionalFacilityType = watch(FIELDS.CORRECTIONAL_FACILITY_TYPE);\r\n    const customFacName = watchCorrectionalFacilityType == 3 || watchCorrectionalFacilityType == 4 || watchCorrectionalFacilityType == 5 || watchCorrectionalFacilityType == 6;\r\n\r\n    const watchGedScoreFlag = watch(FIELDS.GED_IN_PROGRESS_FLAG);\r\n    const gedScoreRequired = !(watchGedScoreFlag === true || watchGedScoreFlag === \"True\");\r\n    useEffect(() => {\r\n        // console.log(\"GED<sup style={{ verticalAlign: \"super\", fontSize: \".9rem\"}}>&reg;</sup> SCORE FLAG CHANGED\", watchGedScoreFlag)\r\n        if (watchGedScoreFlag === true || watchGedScoreFlag === \"True\") {\r\n            setValue(FIELDS.GED_SCORE, \"\");\r\n        }\r\n    }, [watchGedScoreFlag]);\r\n\r\n    // BooleanRadioGroup Watchers\r\n    const correctionalFacilityHsAnswer = section.getAnswerByField(FIELDS.CORRECTIONAL_FACILITY_HS);\r\n    const watchCorrectionalHs = watch(FIELDS.CORRECTIONAL_FACILITY_HS, correctionalFacilityHsAnswer.Response);\r\n    const watchCorrectionalComColl = watch(FIELDS.CORRECTIONAL_FACILITY_CC)\r\n    const watchAspireMember = watch(FIELDS.ASPIRE__MEMBER)\r\n\r\n\r\n    const highSchoolCompletion = section.completion.get(\"HighSchool\");\r\n\r\n    const seniorYear = section.year;\r\n\r\n    return (\r\n        <FormProvider {...methods}>\r\n            <form onSubmit={handleSubmit(onSubmit, onError)}>\r\n                <FormSection\r\n                    title=\"High School Information\"\r\n                    isEditable={true}\r\n                    onSaveClick={handleSubmit(onSubmit, onError)}\r\n                    onCancelClick={onCancel}\r\n                    loading={loading}\r\n                >\r\n                    <FieldSection title=\"High School, Home School or GED&reg;\" isRequired>\r\n                        {!hideCorrectional && (\r\n                            <FieldRow>\r\n                                <FieldSlot>\r\n                                    <p>\r\n                                        Did you (or will you) obtain your high school diploma or\r\n                                        GED® test transcript while in a{\" \"}\r\n                                        <strong>correctional facility in Oregon</strong>?\r\n\r\n                                        <i>\r\n                                            &nbsp; (Note: You can still be eligible for Oregon Promise if you\r\n                                            answer YES, per HB 2910 (2019).)\r\n                                        </i>\r\n                                    </p>\r\n                                </FieldSlot>\r\n                                <FieldSlot>\r\n                                    <BooleanAnswer\r\n                                        answer={section.getAnswerByField(FIELDS.CORRECTIONAL_FACILITY_CC)}\r\n                                        isRequired={true}\r\n                                        value={watchCorrectionalComColl}\r\n                                    />{\" \"}\r\n                                </FieldSlot>\r\n                                {truthy(watch(FIELDS.CORRECTIONAL_FACILITY_CC)) === true && (\r\n                                    <FieldSlot>\r\n                                        <FieldSection withDivider={false}>\r\n                                            <FieldRow>\r\n                                                <FieldSlot>\r\n                                                    <BooleanAnswer\r\n                                                        answer={section.getAnswerByField(FIELDS.CORRECTIONAL_FACILITY_HS)}\r\n                                                        required={true}\r\n                                                        label={<>Do you plan to attend community college while you are in a correctional facility in Oregon? <span style={{ color: 'red' }}> *</span></>}\r\n                                                    />\r\n                                                </FieldSlot>\r\n                                            </FieldRow>\r\n                                            {toBooleanString(watchCorrectionalHs) === 'False' && (\r\n                                                <>\r\n                                                    <FieldRow>\r\n                                                        <FieldSlot>\r\n                                                            <DropdownAnswer answer={section.getAnswerByField(FIELDS.CORRECTIONAL_FACILITY_TYPE)}\r\n                                                                onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                                                                variant=\"outlined\"\r\n                                                                isRequired={true}\r\n                                                                label=\"Which type of facility were you housed in when you obtained your high school diploma or GED® test transcript?\"\r\n                                                            />\r\n                                                        </FieldSlot>\r\n                                                    </FieldRow>\r\n                                                    <FieldRow>\r\n                                                        {customFacName ? (\r\n                                                            <FieldSlot>\r\n                                                                <TextAnswer\r\n                                                                    onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                                                                    answer={section.getAnswerByField(FIELDS.CORRECTIONAL_FACILITY_NAME)}\r\n                                                                    isRequired={true}\r\n                                                                    inputLabel=\"Please enter your facility name\"\r\n                                                                />\r\n                                                            </FieldSlot>\r\n                                                        ) : (\r\n                                                            <HiddenInput\r\n                                                                name={FIELDS.CORRECTIONAL_FACILITY_NAME}\r\n                                                                value=\"\"\r\n                                                            />\r\n                                                        )}\r\n                                                    </FieldRow>\r\n                                                    <FieldRow>\r\n                                                        <FieldSlot>\r\n                                                            <DateAnswer\r\n                                                                resolution={DateResolution.MONTH}\r\n                                                                onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                                                                answer={section.getAnswerByField(FIELDS.CORRECTIONAL_FACILITY_RELEASE_DATE)}\r\n                                                                isRequired={false}\r\n                                                                readOnlyInput={true}\r\n                                                                placeholder=\"Use the calendar icon to enter in your release date\"\r\n                                                                label=\"What is (or was) your release date?\"\r\n                                                            />\r\n                                                        </FieldSlot>\r\n                                                    </FieldRow>\r\n                                                    <FieldRow>\r\n                                                        <FieldSlot>\r\n                                                            <CertifyAnswer\r\n                                                                isRequired={false}\r\n                                                                answer={section.getAnswerByField(FIELDS.CORRECTIONAL_FACILITY_VERIFICATION_ALLOW)}\r\n                                                                label=\"I agree to allow my facility to verify certain information related to my incarceration and my graduation date.\"\r\n                                                            />{\" \"}\r\n                                                            {truthy(watch(FIELDS.CORRECTIONAL_FACILITY_VERIFICATION_ALLOW)) == false &&\r\n                                                                <div>\r\n                                                                    <p>\r\n                                                                        <i className=\"required\">If you do not agree, then you may or may not be eligible for Oregon Promise based on your graduation date. Contact OSAC for more details: (541)687-7400 or <a href=\"mailto:OregonPromise@hecc.oregon.gov\">OregonPromise@hecc.oregon.gov</a>.</i>\r\n                                                                    </p>\r\n                                                                </div>\r\n                                                            }\r\n                                                        </FieldSlot>\r\n                                                    </FieldRow>\r\n                                                </>\r\n                                            )}\r\n                                        </FieldSection>\r\n                                    </FieldSlot>\r\n                                )}\r\n                            </FieldRow>\r\n                        )}\r\n                        <FieldRow>\r\n                            <FieldSection title=\"School or Equivalent\" withDivider={false}>\r\n                                <FieldRow>\r\n                                    <FieldSlot>\r\n                                        <DropdownAnswer answer={section.getAnswerByField(FIELDS.HIGHSCHOOL_TYPE)}\r\n                                            isRequired={true}\r\n                                            onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                                            label=\"Type of High School or Equivalent\"\r\n                                        />\r\n                                    </FieldSlot>\r\n\r\n                                    <HighSchoolAnswer answer={section.getAnswerByField(FIELDS.HIGHSCHOOL)} hstype={watchHighSchoolType} />\r\n\r\n                                    <FieldSlot>\r\n                                        <DateAnswer\r\n                                            answer={section.getAnswerByField(FIELDS.HIGHSCHOOL_GRAD_DATE)}\r\n                                            resolution={DateResolution.MONTH}\r\n                                            onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                                            isRequired={true}\r\n                                            label=\"Date of High School Completion\"\r\n                                        />\r\n                                    </FieldSlot>\r\n                                </FieldRow>\r\n\r\n                                {highSchoolCompletion.isInconsistent &&\r\n                                    <Alert severity=\"error\" className=\"alert alert--error\">\r\n                                        This high school was no longer open the date you graduated. Please correct either your high school or your graduation date.\r\n                                    </Alert>\r\n                                }\r\n\r\n                            </FieldSection>\r\n                        </FieldRow>\r\n                    </FieldSection>\r\n\r\n                    {gedSectionRequired === true && (\r\n                        <FieldSection title=\"GED&reg; Score\">\r\n                            <FieldRow>\r\n                                <FieldSlot>\r\n                                    <DecimalAnswer\r\n                                        answer={section.getAnswerByField(FIELDS.GED_SCORE)}\r\n                                        disabled={!gedScoreRequired}\r\n                                        inputLabel=\"GED&reg; Score\"\r\n                                        isRequired={gedScoreRequired}\r\n                                    />\r\n                                </FieldSlot>\r\n                            </FieldRow>\r\n                            <FieldRow>\r\n                                <FieldSlot>\r\n                                    <CertifyAnswer answer={section.getAnswerByField(FIELDS.GED_IN_PROGRESS_FLAG)}\r\n                                        label=\"I will not have my GED&reg; requirements completed by the time I submit this application.\" />\r\n                                </FieldSlot>\r\n                            </FieldRow>\r\n                        </FieldSection>\r\n                    )}\r\n\r\n                    {watchHighSchoolType !== 'GED' && watchHighSchoolType !== 'UNSTD' &&\r\n                        <FieldSection title=\"HIGH SCHOOL 5TH YEAR\" isRequired>\r\n                            <BooleanAnswer answer={section.getAnswerByField(FIELDS.FIFTH_YEAR_SENIOR)} isRequired={true}\r\n                                label={\"I will be a high school 5th year senior attending college in Fall term \" + seniorYear} />\r\n                        </FieldSection>\r\n                    }\r\n\r\n                    {gedSectionRequired === false && watchHighSchoolType !== 'UNSTD' ? (\r\n                        <FieldSection title={getField(FIELDS.HIGHSCHOOL_GPA).question}>\r\n                            <FieldRow>\r\n                                <FieldSlot>\r\n                                    <DecimalAnswer answer={section.getAnswerByField(FIELDS.HIGHSCHOOL_GPA)}\r\n                                        disabled={watchNoLetterGrades}\r\n                                        isRequired={!watchNoLetterGrades}\r\n                                        inputLabel=\"High School GPA\"\r\n                                    />\r\n                                </FieldSlot>\r\n                                <FieldSlot container alignItems=\"flex-end\">\r\n                                    <Checkbox name={FIELD_NoLetterGrades} label=\"My high school did not assign letter grades.\" disabled={section.getAnswerByField(FIELDS.HIGHSCHOOL_GPA)?.IsLocked} />\r\n                                </FieldSlot>\r\n                            </FieldRow>\r\n                        </FieldSection>\r\n                    ) : (\r\n                        \"\"\r\n                    )}\r\n\r\n                    <FieldSection title=\"Did you work with the ASPIRE program in high school?\">\r\n                        <FieldRow>\r\n                            <FieldSlot>\r\n                                <BooleanAnswer answer={section.getAnswerByField(FIELDS.ASPIRE__MEMBER)} value={watchAspireMember} />\r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n                    </FieldSection>\r\n\r\n                    <FieldSection withDivider={true}>\r\n                        <FieldRow>\r\n                            <FieldSlot>\r\n                                <TextAnswer\r\n                                    onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                                    answer={section.getAnswerByField(FIELDS.ASPIRE__ADVISOR)}\r\n                                    inputLabel=\"ASPIRE Mentor’s Name\"\r\n                                />\r\n                            </FieldSlot>\r\n                            <FieldSlot>\r\n                                <TextAnswer\r\n                                    onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                                    answer={section.getAnswerByField(FIELDS.ASPIRE__SITE)}\r\n                                    inputLabel=\"ASPIRE Site Name\"\r\n                                />\r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n                    </FieldSection>\r\n\r\n                </FormSection>\r\n            </form>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\nexport default EditHighschool;\r\n","\r\n/**\r\n * answer dto wrapper\r\n */\r\nclass AnswerDto {\r\n\r\n    \r\n    constructor(data){\r\n        this._data = data;\r\n        this._isDeleted = false;\r\n    }\r\n\r\n    get questionKey(){\r\n        return this._data.QuestionKey;\r\n    }\r\n    \r\n    get year(){\r\n        return this._data.Year;\r\n    }\r\n\r\n    /**\r\n     * full DTO, with all the status fluff\r\n     */\r\n    get dto(){\r\n        delete this._data.section; //make sure all answers are json-serializable DTOs, no meta info\r\n        return this._data;\r\n    }\r\n\r\n    /**\r\n     * get clean dto for looking up answer fresh or doing file/delete/other manipulations\r\n     * @returns {*}\r\n     */\r\n    get locatorDto(){\r\n        return {\r\n            id: this.id,\r\n            year: this.year,\r\n            questionKey: this.questionKey\r\n        };\r\n    }\r\n\r\n    /**\r\n     * get _clean_ dto to send to student data service for updates\r\n     * \r\n     * @return {*}\r\n     */\r\n    get updateDto(){\r\n        var dto = {...this._data};\r\n\r\n        //these things don't hurt anything by sending them back, but they do make the request harder to read in troubleshooting\r\n        delete dto.section;\r\n        delete dto.ReviewStatus;\r\n        delete dto.ReviewStatusDescription;\r\n        delete dto.ReviewInstructions;\r\n        delete dto.IsValid;\r\n        delete dto.Description;\r\n        delete dto.SelectedOption;\r\n        delete dto.Status;\r\n        delete dto.IsLocked;\r\n        delete dto.LockReason;\r\n        delete dto.LockingPrograms;\r\n        delete dto.IsLoading;\r\n        delete dto.PlaceholderId;\r\n        return dto;       \r\n    }\r\n\r\n    get id(){\r\n        return this._data.Id;\r\n    }\r\n\r\n    set id(value){\r\n        this._data.PlaceholderId = this.id;\r\n        this._data.Id = value;\r\n    }\r\n\r\n    get fieldId(){\r\n        return this._data.PlaceholderId ?? this.id;\r\n    }\r\n\r\n    get isNew(){\r\n        return this.id < 0; //never a legit answer Id\r\n    }\r\n\r\n    get isDeleted(){\r\n        return this._isDeleted;\r\n    }\r\n    /**\r\n     * answer type \r\n     * @returns {string}\r\n     */\r\n    get type(){\r\n        return this._data?.AnswerType;\r\n    }\r\n\r\n    /**\r\n     * is answer recommended for read-only state\r\n     * @returns {boolean}\r\n     */\r\n    get isLocked(){\r\n        return this._data?.IsLocked;\r\n    }\r\n\r\n\r\n    /**\r\n     * create a clean, udated version of the answer for sending back to the API\r\n     * @param {*} fieldData \r\n     */\r\n    updateFromField (fieldData){   \r\n        \r\n        const self = this;\r\n\r\n        /**\r\n         * try to locate a singular value from form field value\r\n         * @param {*} response \r\n         * @returns {string|number|boolean}\r\n         */\r\n        function findValue(response){\r\n            if (!response && response !== 0)\r\n                return null;\r\n            if (typeof response === 'object'){\r\n                //Note: Removed Object.hasOwn(). It is not available until node.js v16.9.0 +\r\n                if (Object.keys(response).includes(\"Response\")){\r\n                    return response.Response;\r\n                }\r\n                if (Object.keys(response).includes(\"value\")){           \r\n                    // for some reason some dropdown types are returning bizarely complex responses instead of the rote value. Keeping it like this for backwards-compatibility\r\n                    // with old revtech answer updater\r\n                    return response.value;\r\n                }\r\n            }\r\n            return response;\r\n        }\r\n\r\n        /**\r\n         * attempt to locate a single-field response from the form data\r\n         * @returns {*}\r\n         */\r\n        function findResponse(){\r\n            if (!fieldData && fieldData !== 0)\r\n                return null;\r\n            let response = fieldData; //by default forms tend to have simple name/value pairs\r\n            if (Array.isArray(fieldData)) {\r\n                //more than one option for answer, attempt to locate the correct one\r\n                response = fieldData.find(x => x.Id === self.id); \r\n            }                \r\n           \r\n            return findValue(response);\r\n        }\r\n\r\n        /**\r\n         * when fielddata is a whole colleciton of answers in one, find the entry that best describes this specific answer\r\n         * @returns {*}\r\n         */\r\n        function findFieldEntry() {\r\n            \r\n            if (!fieldData && fieldData !== 0){\r\n                return null;\r\n            }                \r\n            if (Array.isArray(fieldData)) {\r\n                return fieldData.find(x => x.Id === self.id || x.Id === self.fieldId);\r\n            }\r\n                \r\n\r\n            //let's assume we've already handpicked a specific field object for a reason\r\n            return fieldData;\r\n        }\r\n        \r\n        // based on answer type, attempt to locate best fieldData to describe what's being updated\r\n        switch (this.type) {\r\n            case 'Boolean':\r\n                let response = findResponse();\r\n                if (response === 'True') \r\n                    response = true;\r\n                else if (response === 'False') \r\n                    response = false;\r\n\r\n                this._data.Response = response;\r\n                break;\r\n            case 'Date':\r\n            case 'Text':   \r\n                this._data.Response = findResponse();\r\n                break;     \r\n            case 'Integer':\r\n            case 'Decimal':\r\n                this._data.Response = findResponse(); //TODO: parse for think-tank\r\n                break;\r\n            \r\n            case 'HighSchool':\r\n                this._data.SchoolCode = findValue(fieldData.SchoolCode);                                 \r\n                this._data.CityId = findValue( fieldData.CityId);\r\n                this._data.CountyId = findValue(fieldData.CountyId);\r\n                this._data.StateId = findValue(fieldData.StateId);\r\n                this._data.UnlistedName = findValue(fieldData.UnlistedName);                \r\n                this._data.UnlistedStateName = findValue(fieldData.UnlistedStateName);\r\n                this._data.UnlistedCityName = findValue(fieldData.UnlistedCityName);\r\n                break;     \r\n            case 'Degree':     \r\n                const myDegree = findFieldEntry();\r\n                if (myDegree) {                \r\n                    this._data.DegreeId = findValue(myDegree.DegreeId);                      \r\n                    this._data.GraduationDate = findValue(myDegree.GraduationDate);               \r\n                    this._data.CIPMajorId = findValue(myDegree.CIPMajorId);             \r\n                    this._data.CIPMajorId2 = findValue(myDegree.CIPMajorId2);   \r\n                }             \r\n                else {\r\n                    this._isDeleted = true;\r\n                }   \r\n                break;\r\n            case 'College':    \r\n                const myCollege = findFieldEntry();\r\n                if (myCollege) {                \r\n                    this._data.SchoolCode = findValue(myCollege.SchoolCode);                                 \r\n                    this._data.CityId = findValue(myCollege.CityId);\r\n                    this._data.CountyId = findValue(myCollege.CountyId);\r\n                    this._data.StateId = findValue(myCollege.StateId);\r\n                    this._data.UnlistedName = findValue(myCollege.UnlistedName);                \r\n                    this._data.UnlistedStateName = findValue(myCollege.UnlistedStateName);\r\n                    this._data.UnlistedCityName = findValue(myCollege.UnlistedCityName); \r\n                    this._data.UnlistedCode = findValue(myCollege.UnlistedCode); \r\n                    this._data.StartTerm = findValue(myCollege.StartTerm);\r\n                    this._data.StartYear = findValue(myCollege.StartYear);\r\n                    this._data.StopTerm = findValue(myCollege.StopTerm);\r\n                    this._data.StopYear = findValue(myCollege.StopYear);\r\n                    this._data.CreditsEarned = findValue(myCollege.CreditsEarned);\r\n                    this._data.DegreeEarned = findValue(myCollege.DegreeEarned);\r\n                }             \r\n                else {\r\n                    this._isDeleted = true;\r\n                }   \r\n                break;\r\n            case 'Contact':\r\n            case 'Address':                                                                               \r\n            case 'Activity':\r\n                throw new Error(\"Answer type not yet supported: \" + this.type);\r\n            default:\r\n                throw new Error(\"Unknown answer type \" + this.type);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * genreate a stub answer of a given type\r\n     * @param {string} key question key\r\n     * @param {number} id temporary or permanent answer id if known\r\n     * @returns {AnswerDto}\r\n     */\r\n    static createOfType(key, id = 0) {\r\n        var dto = {\r\n            Id: id, \r\n            QuestionKey: key,\r\n            IsLocked: false,\r\n            IsLoading: false,\r\n        }\r\n        key = key.toLowerCase();\r\n        switch (key) {\r\n            case 'degrees':\r\n                dto.AnswerType = 'Degree';\r\n                break;\r\n            case 'collegehistories':\r\n            case 'collegechoice':\r\n                dto.AnswerType = 'College';\r\n                break;\r\n            default:\r\n                dto.Response = null;\r\n        }\r\n        return new AnswerDto(dto);\r\n    }\r\n\r\n    \r\n}\r\n\r\n\r\n\r\n\r\nexport default AnswerDto;","\r\n\r\n/**\r\n * wraps and interprets result dtos received after adding/deleting/etc an answer\r\n */\r\nclass AnswerUpdateResult {\r\n    \r\n    \r\n    /**\r\n     * dto wrapping constructor\r\n     * @param {Array<*>} data \r\n     */\r\n    constructor(data) {\r\n        this._data = data;\r\n    }\r\n\r\n    get isAwardImpacted() {\r\n        return this._hasImpact(\"Award\");\r\n    }\r\n\r\n    get isDeadlineImpacted() {\r\n        return this._hasImpact(\"Deadline\");\r\n    }\r\n\r\n    get isOptionsImpacted() {\r\n        return this._hasImpact(\"Options\");\r\n    }\r\n\r\n    /**\r\n     * sometimes we get results as arrays-of-arrays, and sometimes just as plain old arrays. This just allows us to work with whatever random\r\n     * type of results are thrown at us.\r\n     */\r\n    get flattenedResults(){\r\n        const results = [];\r\n        for (var entry of this._data){\r\n            if (Array.isArray(entry))\r\n                for (var item of entry){\r\n                    results.push(item);\r\n                }\r\n            else\r\n                results.push(entry);\r\n        }\r\n        return results;\r\n    }\r\n\r\n    _hasImpact(impact){\r\n        return this.flattenedResults.some(r => r.Impacts?.some(i => i === impact) === true);       \r\n    }\r\n\r\n\r\n}\r\n\r\nexport default AnswerUpdateResult","import FormSerializer from \"../../store/form/serializer\";\r\n\r\n/**\r\n * interprets a completion report from the student API\r\n */\r\nclass RequirementSet {\r\n\r\n    /**\r\n     * \r\n     * @param {Array} data dto list provided by student API for completion reqiurements\r\n     */\r\n    constructor(data) {\r\n        this._data = data;\r\n    }\r\n\r\n    /**\r\n     * is this info ready for use?\r\n     * @returns {Boolean}\r\n     */\r\n     get isLoaded(){\r\n        return this._data != null;\r\n    }\r\n\r\n    /**\r\n     * get question requirements for specific question (and program if multiple programs were queried)     \r\n     * @param {string} questionKey \r\n     * @returns {QuestionRequirement} object describing requirement and completion for question +\r\n     */\r\n    get(questionKey) {\r\n        if (questionKey == null)\r\n            return null;\r\n        if (this._data == null)\r\n            return null;\r\n\r\n        questionKey = questionKey.toLowerCase();        \r\n        const questionData = this._data.filter(x => x.QuestionKey.toLowerCase() === questionKey);               \r\n        return new QuestionRequirement(questionData);\r\n    }\r\n\r\n    /**\r\n     * get completion by field key\r\n     * @param {string} fieldKey \r\n     * @returns \r\n     */\r\n    getField(fieldKey){\r\n        const questionKey = FormSerializer.getQuestionKey(fieldKey);\r\n        return this.get(questionKey);\r\n    }\r\n\r\n    /**\r\n     * number of questions in this set\r\n     * @returns {Number}\r\n     */\r\n    get length(){\r\n        if (this._data == null)\r\n            return 0;\r\n\r\n        return this._data.length;\r\n    }\r\n\r\n    /**\r\n     * number of questions in this set that are actually complete\r\n     * @returns {Boolean}\r\n     */\r\n    get completionScore(){\r\n        if (this._data == null)\r\n            return 0;\r\n        return this._data.filter(x => x.IsComplete).length;\r\n    }\r\n\r\n    /**\r\n     * is every question in this set satisfied within it's specified scope\r\n     * @returns {Boolean}\r\n     */\r\n    get isComplete(){\r\n        if (this._data == null)\r\n            return false;  \r\n\r\n        return this._data.every(x => x.IsComplete);\r\n    }\r\n\r\n    /**\r\n     * section is complete specificlaly because student answered question in an inconsistent or disqualifying way\r\n     */\r\n    get isIncorrect(){\r\n        return this._data.some(x => x.InCompleteReason == \"InconsistentAnswer\" || x.InCompleteReason == \"DisqualifyingAnswer\" || x.InCompleteReason == \"DuplicateInformation\");\r\n    }\r\n\r\n    /**\r\n     * convenience method. Just shorthand for get(questionkey).isRequired\r\n     * @param {String} questionKey \r\n     * @returns {Boolean}\r\n     */\r\n    isRequired(questionKey) {\r\n        return this.get(questionKey)?.isRequired === true;\r\n    }\r\n\r\n    /**\r\n     * convenience method. Just shorthand for get(questionkey).isSkipped\r\n     * @param {String} questionKey \r\n     * @returns {Boolean}\r\n     */\r\n    isSkipped(questionKey){\r\n        return this.get(questionKey)?.isSkipped === true;\r\n    }\r\n\r\n    /**\r\n     * gets a subset of this requirement set\r\n     * @param {Array<String>} questionKeys fields we'd like to check status of\r\n     * @returns {RequirementSet}\r\n     */\r\n    getSection(questionKeys){\r\n        if (this._data == null)\r\n            return new RequirementSet(null);\r\n\r\n        questionKeys = questionKeys.map(x => x.toLowerCase());\r\n        const subset = this._data.filter(x => questionKeys.includes(x.QuestionKey.toLowerCase()));  \r\n        return new RequirementSet(subset);\r\n    }\r\n\r\n    /**\r\n     * like getSection, but uses fieldKeys instead of questionKeys\r\n     * @param {Array<String>} questionKeys fields we'd like to check status of\r\n     * @returns {RequirementSet}\r\n     */\r\n    getSectionByFields(fieldKeys){\r\n        const questionKeys = fieldKeys.map(x => FormSerializer.getQuestionKey(x));\r\n        return this.getSection(questionKeys);\r\n    }\r\n\r\n    /**\r\n     * view just those question requirements that have not been satisfied\r\n     * @returns {Array<QuestionRequirement>}\r\n     */\r\n    get incompleteQuestions(){\r\n        const incompleteDtos = this._data.filter(x => !x.IsComplete);\r\n        //TODO: groupby for multiple-program scope. \r\n        //WARNING: only works for single-program scope right now\r\n        return incompleteDtos.map(x => new QuestionRequirement([x]));\r\n    }\r\n   \r\n}\r\n\r\n/**\r\n * summary of requirements for one specific question, within scope defined in original RequirementSet\r\n */\r\nclass QuestionRequirement {\r\n\r\n    /**\r\n     * just the completion requirements that pertain to this specific question\r\n     * @param {Array} data \r\n     */\r\n    constructor(data){\r\n        this._data = data;\r\n    }\r\n\r\n    /**\r\n     * have all the question requirements in this scope been satisfied\r\n     * @returns {Boolean}\r\n     */\r\n    get isComplete(){\r\n        return this._data.every(x => x.IsComplete);\r\n    }\r\n\r\n    /**\r\n     * does at least one program claim this qestions's answer(s) is inconsistent with some other answer\r\n     */\r\n    get isInconsistent(){\r\n        return this._data.some(x => x.InCompleteReason === \"InconsistentAnswer\");\r\n    }\r\n    \r\n    /**\r\n     * does at least one program claim this qestions's answer(s) indicates they are ineligible for the program\r\n     */\r\n    get isDisqualifying(){\r\n        return this._data.some(x => x.InCompleteReason === \"DisqualifyingAnswer\");\r\n    }\r\n\r\n    /**\r\n     * \r\n     */\r\n    get isDuplicated(){\r\n        return this._data.some(x => x.InCompleteReason === \"DuplicateInformation\");\r\n    }\r\n\r\n    /**\r\n     * is there some interesting reason we are not considering this complete. Like beyond information just being missing,\r\n     * is there some special inconsistencies the student needs to remedy\r\n     * @returns {boolean}\r\n     */\r\n    get isInvalidReason(){\r\n        return this.isInconsistent || this.isDisqualifying || this.isDuplicated;    \r\n    }\r\n\r\n    /**\r\n     * within the scope specified, is this an \"eitheror\" question. The alternate question needs to be infered by context\r\n     * @returns {Boolean}\r\n     */\r\n    get isEitherOr(){       \r\n        return !this.isRequired && this._data.some(x => x.RequirementType == \"EitherOr\"); \r\n    }\r\n\r\n    /**\r\n     * within the scope specified, is this question required\r\n     * @returns {Boolean}\r\n     */\r\n    get isRequired() {       \r\n        return this._data.some(x => x.RequirementType == \"Required\"); //if any program requires it, they all\r\n    }\r\n\r\n    /**\r\n     * within scope specified, is this question optional\r\n     * @returns {Boolean}\r\n     */\r\n    get isOptional() { \r\n        if  (this._data.length == 0)\r\n            return false;\r\n        return this._data.every(x => x.RequirementType == \"Optional\" || x.RequirementType == \"Skipped\");\r\n    }\r\n\r\n    /**\r\n     * within scope specified, is this question even being prompted? Or was it considered not relvant to ask given student's situation\r\n     * @returns {Boolean}\r\n     */\r\n    get isSkipped() {\r\n        if  (this._data.length == 0)\r\n            return false;\r\n        return this._data.every(x => x.RequirementType == \"Skipped\");\r\n    }\r\n\r\n\r\n}\r\n\r\nexport default RequirementSet","import { actions } from \"../../store\";\r\nimport FormSerializer from \"../../store/form/serializer\";\r\nimport apiClient from \"../API\";\r\nimport AnswerSet from \"../dtos/AnswerSet\";\r\nimport { open } from \"../../store/snack/actions\";\r\nimport { QuestionKeyMapping } from \"../../store/form/fields\";\r\nimport AnswerDto from \"../dtos/AnswerDto\";\r\nimport AnswerUpdateResult from \"../dtos/AnswerUpdateResult\";\r\nimport RequirementSet from \"../dtos/RequirementSet\";\r\n\r\n/**\r\n * track a collection of questions chopped into sections\r\n */\r\nexport class SectionFormHelper {\r\n\r\n    /**\r\n     * constructor\r\n     * @param {ReactState} state\r\n     */\r\n    constructor(state, programCode) {\r\n        this._sections = [];\r\n\r\n        this._state = state[0]; //don't use this for individual section state, only overall state\r\n        this._setState = state[1];\r\n        this._isTrackingOnly = false;\r\n        this._programCode = programCode;\r\n    }\r\n\r\n    /**\r\n     * \r\n     * @param {*} state \r\n     * @param {*} ref \r\n     * @param {*} fieldKeys \r\n     * @returns {SectionHelper}\r\n     */\r\n    create(state, ref, fieldKeys, title) {\r\n        var section = new SectionHelper(this, state, ref, fieldKeys, title);\r\n        this._sections.push(section);\r\n        return section;\r\n    }\r\n\r\n    /**\r\n     * year of answers this section is focusing on\r\n     */\r\n    get year() {\r\n        return this._state?.year;\r\n    }\r\n\r\n    /**\r\n     * all section in htis group\r\n     * @returns {Array<SectionHelper>}\r\n     */\r\n    get sections() {\r\n        return this._sections;\r\n    }\r\n\r\n    /**\r\n     * @returns {Array<string>}\r\n     */\r\n    get fieldKeys() {\r\n        const allKeys = this._sections.reduce(function (a, b) { return a.concat(b._fieldKeys); }, []);\r\n        return [...new Set(allKeys)]; //ensure distinct keys \r\n    }\r\n\r\n\r\n    /**\r\n     * is the entire group completed\r\n     * @returns {Boolean}\r\n     */\r\n    get isComplete() {\r\n        return this._sections.every(a => a.isComplete);\r\n    }\r\n\r\n    /**\r\n     * the section we would recommend the student focus on \r\n     * @returns {SectionHelper}\r\n     */\r\n    get recommendedSection() {\r\n        for (let section of this._sections) {\r\n            if (!section.isComplete)\r\n                return section;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * percent complete BY SECTION (not per question)\r\n     * @returns {Number}\r\n     */\r\n    get percentComplete() {\r\n        if (this._sections.length == 0)\r\n            return 0;\r\n\r\n        let totalScore = 0;\r\n        let completeScore = 0;\r\n        for (let section of this._sections) {\r\n            if (section.isTrackingOnly)\r\n                continue;\r\n\r\n            totalScore++;\r\n            if (section.isComplete)\r\n                completeScore++;\r\n        }\r\n        return completeScore * 100 / totalScore;\r\n    }\r\n\r\n    /**\r\n     * get wrapped answers as fetched by the API. Does not track changes to answers in current form\r\n     * @returns {AnswerSet}\r\n     */\r\n    get answers() {\r\n        return new AnswerSet(this._state?.answers);\r\n    }\r\n\r\n    /**\r\n     * what program, is this section acting on behalf of (eg. if section forms are for a specific program's application)\r\n     */\r\n    get programCode(){\r\n        return this._programCode;\r\n    }\r\n\r\n    /**\r\n     * fetch the status for all sections. Useful for initializations\r\n     * @param {Number} year application year, sets state year moving forward\r\n     */\r\n    async fetchState(year) {\r\n        var answerData = await this.fetchAnswers(year);\r\n\r\n        for (let section of this._sections) {\r\n            section.updateCompletion();\r\n        }\r\n        return answerData;\r\n    }\r\n\r\n    /**\r\n     * similar to fetchState but skips loading of the completion status. Just the answers\r\n     * \r\n     * @param {number} year \r\n     */\r\n    async fetchAnswers(year) {\r\n        const answerData = await actions.fetchBasicFields(this.fieldKeys, year);        \r\n        this._state = { \r\n            ...this._state, \r\n            answers: answerData, \r\n            year: year ?? new AnswerSet(answerData).year,  //if year was not explicity provided we'll have to sort it out for ourselves  \r\n        };    \r\n        this._updateState();\r\n\r\n        return answerData;\r\n    }\r\n\r\n    _updateState() {\r\n        this._setState(this._state);\r\n    }\r\n\r\n    /**\r\n    * get a specific answer by it's form field key\r\n    * @param {String} fieldKey \r\n    * @returns {*} raw answer DTO\r\n    */\r\n    getAnswerByField(fieldKey) {\r\n        const questionKey = FormSerializer.getQuestionKey(fieldKey);\r\n        let answer = this.answers.get(questionKey);\r\n        if (!answer) {\r\n            //a placeholder to tide us over until it loads\r\n            return {\r\n                QuestionKey: questionKey,\r\n                Year: this.year,\r\n                FieldKey: fieldKey,\r\n                IsLoading: true,\r\n                section: this,\r\n            };\r\n        }\r\n        \r\n        answer.FieldKey = fieldKey;\r\n        answer.IsLoading = false;\r\n        answer.section = this; //provide source context\r\n        return answer;\r\n    }\r\n\r\n    getAnswerById(id){\r\n        const answer = this._state?.answers.find(a => a.Id === id);  \r\n        if (!answer)\r\n            return null;\r\n        answer.IsLoading = false;\r\n        answer.section = this; //provide source context\r\n        return answer;\r\n    }\r\n\r\n\r\n    /**\r\n     * get all answers. \r\n     * @param {*} fieldKey form field key\r\n     * @param {(*) => Boolean} subsetFilter if fieldKey represents a subset of the question key, define it's limiting criteria here\r\n     */\r\n    getAllAnswersByField(fieldKey, subsetFilter = null) {\r\n        const questionKey = FormSerializer.getQuestionKey(fieldKey); //field key\r\n        let answers = this.answers.getAll(questionKey);\r\n        if (subsetFilter)\r\n            answers = answers.filter(subsetFilter);\r\n\r\n        //add contextual information\r\n        for (let i in answers) {\r\n            let answer = answers[i];\r\n            answer.Index = i;\r\n            answer.FieldKey = fieldKey;\r\n            answer.IsLoading = false;\r\n            answer.section = this;\r\n        }\r\n        return answers;\r\n    }\r\n\r\n}\r\n\r\n/**\r\n * tie together common UI behviors of sections\r\n */\r\nclass SectionHelper {\r\n\r\n    /**\r\n     * \r\n     * @param {SectionFormHelper} parentGroup \r\n     * @param {*} state \r\n     * @param {*} ref (optional)\r\n     * @param {Array<String>} fieldKeys \r\n     * @param {String} title fix a title to this section (optional)\r\n     */\r\n    constructor(parentGroup, state, ref, fieldKeys, title) {\r\n        this._parentGroup = parentGroup;\r\n        this._state = state[0] ? state[0] : { isComplete: null };\r\n        this._setState = state[1];\r\n        this._ref = ref;\r\n        this._fieldKeys = fieldKeys;\r\n        this._title = title;\r\n        this._isCompletionVerbose = false;\r\n\r\n        this.onView = () => { };\r\n        this.onSave = () => { };\r\n        this.onEdit = () => { };\r\n    }\r\n\r\n    /**\r\n     * \r\n     */\r\n    get isCompletionVerbose() {\r\n        return this._isCompletionVerbose;\r\n    }\r\n\r\n    set isCompletionVerbose(value) {\r\n        this._isCompletionVerbose = value;\r\n    }\r\n\r\n    get year() {\r\n        return this._parentGroup.year;\r\n    }\r\n\r\n    get title() {\r\n        if (!this._title)\r\n            return null;\r\n        return this._title\r\n    }\r\n\r\n    get ref() {\r\n        return this._ref;\r\n    }\r\n\r\n    /**\r\n     * get answer info from latest API answer state\r\n     * TODO: this returns ALL answers. Should probably provide subset based on _fieldKeys\r\n     * @returns {AnswerSet} answers \r\n     */\r\n    get answers() {\r\n        return this._parentGroup.answers;\r\n    }\r\n\r\n    /**\r\n     * get only those answers that are relevant to this section\r\n     * @returns {AnswerSet} answers\r\n     */\r\n    getAllAnswers(){\r\n        const localAnswers = [];\r\n        for (let fieldKey of this._fieldKeys){\r\n            localAnswers.push(...this.getAllAnswersByField(fieldKey));\r\n        }\r\n        return new AnswerSet(localAnswers)\r\n    }\r\n\r\n    get fieldKeys() {\r\n        return this._fieldKeys;\r\n    }\r\n\r\n    /**\r\n     * get a specific answer by it's form field key\r\n     * @param {string} fieldKey \r\n     * @returns {*} raw answer DTO\r\n     */\r\n    getAnswerByField(fieldKey) {\r\n        return this._parentGroup.getAnswerByField(fieldKey);\r\n    }\r\n\r\n    /**\r\n     * get by answer id\r\n     * @param {number} id \r\n     * @returns {*} raw answer DTO\r\n     */\r\n    getAnswerById(id) {\r\n        return this._parentGroup.getAnswerById(id);\r\n    }\r\n\r\n    /**\r\n     * get all answers. \r\n     * @param {*} fieldKey form field key\r\n     * @param {(*) => Boolean} subsetFilter if fieldKey represents a subset of the question key, define it's limiting criteria here\r\n     */\r\n    getAllAnswersByField(fieldKey, subsetFilter = null) {\r\n        return this._parentGroup.getAllAnswersByField(fieldKey, subsetFilter);\r\n    }\r\n\r\n\r\n    /**\r\n     * do ALL standard work of saving answers. Assume section is being handled autonomously\r\n     * \r\n     * @param {*} data answer DTO looking form results\r\n     * @param {Dispatch} dispatch a useDispatch \r\n     */\r\n    async legacySaveAnswers(data, dispatch, exclusions) {\r\n        await this._doAnswerSave(data, dispatch, true, exclusions);\r\n    }\r\n\r\n    /**\r\n     * \r\n     * @param {*} data form data, slightly cleaned up\r\n     * @param {Dispatch} dispatch \r\n     * @returns {Array<AnswerUpdateResult>}\r\n     */\r\n    async saveAnswers(data, dispatch) {\r\n        return await this._doAnswerSave(data, dispatch, false);\r\n    }\r\n\r\n    /**\r\n     * internal work of saving answers depending on the answer DTO aggregator we want to use\r\n     * @param {*} data \r\n     * @param {*} dispatch \r\n     * @param {*} isLegacyAnswerAggregator \r\n     * @param {Array} disregardData -- used for legacy save process\r\n     */\r\n    async _doAnswerSave(data, dispatch, isLegacyAnswerAggregator, exclusions) {\r\n        try {\r\n            var results;\r\n            if (isLegacyAnswerAggregator) {\r\n                var rawResults = await actions.submitForm(data, [], exclusions);\r\n                results = new AnswerUpdateResult(rawResults);\r\n            }\r\n            else {\r\n                results = await this._putAnswers(data);                \r\n            }            \r\n            var successMessage = `Saved ${this.title ?? ''} section succesfully. `;    \r\n            if (results.isAwardImpacted){\r\n                successMessage += \"This change may affect your eligibility for the grants and/or scholarships you have submitted an application for and/or may have been awarded. Your information is currently being reviewed by OSAC staff to determine your continued eligibility.\"\r\n            }\r\n\r\n            await this.updateCompletion();\r\n            dispatch(\r\n                open({\r\n                    message: successMessage,\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n\r\n            return results;\r\n\r\n        } catch (ex) {\r\n            console.error(ex);\r\n            dispatch(\r\n                open({\r\n                    message: ex.message,\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n            return null; //no results to provide in error case\r\n        }\r\n\r\n\r\n    }\r\n\r\n    /**\r\n     * common save cleanup on action-form\r\n     */\r\n    save() {\r\n        this._state = { ...this._state, isEditable: false };\r\n        this._updateState();\r\n        (async () => {\r\n\r\n            //grrr, we have to refresh ALL questions for fellow sections to render their views correctly :-(\r\n            await actions.purgeDeletedRepeatableFieldIds();\r\n            const answerData = await actions.fetchBasicFields(this._parentGroup.fieldKeys, this.year);\r\n\r\n            this._parentGroup._state = { ...this._parentGroup._state, answers: answerData };\r\n            this._parentGroup._updateState();\r\n            this.onSave();\r\n            this.updateCompletion();\r\n        })();\r\n    }\r\n\r\n    /**\r\n     * common switch to view state for section\r\n     */\r\n    view() {\r\n        this._state = { ...this._state, isEditable: false };\r\n        this._updateState();\r\n        this.onView();\r\n    }\r\n\r\n    /**\r\n     * commonwork to switch section to an edit state\r\n     */\r\n    edit() {\r\n        this._state = { ...this._state, isEditable: true };\r\n        this._updateState();\r\n        this.onEdit();\r\n    }\r\n\r\n    /**\r\n     * @returns {Boolean}\r\n     */\r\n    get isEditable() {\r\n        return this._state.isEditable === true;\r\n    }\r\n\r\n    /**\r\n     * @returns {Boolean}\r\n     */\r\n    get isComplete() {\r\n        return this._state.isComplete;\r\n    }\r\n\r\n    /**\r\n     * standard summary of completion status\r\n     * @returns {String}\r\n     */\r\n    get completionState() {\r\n        if (this._state.isComplete)\r\n            return \"complete\";\r\n        else\r\n            return \"incomplete\";\r\n\r\n        //todo: what is inProgress?\r\n    }\r\n\r\n    /**\r\n     * @returns {Boolean}\r\n     */\r\n    get isCompletionLoading() {\r\n        return this._state.isComplete === null;\r\n    }\r\n\r\n    /**\r\n     * @returns {Boolean}\r\n     */\r\n    get isAnswerLoading() {\r\n        return this._parentGroup.answers.isLoading;\r\n    }\r\n\r\n    /**\r\n     * all question keys referred to by this field\r\n     * @returns {Array<string>}\r\n     */\r\n    get questionKeys() {\r\n        const allKeys = this._fieldKeys.map((fieldKey) => FormSerializer.getQuestionKey(fieldKey));\r\n        return [...new Set(allKeys)]; //ensure distinct keys\r\n    }\r\n\r\n    /**\r\n     * track a section of meta or umbrella information. Not an actual form section \r\n     */\r\n    get isTrackingOnly() {\r\n        return this._isTrackingOnly;\r\n    }\r\n\r\n    /**\r\n     * mark a section as an umbrella or meta section as opposed to an actual form section\r\n     */\r\n    set isTrackingOnly(value) {\r\n        this._isTrackingOnly = value;\r\n    }\r\n\r\n    get programCode() {\r\n        return this._parentGroup._programCode;\r\n    }\r\n    /**\r\n     * get most recent verbose completion report\r\n     */\r\n    get completion() {\r\n        return new RequirementSet(this._state.completionReport);\r\n    }\r\n\r\n\r\n    async updateCompletion() {\r\n        const data = {\r\n            \"questionKeys\": this.questionKeys,\r\n            \"year\": this.year,\r\n               //TODO: have API support a program code property here. I _think_ we don't yet need it for the 2-3 areas currently using this helper\r\n        }\r\n        let currentProgramCode = this.programCode;\r\n        if (currentProgramCode){\r\n            data.programCodes = currentProgramCode\r\n        }\r\n\r\n        if (this.isCompletionVerbose) {\r\n            const completionReport = await apiClient.get(\"/answer/completion\", data);\r\n            this._state = { \r\n                ...this._state, \r\n                isComplete: completionReport.every(q => q.IsComplete === true),\r\n                completionReport : completionReport\r\n            };\r\n        }\r\n        else {\r\n            const isComplete = await apiClient.get(\"/answer/iscomplete\", data);\r\n            this._state = { \r\n                ...this._state, \r\n                isComplete: isComplete,\r\n                completionReport : null\r\n            };\r\n        }\r\n        \r\n        this._updateState();\r\n    }\r\n\r\n    /**\r\n     * get starter answer data apporpriate for the given quesiton\r\n     * @param {string} questionKey \r\n     * @param {number} fieldId \r\n     * @returns {AnswerDto}\r\n     */\r\n    createAnswer(questionKey, fieldId = 0) {\r\n        var answer = AnswerDto.createOfType(questionKey, fieldId);\r\n        answer._data.Year = this.year;\r\n        return answer;\r\n    }\r\n    /**\r\n     * eventual replacement we can use to perform answer updates\r\n     * \r\n     * TODO: not all answer types are supported yet. Fill in support for new answer/component types as needed.\r\n     * @param {*} data form data\r\n     * @returns {Array<AnswerUpdateResult>} answer update result DTOs\r\n     */\r\n    async _putAnswers(data) {\r\n            \r\n        const nextAnswerState = [];\r\n        const updatingAnswers = [];\r\n        const answerUpdateTasks = [];     \r\n        \r\n        function getDataForAnswer(questionKey){\r\n\r\n            function getFieldKeys(){          \r\n                let matchingFields = Object.entries(QuestionKeyMapping).filter(e => e[1].QuestionKey.toLowerCase() === questionKey.toLowerCase()).map(e => e[0]);              \r\n                if (matchingFields.length === 0)\r\n                    return [questionKey]; //no preregistered field\r\n                else \r\n                    return matchingFields;                 \r\n            }\r\n    \r\n            var fieldKeys = getFieldKeys();\r\n            if (fieldKeys.length === 1){\r\n                var fieldItem = data[fieldKeys[0]];\r\n                if (Array.isArray(fieldItem))\r\n                    fieldItem = fieldItem.filter(x => x !== null && x !== undefined);\r\n\r\n                return fieldItem;\r\n            }\r\n                \r\n        \r\n            const remergedData = [];\r\n            for (let fieldKey of fieldKeys){\r\n                let fieldData = data[fieldKey];\r\n                if (fieldData)\r\n                    remergedData.push(...fieldData);                                \r\n            }\r\n            const cleanedData = remergedData.filter(x => x !== null && x !== undefined);\r\n            return cleanedData;\r\n        }\r\n      \r\n        \r\n        function getAddEndpoint(key){\r\n            if (!key)\r\n                throw Error(\"Can't get endpoint when no question key provided\");\r\n\r\n            key = key.toLowerCase();\r\n            switch (key) {\r\n                case 'degrees':\r\n                    return 'answer/degree';\r\n                case 'collegehistories':\r\n                    return 'answer/school';\r\n                case 'activities':\r\n                    return 'answer/activity';\r\n                default:\r\n                    return null;\r\n            }\r\n        }\r\n            \r\n        const answers =  this._parentGroup.answers.answers.map(a => new AnswerDto(a));\r\n        \r\n        // of answers already loaded into state, figure out which ones need to be (1) updated (2) deleted, or (3) left alone\r\n        for (let answer of answers) {\r\n                                                                   \r\n            //make sure we're even processing this answer right now\r\n            if (answer.isLocked || !this.questionKeys.map(x => x.toLowerCase()).includes(answer.questionKey.toLowerCase())){\r\n                nextAnswerState.push(answer.dto);  //pass along state, leave alone\r\n                continue; \r\n            }           \r\n            \r\n            var addEndpoint = getAddEndpoint(answer.questionKey); //can anwers be added/removed at all?\r\n            var fieldData = getDataForAnswer(answer.questionKey);\r\n            answer.updateFromField(fieldData);\r\n\r\n            if (addEndpoint && answer.isDeleted) {\r\n                answerUpdateTasks.push((async () => {\r\n                    var result = await apiClient.delete('/answer', answer.locatorDto);\r\n                    //don't pass into updated answer state, effectively removing it\r\n                    return [result];\r\n                })());  \r\n            }\r\n            else {                                \r\n                updatingAnswers.push(answer.updateDto);\r\n                nextAnswerState.push(answer.dto);\r\n            }\r\n        }\r\n        //once we've gone through all the answers, tally up any that are just straight updates. Process in bulk.\r\n        if (updatingAnswers.length > 0)\r\n            answerUpdateTasks.push(apiClient.put('/answer', updatingAnswers));\r\n\r\n        // finally, sift through actual fields to see any answers outside of state that need to be added to it\r\n        for (let questionKey of this.questionKeys){\r\n            var addEndpoint = getAddEndpoint(questionKey); \r\n            if (!addEndpoint) //adding not supported\r\n                continue;\r\n\r\n            var fieldData = getDataForAnswer(questionKey);\r\n            var untrackedFields = fieldData?.filter(x => !answers.some(a => a.fieldId == x.Id));\r\n                                 \r\n            if (untrackedFields){\r\n                for (let field of untrackedFields) {               \r\n                    var answer = this.createAnswer(questionKey, field.Id);                        \r\n                    answer.updateFromField(fieldData)                      \r\n                    answerUpdateTasks.push((async () => {\r\n                        const result = await apiClient.post(addEndpoint, answer.updateDto);\r\n                        answer.id = result.Id; //get resulting answer id\r\n                        nextAnswerState.push(answer.dto);\r\n                        return [result];\r\n                    })());              \r\n                }  \r\n            }\r\n                                                         \r\n        }\r\n        \r\n        // NOW we can send out all the requests for updates!\r\n        const resultClumps = await Promise.all(answerUpdateTasks);\r\n\r\n        this._parentGroup._state = { \r\n            ...this._parentGroup._state, \r\n            answers: nextAnswerState,  \r\n        };\r\n        this._parentGroup._updateState();\r\n     \r\n        return new AnswerUpdateResult(resultClumps);\r\n    }\r\n\r\n\r\n    _updateState() {\r\n        this._setState(this._state);\r\n    }\r\n\r\n\r\n}\r\n\r\nexport default SectionFormHelper;","import Spinner from \"../Utility/Spinner\";\r\nimport SuccessIcon from '@material-ui/icons/CheckCircle';\r\nimport WarningIcon from '@material-ui/icons/WarningRounded';\r\n\r\n/**\r\n * standard display icon for section progress\r\n */\r\nexport default ({section}) => {\r\n    if (section.isCompletionLoading)\r\n        return (<Spinner size=\"25px\"/>);\r\n    if (section.isComplete)\r\n        return (<SuccessIcon sx={{ color: \"#429D5B\" }}/>);\r\n    \r\n    return (<WarningIcon sx={{ color: \"#da3754\" }}/>);\r\n}\r\n\r\n","import { useSelector } from \"react-redux\";\r\nimport { useEffect, useState, useRef } from \"react\";\r\nimport { useLocation } from 'react-router-dom';\r\nimport EditBasicInfo from \"./EditBasicInfo\";\r\nimport EditContactInfo from \"./EditContactInfo\";\r\nimport EditAboutInfo from \"./EditAboutInfo\";\r\nimport EditAccountInfo from \"./EditAccountInfo\";\r\nimport EditHighschoolInfo from \"../field-groups/EditHighschool\";\r\nimport PortalView from \"../../components/Global/PortalView\";\r\nimport Checkbox from \"./../../components/ReadOnlyCheckbox\";\r\nimport ReadOnly from \"./../../components/ReadOnly\";\r\nimport PrintIcon from \"../../components/PrintIcon\";\r\nimport { FIELDS, getField } from \"../../store/form/fields\";\r\nimport ReadOnlyField from \"../../components/ReadOnlyField\";\r\nimport ConvertCode from \"../../components/Utility/ConvertCode\";\r\nimport FormSection from \"../../components/FormSection\";\r\nimport auth from \"./../../auth\";\r\nimport _get from \"lodash.get\";\r\nimport SectionFormHelper from \"../../utils/helper/SectionHelper\";\r\nimport { getReduxField } from \"../../utils\";\r\nimport moment from \"moment\";\r\nimport SectionStateIcon from \"../../components/progress/SectionStateIcon\";\r\nimport apiClient from \"../../utils/API\";\r\nimport ProgramInfo from \"../../utils/dtos/ProgramInfo\";\r\nimport ProgramApplicationInfo from \"../../utils/dtos/ProgramApplicationInfo\";\r\nimport { Alert } from \"@material-ui/core\";\r\n\r\n/**\r\n * just a stylistic component to make it easy to disable links\r\n * @param {*} param0 \r\n * @returns {Component} \r\n */\r\nfunction DisablableLink({disabled, text, ...props}){\r\n\r\n    if (disabled){\r\n        return <span disabled=\"disabled\" {...props}>{text}</span>\r\n    }\r\n    else{\r\n        return <a {...props}>{text}</a>\r\n    }\r\n}\r\n\r\n/**\r\n * render the primary content of the Profile page\r\n * @returns {Component}\r\n */\r\nfunction Profile() {\r\n\r\n    const formState = useSelector((state) => state.form);\r\n    const location = useLocation();\r\n    const anchor = location.hash;\r\n    useEffect(() => {\r\n        if (anchor) {\r\n            const element = document.querySelector(anchor);\r\n            if (element) {\r\n                element.scrollIntoView({ behavior: 'smooth' });\r\n            }\r\n        }\r\n    }, [anchor]);\r\n\r\n    // const history = useHistory();\r\n\r\n    const [email, setEmail] = useState(\"\");\r\n\r\n    const sectionGroup = new SectionFormHelper(useState());\r\n\r\n    const basicInfoState = useState(null);\r\n    const basicInfo = sectionGroup.create(basicInfoState, useRef(null), [\r\n        FIELDS.FIRST_NAME,\r\n        FIELDS.LAST_NAME,\r\n        FIELDS.MIDDLE_INITIALS,\r\n        FIELDS.BIRTHDATE,\r\n        FIELDS.OTHER_NAMES,\r\n        FIELDS.GENDER__MALE,\r\n        FIELDS.GENDER__FEMALE,\r\n        FIELDS.GENDER__NON_BINARY,\r\n        FIELDS.GENDER__OTHER,\r\n        FIELDS.GENDER__TRANSMAN,\r\n        FIELDS.GENDER__TRANSWOMAN,\r\n        FIELDS.GENDER__NA,\r\n        FIELDS.PRONOUNS__FEMALE,\r\n        FIELDS.PRONOUNS__MALE,\r\n        FIELDS.PRONOUNS__NEUTRAL,\r\n        FIELDS.PRONOUNS__OTHER,\r\n        FIELDS.CERTIFY_IDENTITY,\r\n    ]);\r\n\r\n    const contactInfoState = useState(null);\r\n    const contactInfo = sectionGroup.create(contactInfoState, useRef(null), [\r\n        FIELDS.HOME_PHONE,\r\n        FIELDS.ALTERNATE_PHONE,\r\n        FIELDS.PERMANENT_ADDRESS,\r\n        FIELDS.MAILING_ADDRESS,\r\n        FIELDS.PRIMARY_CONTACT,\r\n        FIELDS.PRIMARY_PHONE_CELL_FLAG,\r\n        FIELDS.ALTERNATE_PHONE_CELL_FLAG,\r\n    ]);\r\n\r\n    const aboutInfoState = useState(null);\r\n    const aboutInfo = sectionGroup.create(aboutInfoState, useRef(null), [\r\n        FIELDS.SSN,\r\n        FIELDS.HISPANIC,\r\n        FIELDS.ETHNICITY__AM_INDIAN,\r\n        FIELDS.ETHNICITY__ASIAN,\r\n        FIELDS.ETHNICITY__BLACK,\r\n        FIELDS.ETHNICITY__HAWAIIAN_PI,\r\n        FIELDS.ETHNICITY__WHITE,\r\n        FIELDS.ETHNICITY__NA,\r\n        FIELDS.ETHNICITY__OTHER,\r\n        FIELDS.OTSG__ENROLLED_TRIBE,\r\n        FIELDS.HAS_DEPENDENT_CHILDREN,\r\n        FIELDS.IS_NATIONAL_GUARD_MEMBER,\r\n        FIELDS.IS_TEACHER_CANDIDATE_MEMBER,\r\n        FIELDS.FOSTER_CARE,\r\n        FIELDS.TEST_APPLICATION,\r\n        FIELDS.OREGON_RESIDENT,\r\n        FIELDS.EARLY_LEARNING_MAJOR,\r\n        FIELDS.FAFSA_FILING_DATE,\r\n        FIELDS.IS_TEACHER_CANDIDATE_MEMBER\r\n    ]);\r\n\r\n    const highSchoolState = useState(null);\r\n    const highSchool = sectionGroup.create(highSchoolState, useRef(null), [\r\n        FIELDS.ASPIRE__MEMBER,\r\n        FIELDS.ASPIRE__ADVISOR,\r\n        FIELDS.ASPIRE__SITE,\r\n        FIELDS.CORRECTIONAL_FACILITY_HS,\r\n        FIELDS.CORRECTIONAL_FACILITY_CC,\r\n        FIELDS.CORRECTIONAL_FACILITY_TYPE,\r\n        FIELDS.CORRECTIONAL_FACILITY_RELEASE_DATE,\r\n        FIELDS.CORRECTIONAL_FACILITY_NAME,\r\n        FIELDS.CORRECTIONAL_FACILITY_VERIFICATION_ALLOW,\r\n        FIELDS.HIGHSCHOOL_GPA,\r\n        FIELDS.ACT,\r\n        FIELDS.SAT,\r\n        FIELDS.HIGHSCHOOL_GRAD_DATE,\r\n        FIELDS.FIFTH_YEAR_SENIOR,\r\n        FIELDS.HIGHSCHOOL,\r\n        FIELDS.HIGHSCHOOL_TYPE,\r\n        FIELDS.GED_SCORE,\r\n        FIELDS.GED_IN_PROGRESS_FLAG,\r\n    ], \"High School\");\r\n    highSchool.isCompletionVerbose = true;\r\n\r\n    const accountInfoState = useState(null);\r\n    const accountInfo = sectionGroup.create(accountInfoState, useRef(null), [\r\n        FIELDS.OSAC_REFERRAL,\r\n        FIELDS.PRIVACY_AGREEMENT,\r\n        FIELDS.PUBLICITY_RELEASE,\r\n    ]);\r\n\r\n\r\n    const [jumpState, setJumpState] = useState(null);\r\n    const applicationRef = useRef(null);\r\n\r\n    for (let section of sectionGroup.sections) {\r\n        section.onSave = () => setJumpState(\"WAIT\");\r\n        section.onView = () => setJumpState(\"WAIT\");\r\n    }\r\n\r\n    useEffect(() => {\r\n        //wait one render before doing the jump\r\n        if (jumpState == \"WAIT\")\r\n            setJumpState(\"READY\");\r\n\r\n        else if (jumpState == \"READY\") {\r\n\r\n\r\n            var nextSection = sectionGroup.recommendedSection;\r\n            if (nextSection == null)\r\n                applicationRef.current.scrollIntoView();\r\n            else\r\n                sectionGroup.recommendedSection.ref.current.scrollIntoView();\r\n\r\n\r\n            setJumpState(null);\r\n        }\r\n    }, [jumpState, basicInfoState, contactInfoState, aboutInfoState, highSchoolState, accountInfoState]);\r\n\r\n    const isProfileComplete = sectionGroup.isComplete  /* && isPrivacyAgreement*/;\r\n\r\n    /**\r\n     * populate initial answers and related state\r\n     */\r\n    useEffect(async () => {\r\n\r\n        const [userEmail, answerData] = await Promise.all([\r\n            auth.getUserEmail(), // this method may be async in the future to get from graph api, as getting from token relies on having the email user claim enabled in b2c.\r\n            sectionGroup.fetchState()\r\n        ]);\r\n        setEmail(userEmail);\r\n    }, []);\r\n \r\n    const [scholarshipProgramData, setScholarshipProgramData] = useState(null);\r\n    const [scholarshipApplicationData, setScholarshipApplicationData] = useState(null);\r\n    const scholarshipApp = new ProgramApplicationInfo(scholarshipApplicationData, scholarshipProgramData);\r\n\r\n    useEffect(() => {\r\n        (async() =>{\r\n            var programData = await apiClient.getProgram(\"SCH\"); \r\n            \r\n            var recentYear = new ProgramInfo(programData).recentSeason?.year;          \r\n            var scholarshipApp = await apiClient.getApplication(\"SCH\", recentYear);\r\n            \r\n            setScholarshipProgramData(programData);\r\n            setScholarshipApplicationData(scholarshipApp);\r\n            \r\n        })();\r\n    }, []);\r\n\r\n\r\n    const get = (fieldKey) => formState.fields[fieldKey]?.value;\r\n    const getNames = (fieldKey) => {\r\n        const stateObject = formState.fields[fieldKey];\r\n        let string = \"\";\r\n        for (const i in stateObject) {\r\n            string +=\r\n                stateObject[i].FirstName.value +\r\n                \" \" +\r\n                stateObject[i].LastName.value +\r\n                \"\\n\";\r\n        }\r\n        return string;\r\n    };\r\n\r\n    const getAddress = (fieldKey) => {\r\n        const street = formState.fields[fieldKey]?.Address.value\r\n            ? formState.fields[fieldKey]?.Address.value\r\n            : \"\";\r\n        const city = formState.fields[fieldKey]?.CityId.value\r\n            ? formState.fields[fieldKey]?.CityId.value\r\n            : \"\";\r\n        const county = formState.fields[fieldKey]?.CountyId.value\r\n            ? formState.fields[fieldKey]?.CountyId.value\r\n            : \"\";\r\n        const zip = formState.fields[fieldKey]?.Zip.value\r\n            ? formState.fields[fieldKey]?.Zip.value\r\n            : \"\";\r\n\r\n        return { street, city, county, zip };\r\n    };\r\n\r\n    const getSchoolCode = (fieldKey) => {\r\n        return formState.fields[fieldKey]?.SchoolCode?.value;\r\n    };\r\n\r\n\r\n    return (\r\n        <PortalView>\r\n            <div name=\"ProfilePage\">\r\n                <div className=\"page-intro\">\r\n                    <div className=\"wrapper\">\r\n                        <div className=\"page-intro__layout\">\r\n                            <div className=\"page-intro__icon\">\r\n                                <img src=\"/Profile.svg\" alt=\"Profile\" />\r\n                            </div>\r\n                            <div className=\"page-intro__content rhythm\">\r\n                                <h1 className=\"heading heading--h1\"> Profile <PrintIcon />\r\n                                </h1>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n\r\n                <div className=\"form-wrapper rhythm\">\r\n                    <div ref={basicInfo.ref}>\r\n                        {!basicInfo.isEditable ?\r\n                            <FormSection\r\n                                title={`Basic Information`}\r\n                                status={<SectionStateIcon section={basicInfo} />}\r\n                                isEditable={false}\r\n                                onEditClick={() => basicInfo.edit()}\r\n                            >\r\n                                <div className=\"form-section__fields\">\r\n                                    <ReadOnlyField\r\n                                        name=\"name\"\r\n                                        value={get(FIELDS.FIRST_NAME) + \" \" + get(FIELDS.LAST_NAME)}\r\n                                    />\r\n                                    <ReadOnlyField\r\n                                        name={getField(FIELDS.OTHER_NAMES).question}\r\n                                        value={getNames(FIELDS.OTHER_NAMES)}\r\n                                    />\r\n                                    <ReadOnlyField name=\"Birthdate\" value={get(FIELDS.BIRTHDATE)} />\r\n\r\n                                    <div container className=\"field-wrapper\">\r\n                                        <div className=\"field-wrapper__title\">gender identity</div>\r\n                                        <ReadOnly\r\n                                            name=\"Gender\"\r\n                                            value={\r\n                                                (get(FIELDS.GENDER__MALE) === true ? \"Male\\n\" : \"\") +\r\n                                                (get(FIELDS.GENDER__FEMALE) === true\r\n                                                    ? \"Female\\n\"\r\n                                                    : \"\") +\r\n                                                (get(FIELDS.GENDER__TRANSMAN) === true\r\n                                                    ? \"Trans Male/Trans Man\\n\"\r\n                                                    : \"\") +\r\n                                                (get(FIELDS.GENDER__TRANSWOMAN) === true\r\n                                                    ? \"Trans Female/Trans Woman\\n\"\r\n                                                    : \"\") +\r\n                                                (get(FIELDS.GENDER__NON_BINARY) === true\r\n                                                    ? \"Non-binary/Genderqueer/Gender non-conforming\\n\"\r\n                                                    : \"\") +\r\n                                                (get(FIELDS.GENDER__OTHER) === true\r\n                                                    ? \"Different Identity\"\r\n                                                    : \"\")\r\n                                            }\r\n                                        />\r\n                                    </div>\r\n\r\n                                    <div className=\"field-wrapper\">\r\n                                        <div className=\"field-wrapper__title\">pronouns</div>\r\n                                        <ReadOnly\r\n                                            name=\"Pronouns\"\r\n                                            value={\r\n                                                (get(FIELDS.PRONOUNS__MALE) === true\r\n                                                    ? \"He/Him/His\\n\"\r\n                                                    : \"\") +\r\n                                                (get(FIELDS.PRONOUNS__FEMALE) === true\r\n                                                    ? \"She/Her/Hers\\n\"\r\n                                                    : \"\") +\r\n                                                (get(FIELDS.PRONOUNS__NEUTRAL) === true\r\n                                                    ? \"They/Them/Their\\n\"\r\n                                                    : \"\") +\r\n                                                (get(FIELDS.PRONOUNS__OTHER) !== null\r\n                                                    ? \"Other: \" + get(FIELDS.PRONOUNS__OTHER) + \"\\n\"\r\n                                                    : \"\")\r\n                                            }\r\n                                        />\r\n                                    </div>\r\n\r\n                                    <div className=\"field-wrapper add-bottom-padding\">\r\n                                        <div className=\"field-wrapper__title\">\r\n                                            identity certification\r\n                                        </div>\r\n                                        <div>\r\n                                            <Checkbox\r\n                                                useController={false}\r\n                                                name=\"CertifyIdentity\"\r\n                                                value={\r\n                                                    get(FIELDS.CERTIFY_IDENTITY) === \"True\" || get(FIELDS.CERTIFY_IDENTITY) ? true : false\r\n                                                }\r\n                                                disabled\r\n                                                label=\"I certify that I am the person named above.\"\r\n                                            />\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                            </FormSection>\r\n                            :\r\n                            <EditBasicInfo\r\n                                section={basicInfo}\r\n                                onChange={() => basicInfo.save()}\r\n                                onCancel={() => basicInfo.view()}\r\n                            />\r\n                        }\r\n                    </div>\r\n                    {/* End BasicInfo */}\r\n\r\n                    <div ref={contactInfo.ref} id=\"contact-info\" >\r\n                        {!contactInfo.isEditable ? (\r\n                            <FormSection\r\n                                title=\"Contact Information\"\r\n                                status={<SectionStateIcon section={contactInfo} />}\r\n                                isEditable={false}\r\n                                onEditClick={() => contactInfo.edit()}\r\n                            >\r\n                                <div name=\"ContactInfoForm\">\r\n                                    <div className=\"field-wrapper\">\r\n                                        <div className=\"field-wrapper__title\">email</div>\r\n                                        <ReadOnly name=\"Email\" value={email} />\r\n                                    </div>\r\n\r\n                                    <div className=\"field-wrapper\">\r\n                                        <div className=\"field-wrapper__title\">phone number</div>\r\n                                        <ReadOnly\r\n                                            name=\"PhoneNumber\"\r\n                                            value={\r\n                                                (get(FIELDS.ALTERNATE_PHONE)\r\n                                                    ? get(FIELDS.ALTERNATE_PHONE) + \" (Mobile)\\n\"\r\n                                                    : \"\") +\r\n                                                (get(FIELDS.HOME_PHONE)\r\n                                                    ? get(FIELDS.HOME_PHONE) + \" (Home)\\n\"\r\n                                                    : \"\")\r\n                                            }\r\n                                        />\r\n                                    </div>\r\n\r\n                                    <div className=\"field-wrapper\">\r\n                                        <div className=\"field-wrapper__title\">permanent address</div>\r\n                                        <ReadOnly\r\n                                            name=\"PermanentAddress\"\r\n                                            value={\r\n                                                <ConvertCode\r\n                                                    isAddress={true}\r\n                                                    address={getAddress(FIELDS.PERMANENT_ADDRESS)}\r\n                                                />\r\n                                            }\r\n                                        />\r\n                                    </div>\r\n\r\n                                    <div className=\"field-wrapper\">\r\n                                        <div className=\"field-wrapper__title\">mailing address</div>\r\n                                        {getAddress(FIELDS.MAILING_ADDRESS) && (\r\n                                            <ReadOnly\r\n                                                name=\"MailingAddress\"\r\n                                                value={\r\n                                                    <ConvertCode\r\n                                                        isAddress={true}\r\n                                                        address={getAddress(FIELDS.MAILING_ADDRESS)}\r\n                                                    />\r\n                                                }\r\n                                            />\r\n                                        )}\r\n                                    </div>\r\n\r\n                                    <div className=\"field-wrapper\">\r\n                                        <div className=\"field-wrapper__title\">Additional Contacts</div>\r\n                                        <ReadOnly\r\n                                            name=\"primary contact\"\r\n                                            value={\r\n                                                <ConvertCode\r\n                                                    isContact={true}\r\n                                                    contact={formState.fields[FIELDS.PRIMARY_CONTACT] !== null ? formState.fields[FIELDS.PRIMARY_CONTACT] : ''}\r\n                                                />\r\n                                            }\r\n                                        />\r\n                                    </div>\r\n                                </div>\r\n                            </FormSection>\r\n                        ) : (\r\n                            <EditContactInfo\r\n                                section={contactInfo}\r\n                                onChange={() => contactInfo.save()}\r\n                                onCancel={() => contactInfo.view()}\r\n                            />\r\n                        )}\r\n                    </div>\r\n                    {/* End ContactInfo */}\r\n\r\n                    <div ref={aboutInfo.ref}>\r\n                        {!aboutInfo.isEditable ? (\r\n                            <FormSection\r\n                                title=\"About Me\"\r\n                                status={<SectionStateIcon section={aboutInfo} />}\r\n                                isEditable={false}\r\n                                onEditClick={() => aboutInfo.edit()}\r\n                            >\r\n                                <div name=\"AboutInfoForm\">\r\n                                    <div className=\"field-wrapper\">\r\n                                        <div className=\"field-wrapper__title\">social security number</div>\r\n                                        <ReadOnly\r\n                                            name=\"SSN\"\r\n                                            value={get(FIELDS.SSN) ? \"*********\" : \"\"}\r\n                                        />\r\n                                    </div>\r\n\r\n                                    <div className=\"field-wrapper\">\r\n                                        <div className=\"field-wrapper__title\">Are you hispanic or latino/a/x?</div>\r\n                                        <ReadOnly\r\n                                            name=\"Hispanic\"\r\n                                            value={\r\n                                                get(FIELDS.HISPANIC) === \"HISPAN\"\r\n                                                    ? \"Yes\"\r\n                                                    : get(FIELDS.HISPANIC) === \"NONHISPAN\"\r\n                                                        ? \"No\"\r\n                                                        : \"Choose not to say\"\r\n                                            }\r\n                                        />\r\n                                    </div>\r\n\r\n                                    <div className=\"field-wrapper\">\r\n                                        <div className=\"field-wrapper__title\">Racial group or ethnicity</div>\r\n                                        <ReadOnly\r\n                                            name=\"Ethnicity\"\r\n                                            value={\r\n                                                (get(FIELDS.ETHNICITY__AM_INDIAN) === true\r\n                                                    ? \"American Indian or Alaska Native\\n\"\r\n                                                    : \"\") +\r\n                                                (get(FIELDS.ETHNICITY__ASIAN) === true\r\n                                                    ? \"Asian\\n\"\r\n                                                    : \"\") +\r\n                                                (get(FIELDS.ETHNICITY__BLACK) === true\r\n                                                    ? \"Black or African-American\\n\"\r\n                                                    : \"\") +\r\n                                                (get(FIELDS.ETHNICITY__HAWAIIAN_PI) === true\r\n                                                    ? \"Native Hawaiian or Pacific Islander\\n\"\r\n                                                    : \"\") +\r\n                                                (get(FIELDS.ETHNICITY__WHITE) === true\r\n                                                    ? \"White\\n\"\r\n                                                    : \"\") +\r\n                                                (get(FIELDS.ETHNICITY__NA) === true\r\n                                                    ? \"Choose not to say\\n\"\r\n                                                    : \"\")\r\n                                            }\r\n                                        />\r\n                                    </div>\r\n\r\n                      \r\n                                    <div className=\"field-wrapper\">\r\n                                        <div className=\"field-wrapper__title\">applicant type</div>\r\n                                        <ReadOnly\r\n                                            name=\"ApplicantType\"\r\n                                            value={\r\n                                                get(FIELDS.TEST_APPLICATION) === \"True\" ||\r\n                                                    get(FIELDS.TEST_APPLICATION) === true\r\n                                                    ? \"Test Application\"\r\n                                                    : get(FIELDS.TEST_APPLICATION) === \"False\" ||\r\n                                                        get(FIELDS.TEST_APPLICATION) === false\r\n                                                        ? \"Student Application\"\r\n                                                        : \"\"\r\n                                            }\r\n                                        />\r\n                                    </div>\r\n\r\n                                    <div className=\"field-wrapper\">\r\n                                        <div className=\"field-wrapper__title\">\r\n                                            Oregon resident for 12 months preceding enrollment?\r\n                                        </div>\r\n                                        <ReadOnly\r\n                                            name=\"Resident\"\r\n                                            value={\r\n                                                get(FIELDS.OREGON_RESIDENT) === \"True\" ||\r\n                                                    get(FIELDS.OREGON_RESIDENT) === true\r\n                                                    ? \"Yes\"\r\n                                                    : get(FIELDS.OREGON_RESIDENT) === \"False\" ||\r\n                                                        get(FIELDS.OREGON_RESIDENT) === false\r\n                                                        ? \"No\"\r\n                                                        : \"\"\r\n                                            }\r\n                                        />\r\n                                    </div>\r\n\r\n                                    <div className=\"field-wrapper\">\r\n                                        <div className=\"field-wrapper__title\">\r\n                                            I have dependent children.\r\n                                        </div>\r\n                                        <ReadOnly\r\n                                            name=\"Resident\"\r\n                                            value={\r\n                                                get(FIELDS.HAS_DEPENDENT_CHILDREN) === \"True\" ||\r\n                                                    get(FIELDS.HAS_DEPENDENT_CHILDREN) === true\r\n                                                    ? \"Yes\"\r\n                                                    : get(FIELDS.HAS_DEPENDENT_CHILDREN) === \"False\" ||\r\n                                                        get(FIELDS.HAS_DEPENDENT_CHILDREN) === false\r\n                                                        ? \"No\"\r\n                                                        : \"\"\r\n                                            }\r\n                                        />\r\n                                    </div>\r\n\r\n                                    <div className=\"field-wrapper\">\r\n                                        <div className=\"field-wrapper__title\">Enrolled tribe status</div>\r\n                                        <ReadOnly\r\n                                            name=\"Tribe\"\r\n                                            value={\r\n                                                Number(get(FIELDS.OTSG__ENROLLED_TRIBE)) === 0 ? \"I am not enrolled in a tribe\" :\r\n                                                    Number(get(FIELDS.OTSG__ENROLLED_TRIBE)) > 0 ? \"I am enrolled in a tribe\" :\r\n                                                        \"Other Non-Listed Tribe\"\r\n                                            }\r\n                                        />\r\n                                    </div>\r\n\r\n                                    <div className=\"field-wrapper\">\r\n                                        <div className=\"field-wrapper__title\">\r\n                                            I am currently serving in the Oregon National Guard.\r\n                                        </div>\r\n                                        <ReadOnly\r\n                                            name=\"Resident\"\r\n                                            value={\r\n                                                get(FIELDS.IS_NATIONAL_GUARD_MEMBER) === \"True\" ||\r\n                                                    get(FIELDS.IS_NATIONAL_GUARD_MEMBER) === true\r\n                                                    ? \"Yes\"\r\n                                                    : get(FIELDS.IS_NATIONAL_GUARD_MEMBER) === \"False\" ||\r\n                                                        get(FIELDS.IS_NATIONAL_GUARD_MEMBER) === false\r\n                                                        ? \"No\"\r\n                                                        : \"\"\r\n                                            }\r\n                                        />\r\n                                    </div>\r\n\r\n                                    <div className=\"field-wrapper\">\r\n                                        <div className=\"field-wrapper__title\">\r\n                                        I will be enrolled in a TSPC approved Educator Preparation Program that results in 1) Preliminary teacher licensure, OR 2) School Personnel licenses, including school counseling, social work, and school psychology.\r\n                                        </div>\r\n                                        <ReadOnly\r\n                                            name=\"Resident\"\r\n                                            value={\r\n                                                get(FIELDS.IS_TEACHER_CANDIDATE_MEMBER) === \"True\" ||\r\n                                                    get(FIELDS.IS_TEACHER_CANDIDATE_MEMBER) === true\r\n                                                    ? \"Yes\"\r\n                                                    : get(FIELDS.IS_TEACHER_CANDIDATE_MEMBER) === \"False\" ||\r\n                                                        get(FIELDS.IS_TEACHER_CANDIDATE_MEMBER) === false\r\n                                                        ? \"No\"\r\n                                                        : \"\"\r\n                                            }\r\n                                        />\r\n                                    </div>\r\n\r\n                                    <div container className=\"field-wrapper\">\r\n                                        <div className=\"field-wrapper__title\">\r\n                                            I am currently or formerly in foster care or participating in an independent living program.\r\n                                        </div>\r\n                                        <ReadOnly\r\n                                            name=\"FosterStatus\"\r\n                                            value={\r\n                                                get(FIELDS.FOSTER_CARE) === \"True\" ||\r\n                                                    get(FIELDS.FOSTER_CARE) === true\r\n                                                    ? \"Yes\"\r\n                                                    : get(FIELDS.FOSTER_CARE) === \"False\" ||\r\n                                                        get(FIELDS.FOSTER_CARE) === false\r\n                                                        ? \"No\"\r\n                                                        : \"\"\r\n                                            }\r\n                                        />\r\n                                    </div>\r\n                                    <div container className=\"field-wrapper\">\r\n                                        <div className=\"field-wrapper__title\">\r\n                                            My degree will be related to working with or supporting work in the field of Early Learning and Care.\r\n                                        </div>\r\n                                        <ReadOnly\r\n                                            name=\"EarlyLearningStatus\"\r\n                                            value={\r\n                                                get(FIELDS.EARLY_LEARNING_MAJOR) === \"True\" ||\r\n                                                    get(FIELDS.EARLY_LEARNING_MAJOR) === true\r\n                                                    ? \"Yes\"\r\n                                                    : get(FIELDS.EARLY_LEARNING_MAJOR) === \"False\" ||\r\n                                                        get(FIELDS.EARLY_LEARNING_MAJOR) === false\r\n                                                        ? \"No\"\r\n                                                        : \"\"\r\n                                            }\r\n                                        />\r\n                                    </div>\r\n                                </div>\r\n                            </FormSection>\r\n                        ) : (\r\n                            <EditAboutInfo\r\n                                section={aboutInfo}\r\n                                onChange={() => aboutInfo.save()}\r\n                                onCancel={() => aboutInfo.view()}\r\n                            />\r\n                        )}\r\n                    </div> {/* End AboutInfo */}\r\n\r\n                    <div ref={highSchool.ref}>\r\n                        {!highSchool.isEditable ? (\r\n                            <FormSection\r\n                                title=\"High School Information\"\r\n                                status={<SectionStateIcon section={highSchool} />}\r\n                                isEditable={false}\r\n                                onEditClick={() => highSchool.edit()}\r\n                            >\r\n                                <div name=\"HighschoolInfoForm\">\r\n                                    <div className=\"field-wrapper\">\r\n                                        <div className=\"field-wrapper__title\">\r\n                                            type of high school or equivalent\r\n                                        </div>\r\n                                        <ReadOnly\r\n                                            name=\"HighschoolType\"\r\n                                            value={\r\n                                                <ConvertCode\r\n                                                    codeType=\"HSTYPE\"\r\n                                                    code={get(FIELDS.HIGHSCHOOL_TYPE) ?\r\n                                                        get(FIELDS.HIGHSCHOOL_TYPE) :\r\n                                                        \"No High School type received\"\r\n                                                    }\r\n                                                />\r\n                                            }\r\n                                        />\r\n                                    </div>\r\n\r\n                                    <div className=\"field-wrapper\">\r\n                                        <div className=\"field-wrapper__title\">high school</div>\r\n                                        <ReadOnly\r\n                                            name=\"Highschool\"\r\n                                            value={\r\n                                                getSchoolCode(FIELDS.HIGHSCHOOL) ?\r\n                                                    <ConvertCode\r\n                                                        isHS={true}\r\n                                                        code={getSchoolCode(FIELDS.HIGHSCHOOL)}\r\n                                                    /> :\r\n                                                    formState.fields[FIELDS.HIGHSCHOOL]?.UnlistedName?.value ?\r\n                                                        formState.fields[FIELDS.HIGHSCHOOL]?.UnlistedName?.value :\r\n                                                        \"No High School information received\"\r\n                                            }\r\n                                        />\r\n                                    </div>\r\n\r\n                                    <div className=\"field-wrapper\">\r\n                                        <div className=\"field-wrapper__title\">\r\n                                            Date of high school completion or graduation\r\n                                        </div>\r\n                                        <ReadOnly\r\n                                            name=\"Grad-Highschool\"\r\n                                            value={get(FIELDS.HIGHSCHOOL_GRAD_DATE) ?\r\n                                                moment(get(FIELDS.HIGHSCHOOL_GRAD_DATE)).format('MM-YYYY') :\r\n                                                \"No High School Graduation date received\"\r\n                                            }\r\n                                        />\r\n                                    </div>\r\n\r\n                                </div>\r\n                            </FormSection>\r\n                        ) : (\r\n                            <EditHighschoolInfo\r\n                                section={highSchool}\r\n                                hideCorrectional={false}\r\n                                onChange={() => highSchool.save()}\r\n                                onCancel={() => highSchool.view()}\r\n                            />\r\n                        )}\r\n                    </div>\r\n\r\n                    <div ref={accountInfo.ref}>\r\n                        {!accountInfo.isEditable ? (\r\n                            <FormSection\r\n                                title=\"Account Info, Password, Privacy\"\r\n                                status={<SectionStateIcon section={accountInfo} />}\r\n                                isEditable={false}\r\n                                onEditClick={() => accountInfo.edit()}\r\n                            >\r\n\r\n                                <div className=\"field-wrapper\">\r\n                                    <div className=\"field-wrapper__title\">\r\n                                        HOW DID YOU HEAR ABOUT OSAC GRANTS AND SCHOLARSHIPS?\r\n                                    </div>\r\n                                    <ReadOnly\r\n                                        name=\"ScholarshipReference\"\r\n                                        value={\r\n                                            <ConvertCode\r\n                                                codeType=\"APPLEARN\"\r\n                                                code={get(FIELDS.OSAC_REFERRAL)}\r\n                                            />\r\n                                        }\r\n                                    />\r\n                                </div>\r\n\r\n                                <div className=\"field-wrapper highlight\">\r\n                                    <div className=\"field-wrapper__title\">Certification<span style={{ color: 'red' }}>*</span></div>\r\n                                    <div className=\"field-wrapper__content rhythm\">\r\n                                        <div className=\"rhythm\">\r\n                                            <Checkbox value={getReduxField(FIELDS.PRIVACY_AGREEMENT)} disabled={false} required={true} label=\"This certification takes the place of a signature. By checking this box, you certify that you have read, understood, and agree to the following statements:\" />\r\n                                            {/* NOTE: this is a hack. there is no unanswered null state for the privacy agreement, but there is for publicity release. So this is just an approximate test to see if they\r\n                                                have ever answered this question this year */}\r\n                                            {accountInfo.getAnswerByField(FIELDS.OSAC_REFERRAL)?.Response !== null && \r\n                                                accountInfo.getAnswerByField(FIELDS.PRIVACY_AGREEMENT)?.Response != true &&\r\n                                                <Alert severity=\"warning\">\r\n                                                    To be eligible for grants or scholarships we will need to collaborate with colleges and other organizations to verify your\r\n                                                    eligibility and disburse funds to you. If you wish to receive any of our grants or scholarships, you must agree to share\r\n                                                    your information.                                                     \r\n                                                </Alert>\r\n\r\n                                            }\r\n                                            <ul className=\"list list--checklist\">\r\n                                                <li className=\"li\"> I certify the accuracy of my application(s) and all accompanying documents and, if requested, agree to provide proof of this information.</li>\r\n                                                <li className=\"li\"> I give permission to the Oregon Office of Student Access and Completion (OSAC) to request and use data from my Free Application for Federal Student Aid (FAFSA) or Oregon Student Aid Application (ORSAA).</li>\r\n                                                <li className=\"li\"> I understand that by providing my contact information, I am giving permission to receive application status updates or general reminders.</li>\r\n                                                <li className=\"li\"> OSAC cannot guarantee applicants will receive OSAC grants or scholarships. I agree to hold harmless, defend, and indemnify OSAC for any acts, failures to act, or omissions of OSAC, its employees, agents, volunteers, or any State of Oregon employee.</li>\r\n                                                <li className=\"li\"> I authorize OSAC to share my application information with high school and college officials for additional financial and educational information consistent with federal and state laws. Information may also be shared with the Department of Human Services (DHS) for the Chafee ETG, childcare providers for the Child Care Grant, Oregon Tribes for the Oregon Student Tribal Grant, Oregon National Guard officials for the Oregon National Guard State Tuition Assistance program, Educator Advancement Council (EAC) for the Oregon Teachers Scholars Program, and scholarship selection committees and donors. I understand that data may be shared through the Oregon Financial Aid Exchange (OFAX). I also allow my information to be shared with OSAC-approved researchers.</li>\r\n                                                <li className=\"li\"> Under the Privacy Act of 1974, I understand that I am not required to provide my Social Security Number, however, if I don’t provide it, I understand I will not be considered for OSAC grants or scholarships that require that information. I also understand that if I have not completed the FAFSA/ORSAA, I will not be considered for OSAC need-based grants or scholarships.</li>\r\n                                            </ul>\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n\r\n\r\n                                <div className=\"field-wrapper highlight\">\r\n                                    <div className=\"field-wrapper__title\"> Publicity Release<br />(optional)</div>\r\n                                    <div className=\"field-wrapper__content rhythm\">\r\n                                        <Checkbox value={getReduxField(FIELDS.PUBLICITY_RELEASE)} disabled={false} label=\"If selected to receive an OSAC grant or scholarship award, I give permission to OSAC to publicize the award through a press release, media story, report, or other promotional materials.\" />\r\n                                    </div>\r\n                                </div>\r\n\r\n                            </FormSection>\r\n                        ) : (\r\n                            <EditAccountInfo\r\n                                section={accountInfo}\r\n                                onChange={() => accountInfo.save()}\r\n                                onCancel={() => accountInfo.view()}\r\n                            />\r\n                        )}\r\n                    </div> {/* End AccountInfo */}\r\n\r\n                    <div className=\"component\" ref={applicationRef} >                        \r\n                        <div className=\"wrapper rhythm text text--align-center\">                                                        \r\n                            <DisablableLink href=\"/dashboard\" className=\"button\" disabled={!isProfileComplete} text=\"Continue to Grants\" />\r\n                            <DisablableLink href={`/additional-scholarship-info/${scholarshipApp.year}`} className=\"button\" \r\n                                disabled={!(isProfileComplete && (scholarshipApp.isSubmitted || scholarshipApp.isSeasonOpen))} text=\"Continue to Scholarships\" />\r\n                            {!isProfileComplete &&\r\n                                <div>You must complete your profile questions before proceeding to applications.</div>\r\n                            }\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </PortalView>\r\n    );\r\n}\r\n\r\nexport default Profile;\r\n","\r\nimport { useDispatch } from 'react-redux';\r\nimport { useEffect, useState } from 'react';\r\nimport { useHistory } from 'react-router';\r\nimport PortalView from '../../components/Global/PortalView';\r\nimport Checkbox from './../../components/Checkbox';\r\nimport { FIELDS } from '../../store/form/fields';\r\nimport { actions } from '../../store';\r\nimport { FormProvider, useForm } from 'react-hook-form';\r\nimport { FieldRow, FieldSection, FieldSlot } from '../../components/Forms/FieldSection';\r\nimport SSNtext from '../../components/SSNtext';\r\nimport Input from '../../components/Input';\r\nimport { getReduxField } from '../../utils';\r\nimport MaskedDatePicker from '../../components/MaskedDatePicker';\r\nimport { open } from '../../store/snack/actions';\r\nimport { getLatestActiveYear } from \"../../utils\";\r\n\r\nfunction Registration() {\r\n\r\n  const history = useHistory();\r\n  const dispatch = useDispatch();\r\n  const methods = useForm({\r\n    mode: 'onBlur'\r\n  });\r\n\r\n  const [isSaving, setSaving] = useState(false);\r\n\r\n  const { errors, formState, getValues, setValue, handleSubmit, watch } = methods;\r\n  const [activeYear, setActiveYear] = useState(null)\r\n\r\n  const onSubmit = async (data, e) => {\r\n      // console.log('submitted', data)\r\n      try {\r\n        setSaving(true);\r\n\r\n        let exclusionArray = [\r\n          `${FIELDS.LAST_NAME}-confirm`,\r\n          `${FIELDS.BIRTHDATE}-confirm`,\r\n          `${FIELDS.SSN}-confirm`\r\n        ]; \r\n\r\n        // ssn field is not populated with existing value, so if user didn't enter data - we will not update it with empty values.\r\n        // We can just check for an empty value and skip it, since defaultValue needs to set for dirtyFields to work, however there is a bug with it, it does not reset.\r\n        if (data[FIELDS.SSN] === '' || data[FIELDS.SSN] === null) {\r\n            exclusionArray.push(FIELDS.SSN);\r\n        }\r\n        await actions.submitForm(data, [], exclusionArray, activeYear);\r\n        history.push('/profile');\r\n      } catch (e) {\r\n        dispatch(open({\r\n          message: e.message,\r\n          severity: \"success\",\r\n        }))\r\n        console.error({ e })\r\n      } finally {\r\n        setSaving(false)\r\n      }\r\n  };\r\n\r\n  const onError = (err) => {\r\n    dispatch(open({\r\n      message: 'There was an error saving, please check all required fields are populated.',\r\n      severity: \"error\",\r\n    }))\r\n  }\r\n\r\n  const watchLastName = watch(FIELDS.LAST_NAME, false)\r\n  const watchBirthday = watch(FIELDS.BIRTHDATE, false)\r\n  const watchSSN = watch(FIELDS.SSN)\r\n  const watchNoSSN = watch('noSSN')\r\n  const watchSSNLater = watch('SSNlater')\r\n\r\n  // #3712: Social Security Questions are Exclusive\r\n  // Social security question should not allow both check boxes. It should allow either or neither.\r\n  // Otherwise stated: Should be exclusive true or neither true to show edit box.\r\n  useEffect(() => {\r\n    if (watchNoSSN === true) {\r\n      \r\n          setValue('SSNlater', false);\r\n        }     \r\n    \r\n  }, [watchNoSSN]);\r\n\r\n  useEffect(() => {\r\n    if (watchSSNLater === true) {\r\n      \r\n          setValue('noSSN', false);\r\n        }     \r\n    \r\n  }, [watchSSNLater]);\r\n\r\n  const validateConfirm = (value, compareValue) => {\r\n      // console.log(value, compareValue)\r\n      if (value === compareValue) {\r\n        return true\r\n      } else {\r\n        return \"Does not match\"\r\n      }\r\n  }\r\n\r\n  const handleBirthdayChange = (value) => {\r\n    setValue(FIELDS.BIRTHDATE, value)\r\n  }\r\n\r\n  useEffect(() => {\r\n    (async () => {\r\n      const year = await getLatestActiveYear('SCH')\r\n      console.log('year', year)\r\n      setActiveYear(year)\r\n      await actions.fetchBasicFields([\r\n        FIELDS.FIRST_NAME,\r\n        FIELDS.LAST_NAME,\r\n        FIELDS.BIRTHDATE,\r\n        FIELDS.SSN\r\n      ], year);\r\n    })();\r\n  }, []);\r\n\r\n\r\n\r\n  return (\r\n    <PortalView>\r\n      <FormProvider {...methods} >\r\n        <div className=\"content registration\">\r\n          <div className=\"registration__header rhythm component\">\r\n              <h1 className='heading heading--h1'>Registration</h1>\r\n              <p>We just need a few more details from you to get started.</p>\r\n              <a href=\"#print\" className='button button--has-icon' onClick={() => { window.print(); return false; }}>\r\n                <svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\">\r\n                  <path fill=\"#ffffff\" d=\"M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z\"></path>\r\n                </svg>\r\n                Print\r\n              </a>\r\n          </div>\r\n\r\n          <div>\r\n            <form onSubmit={handleSubmit(onSubmit, onError)} >\r\n              <fieldset></fieldset>\r\n              <FieldSection>\r\n                <FieldRow>\r\n                  <FieldSlot>\r\n                    <Input name={FIELDS.FIRST_NAME} inputLabel='Legal First Name' placeholder=\"Legal First Name\" variant='outlined' isRequired={true} />\r\n                  </FieldSlot>\r\n                  <FieldSlot>\r\n                    <Input name={FIELDS.MIDDLE_INITIALS} inputLabel='Legal Middle Initial' \r\n                          placeholder=\"Legal Middle Initial\" \r\n                          inputProps={{ maxLength: 1 }}\r\n                          variant='outlined' />\r\n                  </FieldSlot>\r\n                  <FieldSlot>\r\n                    <Input name={FIELDS.LAST_NAME} inputLabel='Legal Last Name' placeholder=\"Legal Last Name\" variant='outlined' isRequired={true} />\r\n                  </FieldSlot>\r\n                  <FieldSlot>\r\n                    <Input\r\n                      name={`${FIELDS.LAST_NAME}-confirm`}\r\n                      inputLabel='Confirm Legal Last Name'\r\n                      placeholder=\"Legal Last Name\"\r\n                      variant='outlined'\r\n                      isRequired={true}\r\n                      defaultValue={getReduxField(FIELDS.LAST_NAME)}\r\n                      rules={{ validate: value => validateConfirm(value, watchLastName) }}\r\n                    />\r\n                  </FieldSlot>\r\n                </FieldRow>\r\n                <FieldRow>\r\n                  <FieldSlot>\r\n                    <MaskedDatePicker name={FIELDS.BIRTHDATE} label='Birthday' className=\"input\" style={{ marginTop: 0 }} onChange={handleBirthdayChange} isRequired={true} />\r\n                  </FieldSlot>\r\n                  <FieldSlot>\r\n                    <MaskedDatePicker\r\n                      className=\"input\"\r\n                      name={`${FIELDS.BIRTHDATE}-confirm`}\r\n                      label='Confirm Birthday'\r\n                      style={{ marginTop: 0 }}\r\n                      isRequired={true}\r\n                      defaultValue={getReduxField(FIELDS.BIRTHDATE)}\r\n                      rules={{ validate: value => validateConfirm(value, watchBirthday) }} />\r\n                  </FieldSlot>\r\n                </FieldRow>\r\n              </FieldSection>\r\n              <FieldSection title=\"Social Security Number (optional)\" withDivider={false}>\r\n                <FieldRow>\r\n                  <FieldSlot md={4}>\r\n                    <SSNtext isRequired={!watchSSNLater && !watchNoSSN} name={FIELDS.SSN} inputLabel='SSN' placeholder='SSN' variant='outlined' rules={{}} defaultValue=\"\"/>\r\n                      <Checkbox name='noSSN' label=\"I do not have a SSN\" />\r\n                      <br/>\r\n                      <Checkbox name='SSNlater' label=\"I will enter my SSN later\" />\r\n                  </FieldSlot>\r\n                  <FieldSlot>\r\n                  <SSNtext isRequired={!watchSSNLater && !watchNoSSN} name={`${FIELDS.SSN}-confirm`} inputLabel='Confirm SSN' placeholder='Confirm SSN' variant='outlined'\r\n                    rules={(!watchSSNLater && !watchNoSSN) ? { validate: value => validateConfirm(value, watchSSN) }: {}} defaultValue=\"\" />\r\n                  </FieldSlot>\r\n                </FieldRow>\r\n              </FieldSection>\r\n\r\n              <FieldSection>\r\n                <FieldRow>\r\n                  <button type=\"submit\" className=\"button\" onClick={handleSubmit(onSubmit, onError)}>Save</button>\r\n                </FieldRow>\r\n              </FieldSection>\r\n            </form>\r\n          </div>\r\n        </div>\r\n      </FormProvider>\r\n    </PortalView>\r\n  );\r\n}\r\n\r\nexport default Registration;\r\n","import React, {useEffect, useState} from 'react';\r\nimport { Page, Text, View, Image, Document, StyleSheet, PDFDownloadLink, Font } from '@react-pdf/renderer';\r\nimport apiClient from \"../utils/API\";\r\nimport {FIELDS} from \"../store/form/fields\";\r\nimport {actions} from \"../store\";\r\nimport {getLatestActiveYear, getReduxField} from \"../utils\";\r\n\r\nfunction TribalApplicationPdf() {\r\n\r\n  const [tribeName, setTribeName] = useState('')\r\n  const [appId, setAppId] = useState()\r\n  const [updating, setUpdating] = useState(false)\r\n\r\n  const fieldKeys = [\r\n    FIELDS.OTSG__ENROLLED_TRIBE,\r\n    FIELDS.FIRST_NAME,\r\n    FIELDS.MIDDLE_INITIALS,\r\n    FIELDS.LAST_NAME,\r\n    FIELDS.OTHER_NAMES,\r\n  ];\r\n\r\n  useEffect(() => {\r\n    (async () => {\r\n      setUpdating(true)\r\n      const yearRetrieved = await getLatestActiveYear('otsg');\r\n      await actions.fetchBasicFields(fieldKeys, yearRetrieved);\r\n      const tribes = await apiClient.get(`/tribe/tribes`);\r\n      tribes.forEach(r => {\r\n        if(r.Id == getReduxField(FIELDS.OTSG__ENROLLED_TRIBE)) {\r\n          setTribeName(r.Name)\r\n          return false\r\n        }\r\n      })\r\n      const app = await apiClient.get(`/application?`+'lookup.ProgramCode=otsg&lookup.year='+yearRetrieved);\r\n      console.log('app', app)\r\n      console.log('appid', app[0].AppId)\r\n      setAppId(app[0].AppId)\r\n      setUpdating(false)\r\n    })()\r\n  }, [])\r\n\r\n// Create styles\r\n  Font.register({\r\n    family: 'Open Sans',\r\n    fonts: [\r\n      { src: 'https://cdn.jsdelivr.net/npm/open-sans-all@0.1.3/fonts/open-sans-regular.ttf' },\r\n      { src: 'https://cdn.jsdelivr.net/npm/open-sans-all@0.1.3/fonts/open-sans-600.ttf', fontWeight: 600 },\r\n      { src: 'https://cdn.jsdelivr.net/npm/open-sans-all@0.1.3/fonts/open-sans-800.ttf', fontWeight: 800 }\r\n    ]\r\n  });\r\n\r\n  const styles = StyleSheet.create({\r\n    page: {\r\n      backgroundColor: '#FFFFFF',\r\n      marginLeft: 20,\r\n      marginRight: 30,\r\n      fontFamily: 'Open Sans',\r\n      fontSize:9\r\n    },\r\n    section: {\r\n      marginTop: 10,\r\n      marginBottom: 0,\r\n      marginLeft: 20,\r\n      marginRight: 30,\r\n      padding: 0,\r\n    },\r\n    header: {\r\n      width: '95%',\r\n      height: 'auto'\r\n    },\r\n    sectionHeading: {\r\n      width: '95%',\r\n      color: '#000000',\r\n      fontSize: 10,\r\n      fontWeight: 800,\r\n      borderBottom: 1\r\n    },\r\n    paragraph: {\r\n      width: '95%',\r\n      fontSize: 9,\r\n      marginBottom: 10\r\n    },\r\n    thinParagraph: {\r\n      width: '95%',\r\n      fontSize: 9,\r\n      marginBottom: 0\r\n    },\r\n    paragraphCenter: {\r\n      width: '90%',\r\n      fontSize: 9,\r\n      marginBottom: 10,\r\n      textAlign: 'center'\r\n    },\r\n    bold: {\r\n      fontWeight: 800\r\n    },\r\n    underlined: {\r\n      textDecoration: 'underline',\r\n      marginLeft: 10,\r\n      marginRight: 10\r\n    },\r\n    boxed: {\r\n      backgroundColor: '#dddddd',\r\n      border: 1,\r\n      marginTop: 5,\r\n      marginBottom: 10,\r\n      marginLeft: 20,\r\n      marginRight: 40,\r\n      paddingRight: 0,\r\n      paddingLeft: 15,\r\n      paddingTop: 10,\r\n      textAlign: 'center',\r\n      width: '90%'\r\n    },\r\n    centerHeading: {\r\n      width: '95%',\r\n      color: '#000000',\r\n      fontSize: 9,\r\n      fontWeight: 800,\r\n      borderBottom: 1,\r\n      textAlign: 'center'\r\n    },\r\n    box: {\r\n      width: 10,\r\n      height: 10,\r\n      display: 'inline-block',\r\n      border: 1\r\n    },\r\n    footNote: {\r\n      fontSize: 6,\r\n    },\r\n    footNoteRight: {\r\n      fontSize: 6,\r\n      textAlign: 'right'\r\n    },\r\n    emptySpace: {\r\n      height: 50,\r\n      width: '100%'\r\n    }\r\n  });\r\n\r\n  const MyDocument = () => (\r\n    <Document>\r\n      <Page size=\"A4\" style={styles.page}>\r\n        <View style={styles.section}>\r\n          <Image src={'/pdf_header.png'} style={styles.header}></Image>\r\n        </View>\r\n        <View style={styles.section}>\r\n          <Text style={styles.sectionHeading}>STUDENT COMPLETE THIS SECTION</Text>\r\n        </View>\r\n        <View style={styles.section}>\r\n          <Text style={styles.paragraph}>\r\n            Please sign and submit this form to your tribe's Enrollment Officials.\r\n          </Text>\r\n          <Text style={styles.paragraph}>\r\n            <Text style={styles.bold}>Release Authorization:</Text>\r\n          </Text>\r\n          <Text style={styles.paragraph}>\r\n            “By signing this form, I authorize my tribal office to release my tribal enrollment information to the Higher Education\r\n            Coordinating Commission (HECC) and the Office of Student Access and Completion (OSAC) for the purposes of determining\r\n            eligibility for the Oregon Tribal Student Grant. The HECC and the OSAC will only share membership verification status\r\n            information with eligible Oregon colleges or universities for the purpose of determining eligibility and awarding for the\r\n            Oregon Tribal Student Grant.”\r\n          </Text>\r\n          <Text style={styles.paragraph}>\r\n            <Text style={styles.bold}>First Name:&nbsp;</Text> <Text style={styles.underlined}>&nbsp;&nbsp;&nbsp;{ getReduxField(FIELDS.FIRST_NAME) }&nbsp;&nbsp;&nbsp;</Text>\r\n            <Text style={styles.bold}>&nbsp;M.I.:&nbsp;</Text> <Text style={styles.underlined}>&nbsp;&nbsp;&nbsp;{ getReduxField(FIELDS.MIDDLE_INITIALS) }&nbsp;&nbsp;&nbsp;</Text>\r\n            <Text style={styles.bold}>&nbsp;Last Name:&nbsp;</Text> <Text style={styles.underlined}>&nbsp;&nbsp;&nbsp;{ getReduxField(FIELDS.LAST_NAME) }&nbsp;&nbsp;&nbsp;</Text>\r\n          </Text>\r\n          <Text style={styles.paragraph}>\r\n            <Text style={styles.bold}>Former Names:&nbsp;</Text> <Text style={styles.underlined}>&nbsp;&nbsp;&nbsp;{ getReduxField(FIELDS.OTHER_NAMES) }&nbsp;&nbsp;&nbsp;</Text>\r\n          </Text>\r\n          <Text style={styles.paragraph}>\r\n            <Text style={styles.bold}>Signature:&nbsp;</Text>\r\n            <Text style={styles.underlined}>\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n              </Text>\r\n            <Text style={styles.bold}>&nbsp;Date:</Text>\r\n            <Text style={styles.underlined}>\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n            </Text>\r\n          </Text>\r\n        </View>\r\n        <View style={styles.boxed}>\r\n          <Text style={styles.centerHeading}>\r\n            TRIBAL ENROLLMENT VERIFICATION\r\n          </Text>\r\n          <Text style={styles.paragraphCenter}>\r\n            To be completed by tribe's enrollment official or office\r\n          </Text>\r\n        </View>\r\n        <View style={styles.section}>\r\n          <Text style={styles.sectionHeading}>ENROLLMENT OFFICER COMPLETE THIS SECTION</Text>\r\n        </View>\r\n        <View style={styles.section}>\r\n          <Text style={styles.paragraph}>\r\n            The above named student is applying for the Oregon Tribal Student Grant from the Office of Student Access and\r\n            Completion, an office of the Higher Education Coordinating Commission. OSAC is requesting verification of tribal enrollment\r\n            from your office. Please return this form within 2 weeks of receiving it from the student. OSAC reserves the right to validate\r\n            all enrollments.\r\n          </Text>\r\n          <Text style={styles.paragraph}>\r\n            <Text style={styles.bold}>Name of Tribe:&nbsp;</Text> <Text style={styles.underlined}>&nbsp;&nbsp;&nbsp;{ tribeName }&nbsp;&nbsp;&nbsp;</Text>\r\n          </Text>\r\n          <Text style={styles.paragraph}>\r\n            <Text style={styles.bold}>\r\n              Is this applicant an enrolled member of the tribe? Yes [ ]  No [ ]\r\n            </Text>\r\n          </Text>\r\n          <Text style={styles.paragraph}>\r\n            <Text style={styles.footNote}>\r\n              *Please do not supply blood quantum or CDIB or roll numbers. We only need verification of enrollment.\r\n            </Text>\r\n          </Text>\r\n          <Text style={styles.paragraph}>\r\n            <Text style={styles.bold}>Enrollment Officer Name:&nbsp;</Text>\r\n            <Text style={styles.underlined}>\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n            </Text>\r\n          </Text>\r\n          <Text style={styles.paragraph}>\r\n            <Text style={styles.bold}>Address:&nbsp;</Text>\r\n            <Text style={styles.underlined}>\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n            </Text>\r\n            <Text style={styles.bold}>&nbsp;Title:&nbsp;</Text>\r\n            <Text style={styles.underlined}>\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n            </Text>\r\n          </Text>\r\n          <Text style={styles.paragraph}>\r\n            <Text style={styles.bold}>City/State/Zip:&nbsp;</Text>\r\n            <Text style={styles.underlined}>\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n            </Text>\r\n            <Text style={styles.bold}>&nbsp;Date:&nbsp;</Text>\r\n            <Text style={styles.underlined}>\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n            </Text>\r\n          </Text>\r\n          <Text style={styles.paragraph}>\r\n            <Text style={styles.bold}>Office Phone:&nbsp;</Text>\r\n            <Text style={styles.underlined}>\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n            </Text>\r\n            <Text style={styles.bold}>&nbsp;Office Email:&nbsp;</Text>\r\n            <Text style={styles.underlined}>\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n            </Text>\r\n          </Text>\r\n          <Text style={styles.paragraph}>\r\n            <Text style={styles.footNote}>\r\n              Supplying an email allows us to send an electronic version of this form directly to the enrollment office, if acceptable.\r\n            </Text>\r\n          </Text>\r\n          <Text style={styles.paragraph}>\r\n            <Text style={styles.underlined}>\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n            </Text>\r\n            <Text style={styles.bold}>Initial here if you would like to participate in OSAC's electronic verifictiaon system in the future.</Text>\r\n          </Text>\r\n          <Text style={styles.paragraph}>\r\n            <Text style={styles.bold}>&nbsp;Signature:&nbsp;</Text>\r\n            <Text style={styles.underlined}>\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n            </Text>\r\n          </Text>\r\n          <Text style={styles.paragraph}>\r\n            <Text style={styles.bold}>&nbsp;If applicable, affix the tribal seal here:&nbsp;</Text>\r\n          </Text>\r\n          <Text style={styles.paragraph}></Text>\r\n          <Text style={styles.paragraph}></Text>\r\n          <Text style={styles.paragraph}></Text>\r\n          <Text style={styles.paragraph}></Text>\r\n          <Text style={styles.paragraph}></Text>\r\n          <Text style={styles.thinParagraph}>\r\n            <Text style={styles.footNote}>\r\n              <Text>\r\n                Completed forms can be submitted to OSAC by the tribal enrollment verification official:\r\n              </Text>\r\n            </Text>\r\n          </Text>\r\n          <Text style={styles.thinParagraph}>\r\n            <Text style={styles.footNote}>\r\n              • Emailed as an attachment to PublicPrograms@hecc.oregon.gov<br/>\r\n            </Text>\r\n          </Text>\r\n          <Text style={styles.thinParagraph}>\r\n            <Text style={styles.footNote}>\r\n              • Mailed to the Office of Student Access and Completion, 3225 25th Street SE, Salem, OR 97302<br/>\r\n            </Text>\r\n          </Text>\r\n          <Text style={styles.thinParagraph}>\r\n            <Text style={styles.footNoteRight}>\r\n             App# {appId}\r\n            </Text>\r\n          </Text>\r\n        </View>\r\n      </Page>\r\n    </Document>\r\n  );\r\n\r\n  return (\r\n    <PDFDownloadLink className='button' document={<MyDocument />} fileName=\"enrollment_verification_form.pdf\">\r\n      {({ blob, url, loading, error }) => (loading || updating ? 'Generating PDF...' : 'Download or print the Enrollment Verification Form PDF')}\r\n    </PDFDownloadLink>\r\n  );\r\n}\r\nexport default TribalApplicationPdf;\r\n","import { useEffect, useState } from \"react\";\r\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\r\nimport Button from './Button';\r\nimport { useHistory } from 'react-router-dom';\r\nimport TribalApplicationPdf from \"./TribalApplicationPdf\";\r\nimport { Component } from 'react';\r\nimport apiClient from \"../utils/API\";\r\n\r\nconst submissionTime = new Date();\r\nconst date = submissionTime.toLocaleDateString();\r\nconst time = submissionTime.toLocaleString('en-US', { hour: 'numeric',minute: 'numeric', hour12: true });\r\n\r\n/**\r\n * block to give summary of an application that was just submitted to give a feeling of completion\r\n * @param {*} param0 \r\n * @returns {Component}\r\n */\r\nexport default function CompleteSubmission({ applicationHelper, details, pdfData, onEdit, ...props }) {\r\n\r\n  const history = useHistory();\r\n\r\n  const programCode = applicationHelper?.programCode ?? details?.code;\r\n  const applicationYear = applicationHelper?.year ?? details?.year;\r\n  const programTitle = applicationHelper?.title ?? details?.title;\r\n  \r\n  const goToDashboard = () => {\r\n    history.push('/dashboard')\r\n  }\r\n\r\n  const [scholarshipsSuccessMessage, setScholarshipsSuccessMessage] = useState(null)\r\n\r\n  useEffect(() => {\r\n    (async () => {\r\n          const result = await apiClient.get(\"code?lookup.code=ScholarshipCompleted&lookup.codeType=StudentMessage\");\r\n          setScholarshipsSuccessMessage(result?.Message);                \r\n    })()\r\n  }, [])\r\n\r\n  return (\r\n    <div name='ApplicationsPage' className=\"wrapper wrapper--narrow\">\r\n      <div className=\"component rhythm\">\r\n        <h3 className=\"heading heading--h3\">Application Successfully Submitted!</h3>\r\n        <h4 className=\"heading heading--h4\"><b>{programTitle} {programCode != \"SCH\" && \"Grant\"} {applicationYear}</b></h4>\r\n        <p><em>{date} at {time}</em></p>\r\n\r\n        <div className=\"\">\r\n          <div className=\"rhythm text text--align-center\">\r\n            <h5 className=\"heading heading--h5\">Application Progress</h5>\r\n            <div style={{height: '3rem', background: '#4ea9b0', borderRadius: '5px', display: 'flex', alignItems: 'center', justifyContent: 'center'}}>\r\n              <div style={{color: 'white'}}>100% Completed</div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        { programCode === 'OTSG' &&\r\n          <div className=\"component\">\r\n            <div className=\"rhythm text\">\r\n              <div style={{marginBottom: '2rem'}}>\r\n                <h5 className=\"heading heading--h5\" style={{marginBottom: '1rem'}}>Instructions</h5>\r\n                Sign and send the Enrollment Verification Form to your tribe. The form can be electronically signed and emailed to your tribe’s\r\n                Enrollment Office (or designated office by your tribe) tribe email address. Please contact your enrollment office if you would like to mail, fax or submit the form in person.\r\n              </div>\r\n\r\n              <TribalApplicationPdf data={pdfData} />\r\n\r\n            </div>\r\n          </div>\r\n        }\r\n        { programCode === 'SCH' &&\r\n          <div dangerouslySetInnerHTML={{ __html: scholarshipsSuccessMessage }} />       \r\n        }\r\n\r\n\r\n        <div className=\"component\">\r\n          {applicationHelper && \r\n            <ul className=\"list list--blank list--checklist\">\r\n              <li className=\"li\">\r\n                <CheckCircleIcon style={{color: '#429D5B'}}/>\r\n                Profile\r\n              </li>                  \r\n              {applicationHelper.sections.map(section => \r\n                <li className=\"li\">\r\n                  <CheckCircleIcon style={{color: '#429D5B'}}/>\r\n                  {section.title}\r\n                </li>  \r\n              )}\r\n            </ul>\r\n          }\r\n\r\n          { programCode === 'CH'  &&\r\n          <ul className=\"list list--blank list--checklist\">\r\n            <li className=\"li\">\r\n              <CheckCircleIcon style={{color: '#429D5B'}}/>\r\n              Profile\r\n            </li>          \r\n            <li className=\"li\">\r\n              <CheckCircleIcon style={{color: '#429D5B'}}/>\r\n              Foster Care\r\n            </li>\r\n            <li className=\"li\">\r\n              <CheckCircleIcon style={{color: '#429D5B'}}/>\r\n              College Terms\r\n            </li>\r\n          </ul>\r\n          }\r\n\r\n          { programCode === 'ORP' &&\r\n          <ul className=\"list list--blank list--checklist\">\r\n            <li className=\"li\">\r\n              <CheckCircleIcon style={{color: '#429D5B'}}/>\r\n              Profile\r\n            </li>\r\n            <li className=\"li\">\r\n              <CheckCircleIcon style={{color: '#429D5B'}}/>\r\n              College Terms\r\n            </li>\r\n            <li className=\"li\">\r\n              <CheckCircleIcon style={{color: '#429D5B'}}/>\r\n              GPA/Transcripts\r\n            </li>\r\n          </ul>\r\n          }\r\n\r\n\r\n          { programCode === 'ONGSTA' &&\r\n            <ul className=\"list list--blank list--checklist\">\r\n              <li className=\"li\">\r\n                <CheckCircleIcon style={{color: '#429D5B'}}/>\r\n                Profile\r\n              </li>\r\n              <li className=\"li\">\r\n                <CheckCircleIcon style={{color: '#429D5B'}}/>\r\n                Service History\r\n              </li>\r\n              <li className=\"li\">\r\n                <CheckCircleIcon style={{color: '#429D5B'}}/>\r\n                College Plans\r\n              </li>\r\n              <li className=\"li\">\r\n                <CheckCircleIcon style={{color: '#429D5B'}}/>\r\n                Planned Enrollment\r\n              </li>\r\n            </ul>\r\n          }\r\n        </div>\r\n\r\n        <div className=\"component\">\r\n          <Button onClick={goToDashboard} name='BackToDashboard' label='Back to dashboard'/>\r\n          { <Button onClick={onEdit} name='Edit' label='Edit application' variant='outline'/> }\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n","import { useSelector } from 'react-redux';\r\nimport PortalView from './../../components/Global/PortalView';\r\nimport CompleteSubmission from '../../components/CompleteSubmission';\r\n\r\nconst details = {\r\n    //title: 'Oregon National Guard',\r\n     title: 'Chafee',\r\n    // title: 'Oregon Promise',\r\n    // title: 'Student Child Care',\r\n    year: 2021,\r\n    description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nunc mi ipsum faucibus vitae aliquet.',\r\n}\r\n\r\nfunction Placeholder() {\r\n\r\n    const authState = useSelector((state) => state.auth);\r\n\r\n    return (\r\n        <PortalView>\r\n            <CompleteSubmission details={details}/>\r\n        </PortalView>\r\n    );\r\n}\r\n\r\nexport default Placeholder;","import React, { useEffect } from 'react';\r\nimport _debounce from 'lodash.debounce'\r\nimport Modal from '../Alerts/Modal';\r\nimport { useState } from 'react';\r\nimport auth from '../../auth';\r\n\r\n\r\nfunction Overlay({\r\n    children,\r\n    visible = false\r\n}){\r\n    useEffect(()=>{\r\n        if(visible){\r\n            document.documentElement.style.overflow = 'hidden';\r\n        }\r\n        else {\r\n            document.documentElement.style.overflow = 'auto';\r\n        }\r\n        return () => document.documentElement.style.overflow = 'auto';\r\n    },[visible])\r\n\r\n  return (\r\n    visible ? <div className=\"overlay\">{children}</div> : null\r\n  )\r\n}\r\n\r\nexport default Overlay;","export default __webpack_public_path__ + \"static/media/login-student.4e224d39.jpg\";","import React, { useEffect, useState } from 'react';\r\nimport Header from '../../components/Global/Header';\r\nimport Footer from '../../components/Global/Footer';\r\nimport auth from '../../auth';\r\nimport { useHistory } from 'react-router';\r\nimport { useSelector } from 'react-redux';\r\nimport apiClient from '../../utils/API';\r\nimport Overlay from '../../components/Utility/Overlay';\r\nimport Spinner from '../../components/Utility/Spinner';\r\nimport store, { actions } from './../../store';\r\nimport { FIELDS } from '../../store/form/fields';\r\nimport { getReduxField } from '../../utils';\r\n\r\nimport ImgLoginStudent from '../../images/login-student.jpg';\r\n\r\nfunction StudentPortalLanding() {\r\n\r\n  const history = useHistory();\r\n  const { isLoggedIn } = useSelector((state) => state.auth);\r\n\r\n  const [isLoginInProgress, setIsLoginInProgress] = useState(false);\r\n\r\n  console.log('is logged in?', isLoggedIn)\r\n\r\n\r\n  const handleLogin = (e) => {\r\n    console.log('handle login fired')\r\n    console.log('is logged in true')\r\n    setIsLoginInProgress(true)\r\n    e.preventDefault();\r\n    auth.login();\r\n  }\r\n\r\n  useEffect(()=>{\r\n    (async()=>{\r\n      console.log('useffect login called')\r\n      if(isLoggedIn){\r\n        setIsLoginInProgress(true)\r\n        console.log('loggedin true')\r\n        let isUserRegistered;\r\n        const username = auth.getUsername();\r\n        console.log('username', username)\r\n        const email = auth.getUserEmail();\r\n        console.log('email', email)\r\n        try {\r\n          const account = await apiClient.get(`/account`, {\r\n            username\r\n          })\r\n          isUserRegistered = !!account;\r\n          console.log('got account info')\r\n        } catch(err){\r\n          console.log('account request error');\r\n          const status = err?.request?.status;\r\n          // if 403, and 409 http status - we need to trigger account verification and this implies existing account\r\n          switch (status) {\r\n            case 403:\r\n              console.log('login case 403');\r\n              history.push('/dashboard');\r\n            break;\r\n            case 409:\r\n              console.log('login case 409');\r\n              history.push('/dashboard');\r\n            break;\r\n            default:\r\n              console.log('login case default');\r\n              isUserRegistered = false;\r\n            break;\r\n          }\r\n\r\n        } finally {\r\n          console.log('set login in progess');\r\n          //setIsLoginInProgress(false)\r\n        }\r\n        if(!isUserRegistered){\r\n          console.log('user not registered');\r\n          try{\r\n            console.log('getting account info');\r\n            await apiClient.post(`/account`, {\r\n              \"Username\": username,\r\n              \"Email\": email,\r\n              \"Phone\": (Math.round(Math.random()*10000000000))\r\n            })\r\n            console.log('got account info');\r\n          } catch(err){\r\n            setIsLoginInProgress(false)\r\n            alert('An error has occured. Please try again later, or contact SA.Feedback@hecc.oregon.gov for assistance')\r\n          }\r\n        }\r\n\r\n        await actions.fetchBasicFields([\r\n          FIELDS.FIRST_NAME,\r\n          FIELDS.LAST_NAME,\r\n          FIELDS.BIRTHDATE,\r\n        ]);\r\n\r\n        const firstName = getReduxField(FIELDS.FIRST_NAME);\r\n        const lastName = getReduxField(FIELDS.LAST_NAME);      \r\n        const birthdate = getReduxField(FIELDS.BIRTHDATE);\r\n\r\n        if ([!!firstName, !!lastName, !!birthdate].includes(false)){\r\n          console.log('registration redirect');\r\n          history.push('/registration');\r\n        }\r\n        else {\r\n          console.log('dashboard redirect');\r\n          history.push('/dashboard');\r\n        }\r\n        //setIsLoginInProgress(false)\r\n      }\r\n    })();\r\n  },[isLoggedIn])\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <div className=\"pageshell pageshell--fullwidth\">\r\n        <Header />\r\n        <Overlay visible={isLoginInProgress}>\r\n          <div style={{ height: '100vh', width: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\r\n            <div style={{ 'textAlign': 'center'}}><Spinner/><p>Logging In...</p></div>\r\n          </div>\r\n        </Overlay>\r\n        <div className=\"pageshell__main\">\r\n          <div className=\"marquee\">\r\n            <div className=\"marquee__layout\">\r\n              <div className=\"marquee__media\"><img alt=\"Lorem ipsum dolor sit amet...\" className=\"image marquee__image something\" src={ImgLoginStudent} /></div>\r\n              <div className=\"marquee__content rhythm\">\r\n                <div className=\"marquee__text rhythm\">\r\n                  <h1 className=\"heading heading--h1\">Student Portal</h1>\r\n                  <h2 className=\"heading heading--h2\">Apply for over <i>$38 million</i> in Grants and Scholarships</h2>\r\n                  <div className=\"marquee__cta\">\r\n                    <div className=\"richtext\">\r\n                      <p>Login to see your applications</p>\r\n                    </div>\r\n                    <button href=\"#marquee-cta\" className=\"link link--button button--outline\" onClick={handleLogin} disabled={isLoginInProgress}>Returning users login</button>\r\n                    <button href=\"#marquee-cta\" className=\"link link--button button--outline\" onClick={handleLogin} disabled={isLoginInProgress}>Make a new account</button>\r\n                  </div>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <Footer />\r\n\r\n      </div>\r\n    </React.Fragment>\r\n  );\r\n};\r\n\r\nexport default StudentPortalLanding;\r\n","import { useForm, FormProvider } from \"react-hook-form\";\r\nimport { useState, useEffect } from 'react';\r\nimport { FieldSection, FieldRow, FieldSlot } from '../../components/Forms/FieldSection';\r\nimport FormSection from '../../components/FormSection';\r\nimport { useDispatch } from 'react-redux';\r\nimport DropdownAnswer from '../../components/answer/DropdownAnswer';\r\nimport { FIELDS } from \"../../store/form/fields\";\r\nimport { Alert } from \"@material-ui/core\";\r\nimport RequirementSet from \"../../utils/dtos/RequirementSet\";\r\nimport apiClient from \"../../utils/API\";\r\n\r\nfunction EditCitizenShip({ onChange, onCancel, section }) {\r\n\r\n    const methods = useForm({  mode: 'onBlur'});\r\n    const { errors, formState, getValues, setValue, handleSubmit, watch } = methods;\r\n    const dispatch = useDispatch();\r\n\r\n    const [loading, setLoading] = useState(false);\r\n    const [completionData, setCompletionData] = useState(null);\r\n    const sectionCompletion = new RequirementSet(completionData); \r\n    const completion = sectionCompletion.getField(FIELDS.CITIZENSHIP_STATUS);\r\n    \r\n    async function getCompletionReport() {\r\n        const data = await apiClient.getCompletionReport(\"SCH\", section.year, [FIELDS.CITIZENSHIP_STATUS])\r\n        setCompletionData(data);\r\n        return new RequirementSet(data).getField(FIELDS.CITIZENSHIP_STATUS);\r\n    }\r\n\r\n\r\n    const onSubmit = async (data, e) => {\r\n        await section.saveAnswers(data, dispatch);                          \r\n        if (typeof onChange === 'function'){\r\n            onChange(true);\r\n        }        \r\n    };\r\n\r\n    const onError = (errors, e) => {\r\n        // console.log('ERROR',errors, e);\r\n    }\r\n\r\n    useEffect(() => {\r\n        getCompletionReport();\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n      \r\n        window.addEventListener('beforeunload', alertUser)\r\n        return () => {\r\n            window.removeEventListener('beforeunload', alertUser)\r\n        }        \r\n    }, [])\r\n    const alertUser = e => {\r\n        e.preventDefault()\r\n        e.returnValue = ''\r\n    }\r\n\r\n    return (\r\n        <FormProvider {...methods} >\r\n            <form onSubmit={handleSubmit(onSubmit, onError)} >\r\n                <FormSection title='Citizenship Status' isEditable={true} onSaveClick={handleSubmit(onSubmit, onError)} onCancelClick={onCancel} loading={loading}>\r\n\r\n                    {completion?.isDisqualifying === true &&\r\n                        <Alert severity=\"error\" className=\"alert alert--error\">\r\n                            <p>                          \r\n                                International students (such as F-1, M-1, and J-1 visas) are not eligible to receive OSAC Scholarships.                             \r\n                            </p>\r\n                        </Alert>\r\n                    }\r\n\r\n                    <FieldSection title=\"Select Your Citizenship Status\" withDivider={true}>\r\n                        <FieldRow>\r\n                            <FieldSlot md={8}>\r\n                                <DropdownAnswer answer={section.getAnswerByField(FIELDS.CITIZENSHIP_STATUS)} label='Citizenship Status' variant='outlined' isRequired={true} />\r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n                    </FieldSection>\r\n                </FormSection>\r\n            </form>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\nexport default EditCitizenShip;\r\n","import { useSelector } from 'react-redux';\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport { useState, useEffect } from 'react';\r\nimport { FieldSection, FieldRow, FieldSlot } from '../../components/Forms/FieldSection';\r\nimport { FIELDS } from '../../store/form/fields';\r\nimport FormSection from '../../components/FormSection';\r\nimport { open } from \"../../store/snack/actions\";\r\nimport { useDispatch } from 'react-redux';\r\nimport { actions } from './../../store';\r\nimport DropdownAnswer from '../../components/answer/DropdownAnswer';\r\nimport BooleanAnswer from '../../components/answer/BooleanAnswer';\r\n\r\nfunction EditFamilyInfo({ onChange, onCancel, section }) {\r\n\r\n    const methods = useForm({\r\n      mode: 'onBlur'\r\n    });\r\n    const { handleSubmit } = methods;\r\n\r\n    const [loading, setLoading] = useState(false)\r\n    const dispatch = useDispatch();\r\n\r\n    const onSubmit = async (data) => {\r\n      try {\r\n        setLoading(true)\r\n        const result = await actions.submitForm(data,[],[]);\r\n        if(typeof onChange === 'function'){\r\n          onChange(true);\r\n        }\r\n        // console.log(data, e);\r\n      } catch (e) {\r\n        dispatch(open({\r\n          message: e.message,\r\n          severity: \"success\",\r\n        }))\r\n      } finally {\r\n        setLoading(false)\r\n      }\r\n    };\r\n\r\n    const onError = () => {\r\n      // console.log('ERROR',errors, e);\r\n    }\r\n\r\n    useEffect(() => {\r\n      window.addEventListener('beforeunload', alertUser)\r\n      return () => {\r\n        window.removeEventListener('beforeunload', alertUser)\r\n      }\r\n    }, [])\r\n    const alertUser = e => {\r\n      e.preventDefault()\r\n      e.returnValue = ''\r\n    }\r\n\r\n    return (\r\n      <FormProvider {...methods} >\r\n        <form onSubmit={handleSubmit(onSubmit, onError)} >\r\n          <FormSection title='My Family Information' isEditable={true} onSaveClick={handleSubmit(onSubmit, onError)} onCancelClick={onCancel} loading={loading}>\r\n  \r\n            <FieldSection title=\"Parent or Guardians Highest Level of Completed Education\" withDivider={true}>\r\n              <FieldRow>\r\n                <FieldSlot>\r\n                  <DropdownAnswer isRequired answer={section.getAnswerByField(FIELDS.ED_LEVEL_FATHER)} label='Parent 1' />\r\n                </FieldSlot>\r\n                <FieldSlot>\r\n                  <DropdownAnswer isRequired answer={section.getAnswerByField(FIELDS.ED_LEVEL_MOTHER)} label='Parent 2'  />\r\n                </FieldSlot>\r\n                <FieldSlot>\r\n                    <BooleanAnswer isRequired answer={section.getAnswerByField(FIELDS.FIRST_GEN_IMMIGRANT)} label='Are you a first-generation immigrant?'  />\r\n                </FieldSlot>\r\n              </FieldRow>\r\n            </FieldSection>\r\n\r\n          </FormSection>\r\n        </form>\r\n      </FormProvider>\r\n    );\r\n}\r\n\r\nexport default EditFamilyInfo;\r\n","function Card({children, style, ...props}) {\r\n  const defaultStyle = { margin: '3rem 0', backgroundColor: '#ededed', padding: '1.5rem'};\r\n\r\n  return (\r\n    <div className=\"background rhythm\" style={style || defaultStyle} {...props}>\r\n      {children}\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default Card;","import { actions } from \"../../../store\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport _get from 'lodash.get';\r\n\r\n/**\r\n * standardize the way we prompt for multi-answer questions\r\n * \r\n * @param {SectionHelper} param0.section the section maintaining original answer state\r\n * @param {String} param0.name the field key for this answer collection\r\n * @returns {Component}\r\n */\r\nfunction RepeatableQuestion({ section, name, answerFilter, children, ...props }) {\r\n\r\n    const originalAnswers = section.getAllAnswersByField(name, answerFilter).filter(x => !x.PlaceholderId);\r\n    const [addedAnswers, setAddedAnswers] = useState([]);\r\n    const [deletedAnswers, setDeletedAnswers] = useState([]);\r\n    const answers = [...originalAnswers, ...addedAnswers].filter(x => !deletedAnswers.some(a => a.Id == x.Id));\r\n\r\n    const count = answers.length;\r\n    \r\n    const [deletedIndices, setDeletedIndices] = useState([]);\r\n    const [availableIndices, setAvailableIndices] = useState([...new Array(count)].map((_, i) => i));\r\n\r\n    // keep track of previously deleted indices to disable auto population of value from redux store\r\n    const [previouslyDeletedIndices, setPreviouslyDeletedIndices] = useState({});\r\n\r\n    // get redux state and enuerate field array if exists.\r\n    const formState = useSelector(state => state.form);\r\n    const existingFieldLength = _get(formState, `fields.${name}.length`, 0);\r\n\r\n    useEffect(() => {\r\n        if (existingFieldLength > 0) {\r\n            setAvailableIndices([...new Array(existingFieldLength)].map((_, i) => i))\r\n        }\r\n    }, [existingFieldLength])\r\n\r\n    function generateRandomId(){\r\n        var minm = 1000000;\r\n        var maxm = 9999999;\r\n        return Math.floor(Math.random() * (maxm - minm + 1)) + minm;\r\n    }\r\n\r\n    const handleAdd = (answerTemplate) => () => {\r\n        let newId = -generateRandomId();\r\n        let newIndex = 0;\r\n        // re-use past deleted indices\r\n        if (deletedIndices.length) {\r\n            // gets the lowest valued index in deletedIndices\r\n            newIndex = Math.min(...deletedIndices);\r\n            setDeletedIndices(deletedIndices.filter(i => i !== newIndex));\r\n        }\r\n        else {\r\n            newIndex = count;\r\n        }\r\n        setAvailableIndices([...availableIndices, newIndex])\r\n\r\n        // Give new activity a unique temp id\r\n        answerTemplate.Id = newId\r\n        answerTemplate.FieldKey = name;\r\n        answerTemplate.Index = newIndex;\r\n        // Flag activity as new\r\n        answerTemplate.isNew = true;\r\n             \r\n        setAddedAnswers([...addedAnswers, answerTemplate]);\r\n    }\r\n    const handleDelete = (answer) => () => { \r\n        const index = answer.Index; \r\n        setDeletedAnswers([...deletedAnswers, answer]);\r\n\r\n        if (!answer?.isNew) {\r\n            actions.addDeletedRepeatableFieldId({ name, id : answer.Id  });\r\n        }\r\n\r\n        setDeletedIndices([...deletedIndices, index]);\r\n        setAvailableIndices(availableIndices.filter(i => i !== index));\r\n        setPreviouslyDeletedIndices({...previouslyDeletedIndices, [index]: 1})\r\n    }\r\n\r\n    return children(answers, handleAdd, handleDelete, previouslyDeletedIndices);\r\n       \r\n}\r\n\r\nexport default RepeatableQuestion;","import react, { useEffect } from 'react';\r\nimport { useState } from 'react';\r\nimport apiClient from '../../utils/API';\r\nimport DropdownSearch from '../DropdownSearch';\r\nimport sortBy from 'lodash/sortBy'\r\n\r\n/**\r\n * \r\n */\r\nexport const DegreeVariant = {\r\n    ById: 'ById',\r\n    ByAbbreviation: 'ByAbbreviation'\r\n};\r\n\r\n/**\r\n * \r\n */\r\nexport default ({ listItems, valueVariant = DegreeVariant.ById, ...props}) => {\r\n\r\n    const [items,setItems] = useState([]);\r\n\r\n    useEffect(()=>{\r\n        (async ()=>{\r\n            const degrees = await apiClient.get(`/degree-program/degree-programs`);\r\n            const sortedDegrees = sortBy(degrees, x => x.SortOrder);\r\n            const degreeItems = sortedDegrees.map(r => ({            \r\n                label: `${r.Name} (${r.Abbreviation})`,\r\n                value: valueVariant === DegreeVariant.ByAbbreviation ? r.Abbreviation : r.Id\r\n            }));\r\n            setItems(degreeItems);\r\n        })();\r\n    },[]);\r\n\r\n    return <DropdownSearch onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }} {...props} placeholder=\"Degree\" listItems={items}/>\r\n\r\n}\r\n","import React, { Fragment } from \"react\";\r\nimport { useFormContext } from \"react-hook-form\";\r\nimport Input from \"../Input\";\r\nimport { repeatableFieldName, } from \"../Utility/RepeatableField\";\r\nimport HiddenInput from \"../Utility/HiddenInput\";\r\nimport AnswerLock from \"./status/AnswerLock\";\r\nimport { FieldRow, FieldSlot } from '../Forms/FieldSection';\r\nimport { AnswerTypeCollegeProps, UNLISTED_COLLEGECODE } from '../../store/form/fields';\r\nimport DegreeDropdown, { DegreeVariant } from '../DataDriven/DegreeDropdown';\r\nimport { useEffect, useState } from \"react\";\r\nimport DropdownSearch from \"../DropdownSearch\";\r\nimport apiClient from \"../../utils/API\";\r\n\r\n\r\n\r\n/**\r\n * prompt for a college the student has already attended for some period of time\r\n * \r\n * @param {*} param0 \r\n */\r\nfunction CollegeHistoryAnswer({ answer, disabled, isPrior = false }) {\r\n\r\n    const methods = useFormContext({ mode: \"onBlur\", });\r\n    const { getValues, watch, setValue } = methods;\r\n\r\n    const i = answer.Index;\r\n    const name = answer.FieldKey;\r\n    const idFieldName = repeatableFieldName(name, i, AnswerTypeCollegeProps.ID);\r\n    const currentSchoolCodeFieldName = repeatableFieldName(name, i,  AnswerTypeCollegeProps.CODE);\r\n    const currentCollegeNameOtherFieldName = repeatableFieldName(name, i, AnswerTypeCollegeProps.UNLISTED_NAME);\r\n    const currentStartTermFieldName = repeatableFieldName(name, i, AnswerTypeCollegeProps.START_TERM);\r\n    const currentStartYearFieldName = repeatableFieldName(name, i, AnswerTypeCollegeProps.START_YEAR);\r\n    const currentStopTermFieldName = repeatableFieldName(name, i, AnswerTypeCollegeProps.END_TERM);\r\n    const currentStopYearFieldName = repeatableFieldName(name, i, AnswerTypeCollegeProps.END_YEAR);  \r\n    const currentDegreeFieldName = repeatableFieldName(name, i, AnswerTypeCollegeProps.DEGREE);\r\n    const currentCreditsFieldName = repeatableFieldName(name, i, AnswerTypeCollegeProps.CREDITS);\r\n       \r\n    const collegeCode = watch(currentSchoolCodeFieldName);\r\n    const isUnlistedCollegeSelected = collegeCode?.value === UNLISTED_COLLEGECODE;\r\n\r\n    const termOptions = [\r\n        { label: 'Fall', value: 'Fall' },\r\n        { label: 'Winter', value: 'Winter' },\r\n        { label: 'Spring', value: 'Spring' },\r\n        { label: 'Summer', value: 'Summer' }\r\n    ];\r\n    const currentYear = (new Date()).getFullYear();\r\n    const range = (start, stop, step) => Array.from({ length: (stop - start) / step + 1 }, (_, i) => start + (i * step));\r\n    const yearOptions = range(currentYear + 3, currentYear - 100, -1).map((year) => {\r\n        return {\r\n            label: year,\r\n            value: year,\r\n        };\r\n    });\r\n\r\n    var [colleges, setColleges] = useState([]);\r\n    useEffect(() => {\r\n        if (!answer.Year)\r\n            return;\r\n\r\n        (async () => {\r\n            const options = await apiClient.getOptionsAsListItems(answer.QuestionKey, answer.Year);\r\n            setColleges(options);\r\n        })();\r\n        \r\n    }, [answer.Year]);\r\n\r\n    const isDisabled = disabled || answer.IsLocked;\r\n\r\n    // if (answer === null || answer.IsLoading || colleges.length === 0) {\r\n    //     return (\r\n    //         <Fragment key={answer.Id}>\r\n    //         </Fragment>\r\n    //     );\r\n    // }\r\n\r\n    return (\r\n        <Fragment key={answer.Id}>\r\n            <div className=\"rhythm\">\r\n                <FieldRow >\r\n                    <FieldSlot>\r\n                        <HiddenInput name={idFieldName} value={answer.Id}/>\r\n                        <DropdownSearch isRequired={!isUnlistedCollegeSelected} \r\n                            placeholder=\"College\" \r\n                            name={currentSchoolCodeFieldName}                     \r\n                            listItems={colleges}\r\n                            includeUnlisted={true} \r\n                            inputLabel={<>College/University Name <AnswerLock answer={answer} /> </>}\r\n                            variant='outlined' />                                           \r\n                    </FieldSlot>\r\n                    {isUnlistedCollegeSelected &&\r\n                        <FieldSlot>\r\n                            <Input disabled={isDisabled} name={currentCollegeNameOtherFieldName}\r\n                                defaultValue={getValues(currentCollegeNameOtherFieldName)}\r\n                                key={currentCollegeNameOtherFieldName}\r\n                                inputLabel=\"Unlisted College/University Name\"\r\n                                variant='outlined'\r\n                                placeholder='College/University Name'\r\n                                isRequired={true} />\r\n                        </FieldSlot>\r\n                    }\r\n\r\n\r\n                    <FieldSlot >\r\n                        <FieldRow >\r\n                            <FieldSlot>\r\n                                <div>Start Date <span style={{ color: 'red' }}>&nbsp;*</span></div>\r\n                                <div>\r\n                                    <DropdownSearch isRequired={true} \r\n                                        placeholder=\"Term\" \r\n                                        name={currentStartTermFieldName}                     \r\n                                        listItems={termOptions} \r\n                                          /> \r\n                                    <DropdownSearch isRequired={true}\r\n                                        placeholder=\"Year\" \r\n                                        name={currentStartYearFieldName}                     \r\n                                        listItems={yearOptions} \r\n                                        />     \r\n                                    \r\n                                </div>                                                                          \r\n                            </FieldSlot>\r\n                            {isPrior &&\r\n                                <FieldSlot>\r\n                                    <div>Stop Date</div>\r\n                                    <div>\r\n                                        <DropdownSearch isRequired={true} \r\n                                            placeholder=\"Term\" \r\n                                            name={currentStopTermFieldName}                     \r\n                                            listItems={termOptions} \r\n                                            /> \r\n                                        <DropdownSearch isRequired={true}\r\n                                            placeholder=\"Year\" \r\n                                            name={currentStopYearFieldName}                     \r\n                                            listItems={yearOptions} \r\n                                            />   \r\n                                    </div>                                     \r\n                                </FieldSlot>\r\n                            }\r\n                        </FieldRow>\r\n\r\n                    </FieldSlot>\r\n                    <FieldSlot>\r\n                        <FieldRow>\r\n                            <FieldSlot>\r\n                                <DegreeDropdown disabled={isDisabled} onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                                    name={currentDegreeFieldName} key={currentDegreeFieldName} defaultValue={getValues(currentDegreeFieldName)}\r\n                                    inputLabel='Degree Earned' variant='outlined' valueVariant={DegreeVariant.ByAbbreviation} />\r\n                            </FieldSlot>\r\n                            <FieldSlot>\r\n                                <Input disabled={isDisabled} name={currentCreditsFieldName} defaultValue={getValues(currentCreditsFieldName)} key={currentCreditsFieldName} inputLabel='Credits Earned' variant='outlined' />\r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n                    </FieldSlot>\r\n                </FieldRow>\r\n            </div>\r\n        </Fragment>\r\n    );\r\n};\r\n\r\nexport default CollegeHistoryAnswer;","import React, { Fragment } from \"react\";\r\nimport { useFormContext } from \"react-hook-form\";\r\nimport { FieldSection, FieldRow, FieldSlot } from './Forms/FieldSection';\r\nimport Button from './Button';\r\nimport MaterialButton from '@material-ui/core/Button'\r\nimport Card from './Card';\r\nimport CardActions from '@material-ui/core/CardActions';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport { FIELDS } from '../store/form/fields';\r\nimport { useSelector } from 'react-redux';\r\nimport { useEffect } from \"react\";\r\nimport RepeatableQuestion from \"./answer/question/RepeatableQuestion\";\r\nimport CollegeHistoryAnswer from \"./answer/CollegeHistoryAnswer\";\r\n\r\nfunction CollegePicker({ collegePickerCallback, section }) {\r\n\r\n  const reduxFormState = useSelector((state) => state.form);\r\n  const methods = useFormContext({ mode: 'onBlur' });\r\n  const { getValues, watch } = methods;\r\n\r\n\r\n  const watchCurrent = watch(FIELDS.CURRENT_COLLEGE);\r\n  const watchPast = watch(FIELDS.PAST_COLLEGE);\r\n\r\n  function isCurrentCollege(a){\r\n    return a.StopTerm == null;\r\n  }\r\n\r\n  const collegeHistorySections = [\r\n    {\r\n      field: FIELDS.CURRENT_COLLEGE,\r\n      filter: a => isCurrentCollege(a),\r\n      title: 'Currently Attending College(s)',\r\n      isPrior: false\r\n    },\r\n    {\r\n      field: FIELDS.PAST_COLLEGE,\r\n      filter: a => !isCurrentCollege(a),\r\n      title: 'Previously Attended College(s)',\r\n      isPrior: true\r\n    },\r\n  ];\r\n\r\n  useEffect(() => {\r\n    // Callback to set \"Cumulative Undergraduate GPA\" as required when appropriate.\r\n    collegePickerCallback && collegePickerCallback(watchCurrent, watchPast)\r\n\r\n  }, [watchCurrent, watchPast, collegeHistorySections]);\r\n\r\n  return (\r\n    <>\r\n      {collegeHistorySections.map(partition =>\r\n        <FieldSection title={partition.title} withDivider={false}>\r\n          <RepeatableQuestion section={section} name={partition.field} answerFilter={partition.filter}>\r\n            {(answers, handleAdd, handleDelete) => {\r\n              return <>\r\n                {answers.map((answer) => {\r\n\r\n                  return (\r\n                    <Fragment key={answer.Id}>\r\n                      <Card style={{ marginTop: '1.5rem', padding: '2rem' }}>\r\n                        <CardContent style={{ margin: '-.5rem 0 -3rem 0' }}>\r\n                          <CollegeHistoryAnswer answer={answer} isPrior={partition.isPrior} />\r\n                        </CardContent>\r\n                        <CardActions style={{ justifyContent: 'flex-end' }}>                        \r\n                          <MaterialButton size=\"small\" color=\"secondary\" \r\n                            disabled={answer.IsLocked}\r\n                            style={{ position: 'relative', bottom: '-1rem' }} \r\n                            onClick={handleDelete(answer)} >Remove</MaterialButton>\r\n                        </CardActions>\r\n                      </Card>\r\n                    </Fragment>\r\n                  )\r\n                })}\r\n                {(typeof reduxFormState.fields[partition.field] == \"undefined\" || reduxFormState.fields[partition.field].length < 10) &&\r\n                  <FieldRow style={{ marginTop: '-.5rem' }}>\r\n                    <FieldSlot>\r\n                      <Button type='button' name='AddCollege' label='+ Add College/University' variant='text' style={{ textTransform: \"capitalize\" }}\r\n                        onClick={handleAdd(section.createAnswer(\"collegehistories\")._data)} />\r\n                    </FieldSlot>\r\n                  </FieldRow>\r\n                }\r\n              </>\r\n            }}\r\n          </RepeatableQuestion>\r\n        </FieldSection>\r\n      )}\r\n\r\n    </>\r\n  )\r\n};\r\n\r\nexport default CollegePicker;\r\n","import Checkbox from './../../components/Checkbox';\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport React, { useState, useEffect, Fragment } from 'react';\r\nimport CollegePicker from '../../components/CollegePicker-modified';\r\nimport { FieldSection, FieldRow, FieldSlot } from '../../components/Forms/FieldSection';\r\nimport { FIELDS } from '../../store/form/fields';\r\nimport FormSection from '../../components/FormSection';\r\nimport { useDispatch } from 'react-redux';\r\nimport BooleanAnswer from '../../components/answer/BooleanAnswer';\r\nimport DecimalAnswer from '../../components/answer/DecimalAnswer';\r\nimport Button from '../../components/Button';\r\nimport HiddenInput from '../../components/Utility/HiddenInput';\r\nimport apiClient from '../../utils/API';\r\nimport RequirementSet from '../../utils/dtos/RequirementSet';\r\nimport { Alert } from '@material-ui/core';\r\n\r\n/**\r\n * college history section of Scholarships Application\r\n * @param {*} param0 \r\n * @returns {Component}\r\n */\r\nfunction EditCollegeHistoryInfo({ onChange, onCancel, section }) {\r\n\r\n    const year = section.year;\r\n    const commCollegeYear = year;\r\n    const bachelorYear = year;\r\n\r\n    const methods = useForm({\r\n        mode: 'onBlur'\r\n    });\r\n    const { handleSubmit, watch, getValues, setValue, register } = methods;\r\n\r\n    const [loading, setLoading] = useState(false);\r\n    const [completionData, setCompletionData] = useState(null);\r\n    const dispatch = useDispatch();\r\n    const watchNoLetterGrades = watch(\"NoLetterGrades\")\r\n    const watchFinishedCc = watch(FIELDS.FINISHED_COMM_COLLEGE)\r\n    const watchFinishedBd = watch(FIELDS.FINISHED_BACHELORS_DEGREE)\r\n    const watchUndergradGpa = watch(FIELDS.UNDERGRAD_GPA)\r\n    const watchGraduateGpa = watch(FIELDS.GRADUATE_GPA)  \r\n    const sectionCompletion = new RequirementSet(completionData);\r\n    const collegeCompletion = sectionCompletion.getField(FIELDS.PAST_COLLEGE);\r\n\r\n    /**\r\n     * fetch most recent completion report, also saves into state\r\n     * @returns {RequirementSet}\r\n     */\r\n    async function getCompletionReport() {\r\n        const completion = await apiClient.getCompletionReport(\"SCH\", section.year, [FIELDS.PAST_COLLEGE]);\r\n        setCompletionData(completion);    \r\n        return new RequirementSet(completion);\r\n    }\r\n\r\n    /**\r\n     * actual core work of saving answers\r\n     * @param {*} data \r\n     */\r\n    async function submitAnswers(data) {\r\n       \r\n        if (watchNoLetterGrades === true) {\r\n            data[FIELDS.UNDERGRAD_GPA] = \"0.01\"\r\n        }\r\n\r\n        await section.saveAnswers(data, dispatch);    \r\n        var completionResult = await getCompletionReport();      \r\n        return completionResult;\r\n    }\r\n\r\n    const onSubmit = async (data) => {\r\n        \r\n        const completionResult = await submitAnswers(data);   \r\n        const collegeCompletion = completionResult.getField(FIELDS.PAST_COLLEGE);     \r\n              \r\n        //supress onchange response if student needs to see some special completion feedback\r\n        if (typeof onChange === 'function' /*&& !collegeCompletion.isInvalidReason*/) {\r\n            onChange(true);\r\n        }     \r\n    };\r\n\r\n    const onError = (e) => {        \r\n        const data = getValues();\r\n        submitAnswers(data); //save what we have, but alert valiation errors anyhow\r\n    }\r\n\r\n    useEffect(() => {\r\n        window.addEventListener('beforeunload', alertUser)\r\n        return () => {\r\n            window.removeEventListener('beforeunload', alertUser)\r\n        }\r\n    }, [])\r\n\r\n    const alertUser = e => {\r\n        e.preventDefault()\r\n        e.returnValue = ''\r\n    }\r\n\r\n    const [currentCollege, setCurrentCollege] = useState()\r\n    const [pastCollege, setPastCollege] = useState()\r\n\r\n    function collegePickerCallback(current, past) {\r\n        setPastCollege(past?.length > 0)\r\n        setCurrentCollege(current?.length > 0)\r\n    }\r\n\r\n    //=====( NO COLLEGE HISTORY LOGIC )\r\n    const [noCollegeHistory, setNoCollegeHistory] = useState(null);\r\n    const [hideNoCollegeHistory, setHideNoCollegeHistory] = useState(true);\r\n\r\n    useEffect(() => {\r\n        let noHistoryAnswer = section.getAnswerByField(FIELDS.COLLEGE_HISTORY_COMPLETE).Response;\r\n        setNoCollegeHistory(noHistoryAnswer ? true : null)\r\n\r\n        getCompletionReport();\r\n\r\n    }, [])\r\n\r\n    function handleToggle() {\r\n        setNoCollegeHistory(noCollegeHistory ? null : true)\r\n    }\r\n\r\n    useEffect(() => {\r\n        if (noCollegeHistory !== true\r\n            && (currentCollege\r\n                || pastCollege\r\n                || watchFinishedCc === 'True'\r\n                || watchFinishedBd === 'True'\r\n                || watchUndergradGpa\r\n                || watchGraduateGpa)) {\r\n            setNoCollegeHistory(false);\r\n            setHideNoCollegeHistory(true);\r\n        }\r\n        else {\r\n            setHideNoCollegeHistory(false);\r\n        }\r\n    }, [currentCollege, pastCollege, watchFinishedCc, watchFinishedBd, watchUndergradGpa, watchGraduateGpa])\r\n\r\n    //=====( RENDER RETURN )\r\n\r\n    return (\r\n        <FormProvider {...methods} >\r\n            <form onSubmit={handleSubmit(onSubmit, onError)} >\r\n                <FormSection title='College History' isEditable={true} onSaveClick={handleSubmit(onSubmit, onError)} onCancelClick={onCancel} loading={loading}>\r\n                    <HiddenInput\r\n                        name={FIELDS.COLLEGE_HISTORY_COMPLETE}\r\n                        value={noCollegeHistory}\r\n                    />\r\n                    {!hideNoCollegeHistory ?\r\n                        <FieldSection>\r\n                            <FieldSlot>\r\n                                <Checkbox\r\n                                    useController={false}\r\n                                    onChange={handleToggle}\r\n                                    value={noCollegeHistory}\r\n                                    label={'I have no college history.'}\r\n                                />\r\n                            </FieldSlot>\r\n                        </FieldSection>\r\n                        : null}\r\n\r\n                    {!noCollegeHistory ?\r\n                        <Fragment>\r\n                            <FieldSection>\r\n                                <FieldRow>                                   \r\n                                    <Alert severity='info'>\r\n                                        List each college you have attended. You may only list each college once. You cannot enter the same college in both the \"Currently \r\n                                        Attending College(s)\" and \"Previously Attended College(s)\" sections. If you had a gap in attendance or pursued multiple degrees, \r\n                                        enter your very first date of attendance <i>Date Started</i> through the most recent date you attended <i>Date Ended</i>.\r\n                                    </Alert>\r\n                                </FieldRow>\r\n                            </FieldSection>\r\n\r\n                            {collegeCompletion?.isDuplicated === true &&\r\n                                <div item>                                 \r\n                                    <Alert severity=\"error\" className=\"alert alert--error\">\r\n                                        <p>\r\n                                            Do not report any college more than once. Even if you took time off from a college, report the earliest term of attendance\r\n                                            and the most recent term of attendance if you are not still currently attending.\r\n                                        </p>\r\n                                    </Alert>\r\n                                </div>\r\n                            }\r\n                            <div className=\"rhythm\">\r\n                                <CollegePicker collegePickerCallback={collegePickerCallback} section={section} />\r\n                            </div>\r\n\r\n                            <div className='divider' />\r\n\r\n                            <FieldSection isRequired title={\"Will you have finished two academic years towards a degree or certificate at community college by July 1, \" + commCollegeYear + \"?\"}>\r\n                                <FieldRow>\r\n                                    <FieldSlot>\r\n                                        <BooleanAnswer answer={section.getAnswerByField(FIELDS.FINISHED_COMM_COLLEGE)} value={watchFinishedCc} isRequired={true} />\r\n                                    </FieldSlot>\r\n                                </FieldRow>\r\n                            </FieldSection>\r\n\r\n                            <FieldSection isRequired title={\"Will you have earned your Bachelor’s degree by fall \" + bachelorYear + \"?\"}>\r\n                                <FieldRow>\r\n                                    <FieldSlot>\r\n                                        <BooleanAnswer answer={section.getAnswerByField(FIELDS.FINISHED_BACHELORS_DEGREE)} value={watchFinishedBd} isRequired={true} />\r\n                                    </FieldSlot>\r\n                                </FieldRow>\r\n                            </FieldSection>\r\n\r\n                            <FieldSection title=\"Cumulative Undergraduate GPA\" withDivider={true} isRequired={currentCollege || pastCollege}>\r\n                                <FieldRow>\r\n                                    <FieldSlot>\r\n                                        <DecimalAnswer disabled={watchNoLetterGrades}\r\n                                            answer={section.getAnswerByField(FIELDS.UNDERGRAD_GPA)}\r\n                                            isRequired={currentCollege || pastCollege}\r\n                                            inputLabel='Undergraduate GPA' />\r\n                                    </FieldSlot>\r\n                                    <FieldSlot container alignItems=\"flex-end\">\r\n                                        <div>\r\n                                            <Checkbox name='NoLetterGrades' label=\"My college did not assign grades.\" />\r\n                                        </div>\r\n                                    </FieldSlot>\r\n                                </FieldRow>\r\n                            </FieldSection>\r\n                            <FieldSection title=\"Cumulative Graduate GPA\" withDivider={true}>\r\n                                <FieldRow>\r\n                                    <FieldSlot>\r\n                                        <DecimalAnswer disabled={watchNoLetterGrades} answer={section.getAnswerByField(FIELDS.GRADUATE_GPA)} inputLabel='Graduate GPA' />\r\n                                    </FieldSlot>\r\n                                </FieldRow>\r\n                            </FieldSection>\r\n                        </Fragment>\r\n                        : null}\r\n\r\n                    {noCollegeHistory ?\r\n                        <Fragment>\r\n                            <FieldSection>\r\n                                You have indicated you have never attended college.\r\n                                <FieldSlot>\r\n                                    <Button label='Provide College history' onClick={handleToggle}\r\n                                    />\r\n                                </FieldSlot>\r\n                            </FieldSection>\r\n                        </Fragment>\r\n                        : null}\r\n\r\n                </FormSection>\r\n            </form>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\nexport default EditCollegeHistoryInfo;\r\n","import react, { useEffect } from 'react';\r\nimport { useState } from 'react';\r\nimport apiClient from '../../utils/API';\r\nimport DropdownSearch from '../DropdownSearch';\r\nimport SpinnerSection from \"../../components/Utility/SpinnerSection\";\r\n\r\n\r\nexport default ({ listItems, ...props}) => {\r\n\r\n    const [items,setItems] = useState([]);\r\n    const [loading, setLoading] = useState(true)\r\n\r\n    useEffect(()=>{\r\n        (async ()=>{\r\n            setLoading(true)\r\n            const majors = await apiClient.get(`/major/majors`);\r\n            setItems(majors.map(r => ({\r\n                ...r,\r\n                label: r.Title,\r\n                value: r.Id\r\n            })))\r\n            setLoading(false)\r\n        })();\r\n    },[]);\r\n\r\n    return (\r\n    <div>\r\n        {loading &&\r\n          <div>\r\n              Loading Majors (this may take a moment)\r\n              <SpinnerSection/>\r\n          </div>\r\n        }\r\n        {!loading &&\r\n            <DropdownSearch {...props} placeholder=\"Major\" listItems={items}/>\r\n        }\r\n    </div>\r\n    )\r\n}\r\n","import React, { Fragment } from \"react\";\r\nimport MaskedDatePicker from \"./../../components/MaskedDatePicker\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport {\r\n  FieldSection,\r\n  FieldRow,\r\n  FieldSlot,\r\n} from \"../../components/Forms/FieldSection\";\r\nimport {\r\n  repeatableFieldName,\r\n} from \"../../components/Utility/RepeatableField\";\r\nimport { AnswerTypeDegreeProps } from \"../../store/form/fields\";\r\nimport MajorsDropdown from \"../../components/DataDriven/MajorsDropdown\";\r\nimport DegreeDropdown from \"../../components/DataDriven/DegreeDropdown\";\r\nimport HiddenInput from \"../../components/Utility/HiddenInput\";\r\nimport AnswerLock from \"./status/AnswerLock\";\r\n\r\n/**\r\n * prompt for a degree the student is hoping to earn in the future\r\n * \r\n * @param {*} param0 \r\n * @returns \r\n */\r\nfunction DegreeAnswer({ answer, disabled }) {\r\n\r\n    const methods = useForm({ mode: \"onBlur\", });\r\n    const { getValues, handleSubmit } = methods;\r\n\r\n    const i = answer.Index;\r\n    const name = answer.FieldKey;\r\n    const degreeFieldName = repeatableFieldName(name, i, AnswerTypeDegreeProps.DEGREE);       \r\n    const primaryMajorFieldName = repeatableFieldName(name, i, AnswerTypeDegreeProps.PRIMARY_MAJOR);  \r\n    const secondaryMajorFieldName = repeatableFieldName(name, i, AnswerTypeDegreeProps.SECONDARY_MAJOR);  \r\n    const graduationDateFieldName = repeatableFieldName(name, i, AnswerTypeDegreeProps.EXPECTED_GRADUATION_DATE);  \r\n    const idFieldName = repeatableFieldName(name, i, AnswerTypeDegreeProps.ID);  \r\n\r\n    const isDisabled = disabled || answer.IsLocked;\r\n\r\n    return (\r\n        <Fragment key={answer.Id}>\r\n        <FieldSection withDivider={false}>\r\n            <FieldRow>\r\n                <FieldSlot md={12}>\r\n                    <HiddenInput name={idFieldName} value={answer.Id}/>\r\n                    <DegreeDropdown\r\n                        name={degreeFieldName}\r\n                        key={degreeFieldName}\r\n                        defaultValue={getValues(degreeFieldName)}\r\n                        inputLabel={<>Intended Degree <AnswerLock answer={answer} /></>}\r\n                        variant=\"outlined\"\r\n                        isRequired={true}\r\n                        disable={isDisabled}\r\n                    />\r\n                </FieldSlot>\r\n            </FieldRow>\r\n            <FieldRow>\r\n                <FieldSlot md={6}>\r\n                    <MajorsDropdown\r\n                        onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                        name={primaryMajorFieldName}\r\n                        key={primaryMajorFieldName}\r\n                        defaultValue={getValues(\r\n                            primaryMajorFieldName\r\n                        )}\r\n                        inputLabel=\"Major\"\r\n                        variant=\"outlined\"\r\n                        isRequired={true}\r\n                        disable={isDisabled}\r\n                    />\r\n                </FieldSlot>\r\n                <FieldSlot md={6}>\r\n                    <MajorsDropdown\r\n                        onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                        name={secondaryMajorFieldName}\r\n                        key={secondaryMajorFieldName}\r\n                        defaultValue={getValues(\r\n                            secondaryMajorFieldName\r\n                        )}\r\n                        inputLabel=\"Second or Double Major (optional)\"\r\n                        variant=\"outlined\"\r\n                        disable={isDisabled}\r\n                    />\r\n                </FieldSlot>\r\n            </FieldRow>\r\n            <FieldRow>\r\n                <FieldSlot md={6}>\r\n                    <MaskedDatePicker\r\n                        onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                        minDate={new Date(\"01-01-1934\")}\r\n                        disableFuture={false}\r\n                        name={graduationDateFieldName}\r\n                        label=\"Expected Completion Date\"\r\n                        isRequired={true}\r\n                        disable={isDisabled}\r\n                    />\r\n                </FieldSlot>\r\n            </FieldRow>\r\n        </FieldSection>\r\n        </Fragment>\r\n    );\r\n}\r\n\r\nexport default DegreeAnswer;","import React, { Fragment } from \"react\";\r\nimport Button from \"../../../components/Button\";\r\nimport {\r\n  FieldRow,\r\n  FieldSlot,\r\n} from \"../../../components/Forms/FieldSection\";\r\nimport { FIELDS } from \"../../../store/form/fields\";\r\nimport Card from \"../../../components/Card\";\r\nimport { CardActions, CardContent } from \"@material-ui/core\";\r\nimport MaterialButton from \"@material-ui/core/Button\";\r\nimport RepeatableQuestion from \"../../../components/answer/question/RepeatableQuestion\";\r\nimport DegreeAnswer from \"../../../components/answer/DegreeAnswer\";\r\n/**\r\n * \r\n * @param {*} param0 \r\n */\r\nfunction DegreesQuestion({section}){\r\n\r\n    return (\r\n        <RepeatableQuestion section={section} name={FIELDS.DEGREES} >\r\n        {(answers, handleAdd, handleDelete) => {\r\n          return (\r\n            <>\r\n              {answers.map((answer) =>\r\n                <Fragment key={answer.Id}>\r\n                  <Card>\r\n                    <CardContent style={{ margin: \"-.5rem 0 -1rem 0\" }}>\r\n                      <DegreeAnswer answer={answer} />\r\n                    </CardContent>\r\n                    <CardActions style={{ justifyContent: \"flex-end\" }}>\r\n                      <MaterialButton\r\n                        size=\"small\"\r\n                        color=\"secondary\"\r\n                        disabled={answer.IsLocked}\r\n                        style={{ position: \"relative\", bottom: \"-1rem\" }}\r\n                        onClick={handleDelete(answer)}\r\n                      >\r\n                        Remove\r\n                      </MaterialButton>\r\n                    </CardActions>\r\n                  </Card>\r\n                </Fragment>\r\n              )}\r\n              <FieldRow>\r\n                <FieldSlot md={6} className=\"mt-1\">\r\n                  <Button\r\n                    name=\"AddDegreePlan\"\r\n                    type='button'\r\n                    label=\"+ Add degree plan\"\r\n                    variant=\"text\"\r\n                    style={{ textTransform: \"capitalize\" }}\r\n                    onClick={handleAdd({ Id: 0, AnswerType: 'Degree' })}\r\n                  />\r\n                </FieldSlot>\r\n              </FieldRow>\r\n            </>\r\n          );\r\n        }}\r\n      </RepeatableQuestion>\r\n    );\r\n}\r\n\r\nexport default DegreesQuestion;","import React from \"react\";\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport { useEffect } from \"react\";\r\nimport {\r\n  FieldSection,\r\n  FieldRow,\r\n  FieldSlot,\r\n} from \"../../components/Forms/FieldSection\";\r\nimport { FIELDS, getField } from \"../../store/form/fields\";\r\nimport FormSection from \"../../components/FormSection\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { useState } from \"react\";\r\nimport TextAnswer from \"../../components/answer/TextAnswer\";\r\nimport DegreesQuestion from \"../../components/answer/question/DegreesQuestion\";\r\n\r\n/**\r\n * standard issue college\r\n * @param {SectionHelper} param0.section \r\n * @param {Component} param0.status status display\r\n * @returns \r\n */\r\nfunction EditCollegePlan({ onCancel, onChange, status, section }) {\r\n  const methods = useForm({ mode: \"onBlur\", });\r\n  const { getValues, handleSubmit } = methods;\r\n  const [loading, setLoading] = useState(false);\r\n  const dispatch = useDispatch();\r\n\r\n  const onSubmit = async (data) => {\r\n    await section.saveAnswers(data, dispatch);\r\n\r\n    if (typeof onChange === 'function') {\r\n        onChange(true);\r\n    }  \r\n  };\r\n\r\n  const onError = () => {\r\n    // console.log('ERROR',errors, e);\r\n  };\r\n\r\n  useEffect(() => {\r\n    window.addEventListener(\"beforeunload\", alertUser);\r\n    return () => {\r\n      window.removeEventListener(\"beforeunload\", alertUser);\r\n    };\r\n  }, []);\r\n\r\n  const alertUser = (e) => {\r\n    e.preventDefault();\r\n    e.returnValue = \"\";\r\n  };\r\n\r\n  return (\r\n    <FormProvider {...methods}>\r\n      <form onSubmit={handleSubmit(onSubmit, onError)}>\r\n        <FormSection\r\n          title=\"College Plans\"\r\n          isEditable={true}\r\n          onSaveClick={handleSubmit(onSubmit, onError)}\r\n          onCancelClick={onCancel}\r\n          loading={loading}\r\n          status={status}\r\n        >\r\n          {/* Use field section component to add form section padding to area */}\r\n          <FieldSection title=\"Degree Plan\" isRequired>\r\n            <DegreesQuestion section={section} />\r\n          </FieldSection>\r\n\r\n          <FieldSection withDivider={true}>\r\n            <FieldRow>\r\n              <FieldSlot md={6}>\r\n                <TextAnswer\r\n                  answer={section.getAnswerByField(FIELDS.CAREER_GOAL)}\r\n                  inputLabel={getField(FIELDS.CAREER_GOAL).question}\r\n                  key={FIELDS.CAREER_GOAL}\r\n                  variant=\"outlined\"\r\n                  isRequired={true}\r\n                  inputProps={{ maxLength: 40 }} \r\n                />\r\n              </FieldSlot>\r\n            </FieldRow>\r\n          </FieldSection>\r\n\r\n        </FormSection>\r\n      </form>\r\n    </FormProvider>\r\n  );\r\n}\r\n\r\nexport default EditCollegePlan;\r\n","import React, { useEffect } from 'react';\r\nimport { useState } from 'react';\r\nimport apiClient from '../../utils/API';\r\nimport Dropdown from '../Dropdown';\r\n\r\n\r\nexport default ({ listItems, codeType, ...props}) => {\r\n    const [items,setItems] = useState([]);\r\n    \r\n    useEffect(()=>{\r\n        (async ()=>{\r\n            // real route -> code/codes?codeType=HSTYPE\r\n            const codes = await apiClient.get(`/code/codes?codeType=${codeType}`);\r\n            setItems(codes.map(r => ({\r\n                ...r,\r\n                label: r.Message,\r\n                value: r.Code\r\n            })))\r\n        })();\r\n    },[]);\r\n\r\n    return <Dropdown {...props} listItems={items}/>\r\n        \r\n}\r\n","import { useFormContext } from \"react-hook-form\";\r\nimport Input from \"../Input\";\r\nimport React, { Fragment } from \"react\";\r\nimport NumericDecimal from \"../NumericDecimal\";\r\nimport { FieldRow, FieldSlot } from \"../Forms/FieldSection\";\r\nimport { repeatableFieldName, } from \"../Utility/RepeatableField\";\r\nimport MonthYearPicker from \"../MonthYearPicker\";\r\nimport Checkbox from \"../Checkbox\";\r\nimport CodeDropdown from \"../DataDriven/CodeDropdown\";\r\nimport HiddenInput from \"../Utility/HiddenInput\";\r\nimport { AnswerTypeActivityProps } from \"../../store/form/fields\";\r\nimport AnswerLock from \"./status/AnswerLock\";\r\n\r\n/**\r\n * render one activity from it's answer\r\n * @param {*} param0 \r\n */\r\nfunction ActivityAnswer({ answer, disabled, ...props }) {\r\n\r\n    const methods = useFormContext({ mode: \"onBlur\", });\r\n    const { getValues, watch } = methods;\r\n\r\n    const id = answer.Id;\r\n    const name = answer.FieldKey;\r\n    const index = answer.Index;\r\n    const type = answer.ActivityTypeCode;\r\n    const activityIdFieldName = repeatableFieldName(name, index, AnswerTypeActivityProps.ID);\r\n    const activityTypeFieldName = repeatableFieldName(name, index, AnswerTypeActivityProps.TYPE);\r\n    const titleFieldName = repeatableFieldName(name, index, AnswerTypeActivityProps.TITLE);\r\n    const startDateFieldName = repeatableFieldName(name, index, AnswerTypeActivityProps.START_DATE);\r\n    const endDateFieldName = repeatableFieldName(name, index, AnswerTypeActivityProps.END_DATE);\r\n    const freqFieldName = repeatableFieldName(name, index, AnswerTypeActivityProps.FREQUENCY);\r\n    const weeklyHrsFieldName = repeatableFieldName(name, index, AnswerTypeActivityProps.HOURS_PER_UNIT);\r\n    const totalHrsFieldName = repeatableFieldName(name, index, AnswerTypeActivityProps.TOTAL_HOURS);\r\n    const responsibilitiesFieldName = repeatableFieldName(name, index, AnswerTypeActivityProps.ACCOMPLISHMENTS);\r\n\r\n    const isDisabled = disabled || answer.IsLocked;\r\n\r\n    return (\r\n        //Note: Add a unique key to mapped components to get correct updates\r\n        <Fragment key={id}>\r\n            {/* Assuming that Id: 0 triggers the system to set an id for a new activity when saved, set activity id to 0 if activity has new flag */}\r\n            <HiddenInput name={activityIdFieldName} value={answer.isNew? 0 : answer.Id} />\r\n            <HiddenInput name={activityTypeFieldName} defaultValue={type} />\r\n            <FieldRow>\r\n                <FieldSlot>\r\n                    <Input\r\n                        disabled={isDisabled}\r\n                        name={titleFieldName}\r\n                        key={titleFieldName}\r\n                        defaultValue={answer.Title}\r\n                        inputLabel={<>Title <AnswerLock answer={answer} /></>}\r\n                        inputProps={{ maxLength: 50 }}\r\n                        placeholder=\"Only 50 characters allowed.\"\r\n                        isRequired={true}\r\n                    />\r\n                    \r\n                </FieldSlot>\r\n            </FieldRow>\r\n            <div>\r\n                <Checkbox\r\n                    disabled={isDisabled}\r\n                    name={`${type}${id}${index}`}\r\n                    defaultValue={answer.StopDate ? false : !answer.isNew }\r\n                    label=\"I am currently involved in this activity\"\r\n                />\r\n            </div>\r\n            <FieldRow>\r\n                <FieldSlot>\r\n                    <MonthYearPicker\r\n                        name={startDateFieldName}\r\n                        key={startDateFieldName}\r\n                        defaultValue={answer.StartDate}\r\n                        label=\"Start Date\"\r\n                        isRequired={true}\r\n                        isDisabled={isDisabled}\r\n                    />\r\n                </FieldSlot>\r\n                <FieldSlot>\r\n                    {watch(`${type}${id}${index}`) ? (\r\n                        <div style={{ paddingTop: \"3rem\" }}>- Present</div>\r\n                    ) : (\r\n                        <MonthYearPicker\r\n                            name={endDateFieldName}\r\n                            key={endDateFieldName}\r\n                            defaultValue={answer.StopDate}\r\n                            label=\"End Date\"\r\n                            isRequired={true}\r\n                            isDisabled={isDisabled}\r\n                        />\r\n                    )}\r\n                </FieldSlot>\r\n            </FieldRow>\r\n            <FieldRow>\r\n                <FieldSlot md={4}>\r\n                    <CodeDropdown\r\n                        codeType=\"ActivityFrequency\"\r\n                        name={freqFieldName}\r\n                        key={freqFieldName}\r\n                        defaultValue={answer.FrequencyCode}\r\n                        label=\"Frequency\"\r\n                        isRequired={true}\r\n                        disabled={isDisabled}\r\n                    />\r\n                </FieldSlot>\r\n                <FieldSlot md={4}>\r\n                    <NumericDecimal\r\n                        precision={5}\r\n                        scale={1}\r\n                        allowNegative={false}\r\n                        name={weeklyHrsFieldName}\r\n                        key={weeklyHrsFieldName}\r\n                        defaultValue={answer.HoursPerUnit}\r\n                        inputLabel=\"Estimated Weekly Hours\"\r\n                        isRequired={true}\r\n                        disabled={isDisabled}\r\n                    />\r\n                </FieldSlot>\r\n                <FieldSlot md={4}>\r\n                    <NumericDecimal\r\n                        precision={10}\r\n                        scale={1}\r\n                        allowNegative={false}\r\n                        name={totalHrsFieldName}\r\n                        key={totalHrsFieldName}\r\n                        defaultValue={answer.TotalHours}\r\n                        inputLabel=\"Total Estimated Hours\"\r\n                        isRequired={true}\r\n                        disabled={isDisabled}\r\n                    />\r\n                </FieldSlot>\r\n            </FieldRow>\r\n            <FieldRow>\r\n                <FieldSlot md={12}>\r\n                    <Input\r\n                        name={responsibilitiesFieldName}\r\n                        inputLabel=\"Responsibilities\"\r\n                        inputProps={{ maxLength: 115 }}\r\n                        placeholder=\"Only 115 characters allowed.\"\r\n                        isRequired={true}\r\n                        disabled={isDisabled}\r\n                        defaultValue={answer.Accomplishments}\r\n                    />\r\n                </FieldSlot>\r\n            </FieldRow>\r\n        </Fragment>\r\n    );\r\n}\r\n\r\nexport default ActivityAnswer;","import React, { Fragment } from \"react\";\r\nimport { useFormContext } from \"react-hook-form\";\r\nimport { FieldRow, FieldSection, FieldSlot } from \"../Forms/FieldSection\";\r\nimport Button from \"../Button\";\r\nimport Card from \"../Card\";\r\nimport CardContent from \"@material-ui/core/CardContent\";\r\nimport CardActions from \"@material-ui/core/CardActions\";\r\nimport ActivityAnswer from \"../answer/ActivityAnswer\";\r\nimport RepeatableQuestion from \"../answer/question/RepeatableQuestion\";\r\nimport DeleteTwoTone from '@material-ui/icons/DeleteTwoTone';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport { Tooltip } from \"@material-ui/core\";\r\n/**\r\n * prompt for all activity chart entries of a given type\r\n * @param {*} param0 \r\n * @returns {Component} \r\n */\r\nfunction ActivityEntryForm({\r\n  section,\r\n  label,\r\n  defaultValues = {},\r\n  type,\r\n  name,\r\n  rules,\r\n  isRequired = true,\r\n  description,\r\n  ...props\r\n}) {\r\n  const methods = useFormContext({\r\n    mode: \"onBlur\",\r\n  });\r\n  const { getValues, watch } = methods;\r\n\r\n  return (\r\n    <FieldSection withDivider={false}>\r\n      <RepeatableQuestion section={section} name={name} answerFilter={(answer) => answer.ActivityTypeCode === type} >\r\n        {(answers, handleAdd, handleDelete) => {\r\n          return (\r\n            <Fragment key={`${name}`}>\r\n              {answers.map((answer) => \r\n                <Fragment key={answer.Id}>\r\n                <Card>\r\n                  <CardActions style={{ marginBottom:\"-20px\", marginTop:\"-10px\", justifyContent: \"flex-end\"}}>\r\n                  <IconButton aria-label=\"Remove\" size=\"large\" onClick={handleDelete(answer)}>\r\n                  <Tooltip title=\"Remove Activity\">  \r\n                    <DeleteTwoTone style={{ fontSize: \"30px\", color: \"red\" }}/>\r\n                  </Tooltip>  \r\n                  </IconButton>\r\n                  </CardActions>\r\n                  <CardContent>                    \r\n                    <ActivityAnswer answer={answer} />\r\n                  </CardContent>  \r\n                </Card>\r\n                </Fragment>\r\n              )}\r\n\r\n              <FieldRow>\r\n                <FieldSlot md={4} style={{ marginTop: \"0.5rem\" }}>\r\n                  <Button\r\n                    type=\"button\"\r\n                    name=\"AddName\"\r\n                    label=\"+ Add activity\"\r\n                    variant=\"text\"\r\n                    style={{ textTransform: \"capitalize\" }}\r\n                    onClick={handleAdd({Id: 0, ActivityTypeCode : type, AnswerType :'Activity'})}\r\n                  />\r\n                </FieldSlot>\r\n              </FieldRow>\r\n            </Fragment>\r\n          );\r\n        }}\r\n      </RepeatableQuestion>\r\n    </FieldSection>\r\n  );\r\n}\r\n\r\nexport default ActivityEntryForm;\r\n","import { useEffect, useState, Fragment } from \"react\";\r\nimport { actions } from './../../store';\r\nimport { useSelector } from 'react-redux';\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport { FieldSection } from '../../components/Forms/FieldSection';\r\nimport FormSection from '../../components/FormSection';\r\nimport ActivityPicker from '../../components/ActivityPicker/Editor'\r\nimport { ActivityTypeCodes, FIELDS } from '../../store/form/fields';\r\nimport { open } from \"../../store/snack/actions\";\r\nimport { useDispatch } from 'react-redux';\r\nimport Button from '../../components/Button';\r\nimport CertifyAnswer from '../../components/answer/CertifyAnswer';\r\nimport apiClient from \"../../utils/API\";\r\n\r\n\r\n\r\nfunction EditActivities({section, onChange, onCancel, year }) {\r\n    const reduxFormState = useSelector((state) => state.form);\r\n    const isFetchingData = reduxFormState.isLoading;\r\n    const methods = useForm({\r\n      mode: 'onBlur'\r\n    });\r\n\r\n    const { handleSubmit, watch, setValue } = methods;\r\n    const [loading, setLoading] = useState(false)\r\n    const dispatch = useDispatch();\r\n\r\n    // #4149: Send only valid Activity Fields. To avoid 400 error on Activity Page.\r\n    const activityFields = [      \r\n      FIELDS.ACTIVITY_SCHOOL,      \r\n      FIELDS.ACTIVITY_VOLUNTEER,\r\n      FIELDS.ACTIVITY_WORK,\r\n      FIELDS.ACTIVITIES_COMPLETE,\r\n      FIELDS.HAS_NO_SCHOOL_ACTIVITIES,\r\n      FIELDS.HAS_NO_VOLUNTEER_ACTIVITIES,\r\n      FIELDS.HAS_NO_WORK_ACTIVITIES\r\n    ]\r\n\r\n    /**\r\n     * save activities\r\n     * @param {*} data \r\n     * @param {*} e \r\n     */\r\n    const onSubmit = async (data, e) => { \r\n        if(schoolTotal > 0) {\r\n            setValue(FIELDS.HAS_NO_SCHOOL_ACTIVITIES, false)\r\n        }\r\n        if(workTotal > 0) {\r\n            setValue(FIELDS.HAS_NO_WORK_ACTIVITIES, false)\r\n        }\r\n        if(volunteerTotal > 0) {\r\n            setValue(FIELDS.HAS_NO_VOLUNTEER_ACTIVITIES, false)\r\n        }\r\n      \r\n        setLoading(true);\r\n        const results = await section.legacySaveAnswers(data, dispatch, ['presentActivity']);\r\n        setLoading(false);\r\n              \r\n        if(results !== null && typeof onChange === 'function'){\r\n            onChange(true);      \r\n        }\r\n    };\r\n\r\n    const onError = (errors, e) => {\r\n      if(errors.ACTIVITY_SCHOOL || errors.ACTIVITY_VOLUNTEER || errors.ACTIVITY_WORK){\r\n        dispatch(open({\r\n          message: \"Please complete the required fields associated with your added activities.\",\r\n          severity: \"success\",\r\n        }))\r\n      }\r\n    }\r\n\r\n    const [schoolTotal, setSchoolTotal] = useState(0)\r\n    const [volunteerTotal, setVolunteerTotal] = useState(0)\r\n    const [workTotal, setWorkTotal] = useState(0)\r\n\r\n    // Used local variable to capture the most recent data.\r\n    const exceedsMaximumActivities = (schoolTotal + volunteerTotal + workTotal) > 20;\r\n\r\n    const watchActivitySchool = watch(FIELDS.ACTIVITY_SCHOOL)\r\n    const watchActivityVolunteer= watch(FIELDS.ACTIVITY_VOLUNTEER)\r\n    const watchActivityWork = watch(FIELDS.ACTIVITY_WORK)\r\n\r\n    useEffect(() => {\r\n      setSchoolTotal(watchActivitySchool?.length !== undefined ? watchActivitySchool?.length : 0)\r\n      setVolunteerTotal(watchActivityVolunteer?.length !== undefined ? watchActivityVolunteer?.length : 0)\r\n      setWorkTotal(watchActivityWork?.length !== undefined ? watchActivityWork?.length : 0)\r\n    },[watchActivitySchool?.length,watchActivityVolunteer?.length,watchActivityWork?.length]);\r\n\r\n    useEffect(() => {\r\n      window.addEventListener('beforeunload', alertUser)\r\n      return () => {\r\n        window.removeEventListener('beforeunload', alertUser)\r\n      }\r\n    }, [])\r\n    const alertUser = e => {\r\n      e.preventDefault()\r\n      e.returnValue = ''\r\n    }\r\n\r\n    const [activityInstructions, setActivityInstructions] = useState(null);\r\n    const [activityBlurb, setActivityBlurb] = useState({});\r\n\r\n    useEffect(() => {\r\n      (async () => {\r\n            const [overallInstructions, codes] = await Promise.all([apiClient.getTextCode(\"ActivityChartInstructions\", \"StudentMessage\"),\r\n                 apiClient.get('/code/codes?codeType=ActCatInstructions')\r\n            ]);\r\n            setActivityInstructions(overallInstructions?.Message);                \r\n\r\n            const activities = {\r\n                work: codes.find(x => x.Code === ActivityTypeCodes.WORK)?.Message,\r\n                school: codes.find(x => x.Code === ActivityTypeCodes.SCHOOL)?.Message,\r\n                volunteer: codes.find(x => x.Code === ActivityTypeCodes.VOLUNTEER)?.Message,\r\n            };                  \r\n            setActivityBlurb(activities);\r\n      })()\r\n    }, [])\r\n\r\n    const activityList = [\r\n      {\r\n        title: \"School Activities\",\r\n        label:'I have no school activities',\r\n        subtitle: activityBlurb.school,\r\n        fieldName: FIELDS.ACTIVITY_SCHOOL,\r\n        activityType: ActivityTypeCodes.SCHOOL,\r\n        total: schoolTotal,\r\n        noActivities: FIELDS.HAS_NO_SCHOOL_ACTIVITIES,\r\n      },\r\n      {\r\n        title: \"Volunteer Activities\",\r\n        label:'I have no volunteer activities',\r\n        subtitle: activityBlurb.volunteer,\r\n        fieldName: FIELDS.ACTIVITY_VOLUNTEER,\r\n        activityType: ActivityTypeCodes.VOLUNTEER,\r\n        total: volunteerTotal,\r\n        noActivities: FIELDS.HAS_NO_VOLUNTEER_ACTIVITIES,\r\n      },\r\n      {\r\n        title: \"Paid Work Activities\",\r\n        label:'I have no work activities',\r\n        subtitle: activityBlurb.work,\r\n        fieldName: FIELDS.ACTIVITY_WORK,\r\n        activityType: ActivityTypeCodes.WORK,\r\n        total: workTotal,\r\n        noActivities: FIELDS.HAS_NO_WORK_ACTIVITIES,\r\n      },\r\n    ]\r\n\r\n    function mapActivityPickers(activity){\r\n      const {title, label, subtitle, fieldName, activityType, total} = activity;\r\n      return(\r\n        <Fragment key={`${activity.title}${fieldName}`}>\r\n          <FieldSection title={title} subtitle={subtitle} withGrid={false}>\r\n            <ActivityPicker section={section} name={fieldName} type={activityType}/>\r\n            <div>\r\n              { total === 0 &&\r\n                <CertifyAnswer answer={section.getAnswerByField(activity.noActivities)} label={label}\r\n                          disabled={total > 0} />\r\n              }\r\n            </div>\r\n            <div className=\"save-edit-end\">          \r\n              <Button disabled={isFetchingData || loading} name='SaveBasicInfo' onClick={handleSubmit(onSubmit, onError)} label='Save' loading={loading} />          \r\n            </div>\r\n          </FieldSection>\r\n        </Fragment>\r\n    )}\r\n\r\n    const mappedActivityList = activityList.map(mapActivityPickers);\r\n\r\n    return (\r\n      <FormProvider {...methods} >\r\n        <form onSubmit={handleSubmit(onSubmit, onError)} >\r\n\r\n          <FormSection title='Activities' isEditable={true} onSaveClick={handleSubmit(onSubmit, onError)} onCancelClick={onCancel} loading={loading}>\r\n            <FieldSection>\r\n              <div dangerouslySetInnerHTML={{ __html: activityInstructions }} />\r\n            </FieldSection>\r\n            {mappedActivityList}\r\n            {exceedsMaximumActivities &&\r\n              <FieldSection>\r\n                <div className={'required'}>\r\n                  You can save a maximum of 20 activities total. Please reduce your activities to 20 or fewer to proceed.\r\n                </div>\r\n              </FieldSection>\r\n            }\r\n   \r\n          </FormSection>\r\n        </form>\r\n      </FormProvider>\r\n    );\r\n}\r\n\r\nexport default EditActivities;\r\n","import React, {useEffect, useState, memo} from 'react';\r\nimport { Page, Text, View, Document, StyleSheet, PDFDownloadLink, Font } from '@react-pdf/renderer';\r\nimport apiClient from \"../../utils/API\";\r\nimport { useSelector } from \"react-redux\";\r\nimport Spinner from '../Utility/Spinner';\r\n\r\nfunction TranscriptCoverPagePdf(props) {\r\n\r\n//=====( DATA FIELDS )\r\n    \r\n    const fieldValues = useSelector((state) => state.form.fields);    \r\n    const {transcriptsMail, isHS} = props;\r\n    const firstName = fieldValues.FIRST_NAME?.value;\r\n    const lastName = fieldValues.LAST_NAME?.value;\r\n    const otherHighschool = fieldValues.HIGHSCHOOL?.UnlistedName?.value;\r\n\r\n    const [updating, setUpdating] = useState(false)\r\n    const [highschool, setHighschool] = useState()\r\n    const [appId, setAppId] = useState()\r\n    \r\n    const submissionTime = new Date();\r\n    const date = submissionTime.toLocaleDateString();\r\n    const time = submissionTime.toLocaleString('en-US', { hour: 'numeric',minute: 'numeric', hour12: true });\r\n\r\n//=====( API CALLS )\r\n\r\n  useEffect(() => {\r\n    (async () => {\r\n      setUpdating(true)\r\n      let highschoolResult = isHS ? await apiClient.getHighSchool(transcriptsMail?.SchoolCode) : await apiClient.getCollege(transcriptsMail?.SchoolCode); \r\n      setHighschool(highschoolResult);\r\n      const app = await apiClient.get(`/application?`+'lookup.ProgramCode=sch&lookup.year='+transcriptsMail?.Year);\r\n      \r\n      if(app && app[0]){\r\n        setAppId(app[0]?.AppId);\r\n      }\r\n\r\n      setUpdating(false)\r\n    })()\r\n  }, [fieldValues])\r\n\r\n//=====( STYLES )\r\n\r\n  Font.register({\r\n    family: 'Open Sans',\r\n    fonts: [\r\n      { src: 'https://cdn.jsdelivr.net/npm/open-sans-all@0.1.3/fonts/open-sans-regular.ttf' },\r\n      { src: 'https://cdn.jsdelivr.net/npm/open-sans-all@0.1.3/fonts/open-sans-600.ttf', fontWeight: 600 },\r\n      { src: 'https://cdn.jsdelivr.net/npm/open-sans-all@0.1.3/fonts/open-sans-800.ttf', fontWeight: 800 }\r\n    ]\r\n  });\r\n\r\n  const styles = StyleSheet.create({\r\n    page: {\r\n        alignContent:'center',\r\n      backgroundColor: '#FFFFFF',\r\n      marginLeft: 20,\r\n      marginRight: 30,\r\n      fontFamily: 'Open Sans',\r\n      fontSize:9\r\n    },\r\n    section: {\r\n      marginTop: 10,\r\n      marginBottom: 0,\r\n      marginLeft: 20,\r\n      marginRight: 30,\r\n      padding: 0,\r\n    },\r\n    sectionHeading: {\r\n      width: '95%',\r\n      color: '#000000',\r\n      fontSize: 12,\r\n      fontWeight: 800,\r\n      textAlign: 'center'\r\n    },\r\n    paragraph: {\r\n      width: '95%',\r\n      fontSize: 9,\r\n      marginBottom: 10\r\n    },\r\n    headerParagraph: {\r\n        width: '95%',\r\n        fontSize: 9,\r\n    },\r\n    dateTimeParagraph: {\r\n        width: '95%',\r\n        marginBottom: 10,\r\n    },\r\n    bold: {\r\n      fontWeight: 800\r\n    },\r\n    boxed: {\r\n      border: 1,\r\n      marginTop: 5,\r\n      marginBottom: 10,\r\n      marginLeft: 20,\r\n      marginRight: 40,\r\n      paddingRight: 0,\r\n      paddingLeft: 15,\r\n      paddingTop: 10,\r\n      paddingBottom: 70,\r\n      width: '87%'\r\n    },\r\n    dateTime: {\r\n        fontSize: 8,\r\n    },\r\n    appStamp: {\r\n        fontSize: 8,\r\n    },\r\n    appStampId: {\r\n        fontSize: 8,\r\n        textAlign: 'right',\r\n        marginRight: 35\r\n    },\r\n  });\r\n\r\n//=====( JSX FUNCTIONS )\r\n\r\n  const MyDocument = () => (\r\n    <Document>\r\n      <Page size=\"A4\" style={styles.page}>\r\n        <View style={styles.section}>\r\n            <Text style={styles.dateTimeParagraph}>\r\n                <Text style={styles.dateTime}>{`${date}, ${time}`}</Text>\r\n            </Text>\r\n            <Text style={styles.headerParagraph}>\r\n                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n                <Text style={styles.sectionHeading}>{`${transcriptsMail?.Year}-${transcriptsMail?.Year+1} OSAC Application Document`}</Text>\r\n                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n                <Text style={styles.appStamp}>Application #:</Text>\r\n            </Text>\r\n                <Text style={styles.appStampId}>{`${appId}`}</Text>\r\n\r\n        </View>\r\n        <View style={styles.section}>\r\n          <Text style={styles.paragraph}>\r\n            Staple this cover sheet to the front of your document. All documents must be received at OSAC by the deadline\r\n          </Text>\r\n          <Text style={styles.paragraph}>\r\n            Send to: Oregon Office of Student Access and Completion, 3225 25th Street SE, Salem, OR 97302\r\n          </Text>\r\n          <Text style={styles.paragraph}>\r\n            Keep a copy for yourself. If you want verification that OSAC received your transcript, send using return receipt requested service\r\n          </Text>\r\n\r\n          <Text style={styles.paragraph}>\r\n            <Text style={styles.bold}>Name:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</Text> \r\n            <Text>{`${lastName?.charAt(0).toUpperCase()+lastName?.slice(1)} ${firstName?.charAt(0).toUpperCase()+firstName?.slice(1)}`}</Text>\r\n          </Text>\r\n          <Text style={styles.paragraph}>\r\n            <Text style={styles.bold}>Scan Doc Name:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</Text> \r\n            <Text>{`${transcriptsMail?.ScanCode}`}</Text>\r\n          </Text>\r\n        </View>\r\n\r\n        <View style={styles.boxed}>\r\n          <Text style={styles.paragraph}>\r\n            {`${highschool?highschool.Name:otherHighschool} ${transcriptsMail?.AnswerType}`}\r\n          </Text>\r\n        </View>\r\n\r\n      </Page>\r\n    </Document>\r\n  );\r\n\r\n//=====( RENDER RETURN )\r\n\r\n  return (\r\n    updating? \r\n      <Spinner/>:\r\n    <PDFDownloadLink className='button' document={<MyDocument />} fileName=\"transcript_cover_page.pdf\">\r\n      {({ blob, url, loading, error }) => (loading || updating ? 'Generating PDF...' : 'Download or print the cover letter PDF')}\r\n    </PDFDownloadLink>\r\n    \r\n  );\r\n}\r\n\r\nexport default memo(TranscriptCoverPagePdf);","import Button from \"./../../components/Button\";\r\nimport RadioGroup from \"./../../components/RadioGroup\";\r\nimport React, { useRef, useState } from \"react\";\r\nimport { repeatableFieldName } from \"../Utility/RepeatableField\";\r\nimport { Delete } from \"@material-ui/icons\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport { getMimeInstance, compositeFieldname } from \"../../utils\";\r\nimport { AnswerTypeTranscriptProps, TranscriptDeliveryTypes, TRANSCRIPT_QUESTIONS } from \"../../store/form/fields\";\r\nimport HiddenInput from \"../Utility/HiddenInput\";\r\nimport { useEffect } from \"react\";\r\nimport apiClient from \"../../utils/API\";\r\nimport _get from \"lodash.get\";\r\nimport AnswerLock from \"./status/AnswerLock\";\r\nimport TranscriptCoverPagePdf from './../PDF/TranscriptCoverPagePdf';\r\n\r\n/**\r\n * prompt for transcript for a specific school. assumes one of each relevant delivery option\r\n * \r\n * This component was designed to work in tandem with TranscriptQuestion\r\n * \r\n * @param {boolean} param0.disabled\r\n * @param {Array} param0.schoolAnswers  all answers associated with this school\r\n * @param {TRANSCRIPT_QUESTIONS} param0.question  specific transcript question being prompted for here\r\n * @param {boolean} param0.isRequired\r\n * @param {number} param0.index unique index within this question, as determined by TranscriptQuestion\r\n * @param {Component} param0.formLink a custom link to present student with any associated form for this option\r\n * \r\n * @returns {Component}\r\n */\r\nfunction TranscriptAnswer({ disabled, schoolAnswers, question, isRequired, index, isReviewed = true, formLink, titleHeader, verifyOptionLabel }) {\r\n\r\n    const allowedFileExtensions = [\"pdf\"];\r\n    const maxFileSizeInMb = 25;\r\n    const allowedMimes = allowedFileExtensions.map((ext) => getMimeInstance().getType(ext));\r\n    const isHighSchool = question.level === \"HighSchool\";\r\n\r\n    const methods = useForm({ mode: \"onBlur\", });\r\n    const { setValue, handleSubmit, register, watch } = methods;\r\n\r\n    const [uploadError, setUploadError] = useState(null);\r\n    const hiddenFileInput = useRef();\r\n\r\n    \r\n    const uploadAnswer = schoolAnswers.find(x => x.DeliveryType == TranscriptDeliveryTypes.UPLOAD);\r\n    uploadAnswer.FieldKey = question.uploadField;\r\n    uploadAnswer.TypeLabel = \"I will upload my transcript.\"\r\n\r\n    const mailAnswer = schoolAnswers.find(x => x.DeliveryType == TranscriptDeliveryTypes.MAIL);\r\n    mailAnswer.FieldKey = question.mailField;\r\n    mailAnswer.TypeLabel = \"I will mail or hand-deliver my transcript.\"\r\n\r\n\r\n    const registrarAnswer = schoolAnswers.find(x => x.DeliveryType == TranscriptDeliveryTypes.REGISTRAR);\r\n    const registrarOptionLabel = verifyOptionLabel ?? \"I will request my high school registrar to provide my transcript.\" \r\n    if (registrarAnswer) {\r\n        registrarAnswer.FieldKey = question.registrarField;\r\n        registrarAnswer.TypeLabel = registrarOptionLabel + \" (recommended)\";;\r\n    }\r\n\r\n    const initiallySelectedAnswer = schoolAnswers.find(x => x.IsSelected) ?? null;\r\n\r\n    const answerOptions = schoolAnswers.map((x) => {\r\n        return {\r\n            value: x.DeliveryType,\r\n            label: x.TypeLabel,\r\n        }\r\n    });\r\n    if (!registrarAnswer && question.registrarField)\r\n        answerOptions.push({\r\n            value: TranscriptDeliveryTypes.REGISTRAR,\r\n            label: verifyOptionLabel + \" (not currently available)\",\r\n            disabled: true\r\n        });\r\n\r\n\r\n\r\n    const deliveryFieldName = repeatableFieldName(\"DELIVERY_METHOD\", index);\r\n\r\n    function getFieldName(field, property) {\r\n        if (isHighSchool)\r\n            return compositeFieldname(field, property);\r\n        else\r\n            return repeatableFieldName(field, index, property);\r\n    }\r\n\r\n    const idUploadFieldName = getFieldName(question.uploadField, AnswerTypeTranscriptProps.ID);\r\n    const digitalDeliveryMethod = getFieldName(question.uploadField, AnswerTypeTranscriptProps.DELIVERY_TYPE);\r\n    const isDigitalDeliveryMethodSelected = getFieldName(question.uploadField, AnswerTypeTranscriptProps.IS_SELECTED);\r\n    const isDigitalDeliveryMethodCertified = getFieldName(question.uploadField, AnswerTypeTranscriptProps.IS_CERTIFIED);\r\n    const fileFieldName = getFieldName(question.uploadField, AnswerTypeTranscriptProps._FILE);\r\n    // register(fileFieldName, {\r\n    //     validate: (value) => !isRequired || value,\r\n    // });\r\n\r\n    const idMailFieldName = getFieldName(question.mailField, AnswerTypeTranscriptProps.ID);\r\n    const mailDeliveryMethod = getFieldName(question.mailField, AnswerTypeTranscriptProps.DELIVERY_TYPE);\r\n    const isMailDeliveryMethodSelected = getFieldName(question.mailField, AnswerTypeTranscriptProps.IS_SELECTED);\r\n    const isMailDeliveryMethodCertified = getFieldName(question.mailField, AnswerTypeTranscriptProps.IS_CERTIFIED);\r\n\r\n    const idRegistrarFieldName = getFieldName(question.registrarField, AnswerTypeTranscriptProps.ID);\r\n    const registrarDeliveryMethod = getFieldName(question.registrarField, AnswerTypeTranscriptProps.DELIVERY_TYPE);\r\n    const isRegistrarDeliveryMethodSelected = getFieldName(question.registrarField, AnswerTypeTranscriptProps.IS_SELECTED);\r\n    const isRegistrarDeliveryMethodCertified = getFieldName(question.registrarField, AnswerTypeTranscriptProps.IS_CERTIFIED);\r\n\r\n    const [schoolName, setSchoolName] = useState(null);\r\n    /**\r\n     * set school name\r\n     */\r\n    useEffect(async () => {\r\n\r\n        if (uploadAnswer.Description) {\r\n            setSchoolName(uploadAnswer.Description);\r\n            return;\r\n        }\r\n\r\n        if (!uploadAnswer.SchoolCode) {\r\n            setSchoolName(\"Unlisted\");\r\n        }\r\n        else if (isHighSchool) {\r\n            const school = await apiClient.getHighSchool(uploadAnswer.Qualifier);\r\n            setSchoolName(school.Name);\r\n        }\r\n        else {\r\n            const school = await apiClient.getCollege(uploadAnswer.Qualifier);\r\n            setSchoolName(school.Name);\r\n        }\r\n    }, [uploadAnswer.SchoolCode]);\r\n\r\n    const [fileInfo, setFileInfo] = useState(null);\r\n    /**\r\n     * initialize prompt for downloading previously uploaded file\r\n     */\r\n    useEffect(async () => {\r\n        if (uploadAnswer?.IsFileAvailable) {\r\n            const blob = await apiClient.getFileFromQuestionKey({\r\n                questionKey: uploadAnswer.QuestionKey,\r\n                id: uploadAnswer.Id,\r\n                year: uploadAnswer.Year,\r\n            });\r\n            if (blob.size) {\r\n                const file = new File([blob], `${uploadAnswer.QuestionKey}.pdf`);\r\n                setFileInfo(file);\r\n            }\r\n        }\r\n    }, [uploadAnswer?.Id]);\r\n\r\n    function download(filename, blob) {\r\n        if (window.navigator.msSaveOrOpenBlob) {\r\n            window.navigator.msSaveBlob(blob, filename);\r\n        } else {\r\n            var elem = window.document.createElement(\"a\");\r\n            elem.href = window.URL.createObjectURL(blob);\r\n            elem.download = filename;\r\n            document.body.appendChild(elem);\r\n            elem.click();\r\n            document.body.removeChild(elem);\r\n        }\r\n    };\r\n\r\n    const handleDownload = (e) => {\r\n        e.preventDefault();\r\n        download(fileInfo.name, fileInfo);\r\n    };\r\n\r\n    const handleDelete = (e) => {\r\n        e.preventDefault();\r\n        setFileInfo(null);\r\n    };\r\n\r\n    const handleUpload = (event) => {\r\n        if ([...event.target.files].length) {\r\n            const fileUploaded = event.target.files[0];\r\n            const sizeInMb = fileUploaded.size / 1024 / 1024 / 1.048576;\r\n            const mime = fileUploaded.type;\r\n            if (sizeInMb > maxFileSizeInMb) {\r\n                setUploadError(`Exceeds maximum file size of ${maxFileSizeInMb} Mb`);\r\n            } else if (!allowedMimes.includes(mime)) {\r\n                setUploadError(`Can only upload files of format: ${allowedFileExtensions.join(\", \")}`);\r\n            } else {\r\n                setFileInfo(fileUploaded);\r\n            }\r\n        }\r\n    };\r\n\r\n    const triggerUpload = (e) => {\r\n        e.preventDefault();\r\n        setUploadError(null);\r\n        hiddenFileInput.current.click();\r\n    };\r\n\r\n    //TODO: why isn't watch working by itself?\r\n    const [selectedDeliveryType, setSelectedDeliveryType] = useState(initiallySelectedAnswer?.DeliveryType);\r\n    const updateDeliveryType = (event) => {\r\n        setSelectedDeliveryType(event.target.value);\r\n    }\r\n    const selectedAnswer = schoolAnswers.find(x => x.DeliveryType === selectedDeliveryType);\r\n\r\n    const isDisabled = disabled || schoolAnswers.some(x => x.IsLocked);\r\n    const reviewFeedbackStyle = uploadAnswer.ReviewStatus !== 'COMPLETE' && uploadAnswer.ReviewStatus !== 'PEND_OSAC' && uploadAnswer.ReviewStatus !== 'NA' ? { color: '#da3754' } : {};\r\n\r\n    const filename = fileInfo?.name;\r\n\r\n    return (\r\n        <div className=\"table__body\">\r\n\r\n            <input required={isRequired} type=\"file\"\r\n                ref={hiddenFileInput}\r\n                onChange={handleUpload}\r\n                style={{ display: \"none\" }}\r\n            />\r\n\r\n            {/* Digital Transcript fields */}\r\n            <HiddenInput name={idUploadFieldName} value={uploadAnswer.Id} />\r\n            <HiddenInput name={fileFieldName} value={fileInfo} />\r\n            <HiddenInput name={digitalDeliveryMethod} value={uploadAnswer.DeliveryType} />\r\n            <HiddenInput name={isDigitalDeliveryMethodSelected} value={!!(selectedDeliveryType === TranscriptDeliveryTypes.UPLOAD)} />\r\n            <HiddenInput name={isDigitalDeliveryMethodCertified} value={!!(selectedDeliveryType === TranscriptDeliveryTypes.UPLOAD)} />\r\n\r\n            {/* Mail Transcript fields */}\r\n            <HiddenInput name={idMailFieldName} value={mailAnswer.Id} />\r\n            <HiddenInput name={mailDeliveryMethod} value={mailAnswer.DeliveryType} />\r\n            <HiddenInput name={isMailDeliveryMethodSelected} value={!!(selectedDeliveryType === TranscriptDeliveryTypes.MAIL)} />\r\n            <HiddenInput name={isMailDeliveryMethodCertified} value={!!(selectedDeliveryType === TranscriptDeliveryTypes.MAIL)} />\r\n\r\n            {/* Registrar Transcript fields*/}\r\n            {registrarAnswer &&\r\n                <>\r\n                    <HiddenInput name={idRegistrarFieldName} value={registrarAnswer.Id} />\r\n                    <HiddenInput name={registrarDeliveryMethod} value={registrarAnswer.DeliveryType} />\r\n                    <HiddenInput name={isRegistrarDeliveryMethodSelected} value={!!(selectedDeliveryType === TranscriptDeliveryTypes.REGISTRAR)} />\r\n                    <HiddenInput name={isRegistrarDeliveryMethodCertified} value={!!(selectedDeliveryType === TranscriptDeliveryTypes.REGISTRAR)} />\r\n                </>\r\n            }\r\n\r\n            <div>\r\n                <span style={{ fontWeight: 'bold' }}>{schoolName}  {titleHeader ? '['+ titleHeader + ']' : ''}  </span>\r\n                <AnswerLock answer={selectedAnswer} />\r\n            </div>\r\n            <div>\r\n                {isReviewed &&\r\n                    <>\r\n                        <p className=\"table__cell\" style={{ textAlign: 'left' }}>\r\n                            <div dangerouslySetInnerHTML={{ __html: selectedAnswer?.ReviewStatusDescription }} style={reviewFeedbackStyle}></div>\r\n                        </p>\r\n                        <p className=\"table__cell\" style={{ textAlign: 'left' }}>\r\n                            <div dangerouslySetInnerHTML={{ __html: selectedAnswer?.ReviewInstructions }} style={reviewFeedbackStyle}></div>\r\n                        </p>\r\n                    </>\r\n                }\r\n            </div>\r\n            <div>\r\n                <RadioGroup\r\n                    disabled={isDisabled}\r\n                    name={deliveryFieldName}\r\n                    key={deliveryFieldName}\r\n                    onChange={updateDeliveryType}\r\n                    defaultValue={initiallySelectedAnswer?.DeliveryType}\r\n                    value={selectedDeliveryType}\r\n                    style={{\r\n                        fontSize: \"14px\",\r\n                        position: \"relative\",\r\n                        color: \"#5f5f5f\",\r\n                    }}\r\n                    listItems={answerOptions}\r\n                />\r\n            </div>\r\n\r\n            <div style={{ marginTop: \"2em\", marginLeft: \"2em\" }} className=\"rhythm\">\r\n\r\n\r\n                {(() => {\r\n                    switch (selectedDeliveryType) {\r\n                        case TranscriptDeliveryTypes.UPLOAD:\r\n                            return (\r\n                                <div>\r\n                                    {!filename &&\r\n                                        <div>\r\n                                            <Button\r\n                                                style={{ display: \"inline-block\" }}\r\n                                                disabled={isDisabled}\r\n                                                variant=\"text\"\r\n                                                label=\"Upload File\"\r\n                                                onClick={triggerUpload}\r\n                                            />\r\n\r\n                                            <div style={{ fontSize: \".75rem\", color: \"red\" }}>{uploadError}</div>\r\n                                        </div>\r\n                                    }\r\n                                    {filename &&\r\n                                        <>\r\n                                            <a\r\n                                                style={{\r\n                                                    fontsize: \"14px\",\r\n                                                    color: \"#5f5f5f\",\r\n                                                    textDecoration: \"underline\",\r\n                                                }}\r\n                                                href=\"#\"\r\n                                                onClick={handleDownload}\r\n                                            >\r\n                                                {filename}\r\n                                            </a>\r\n                                            {!isDisabled &&\r\n                                                <a\r\n                                                    style={{\r\n                                                        fontsize: \"14px\",\r\n                                                        position: \"relative\",\r\n                                                        left: \"0.5rem\",\r\n                                                    }}\r\n                                                    href=\"#\"\r\n                                                    onClick={handleDelete}\r\n                                                >\r\n                                                    <Delete className=\"pointer\" style={{ color: \"rgba(255, 0, 0, 0.5)\" }} />\r\n                                                </a>\r\n                                            }\r\n\r\n                                        </>\r\n                                    }\r\n                                </div>\r\n                            )\r\n                        case TranscriptDeliveryTypes.REGISTRAR:\r\n                            return (\r\n                                <div>\r\n                                    {registrarAnswer.IsFileAvailable && <p>File Received</p>}\r\n                                    {!registrarAnswer.IsFileAvailable &&\r\n                                        formLink\r\n                                    }\r\n                                </div>\r\n                            )\r\n                        case TranscriptDeliveryTypes.MAIL:\r\n                            return (\r\n                                <div style={{ textAlign: 'left' }}>\r\n                                    {mailAnswer.IsFileAvailable && <p>File Received</p>}\r\n                                    {!mailAnswer.IsFileAvailable &&                                     \r\n                                        <div>\r\n                                            {question !== TRANSCRIPT_QUESTIONS.PROOF_OF_GPA && <TranscriptCoverPagePdf transcriptsMail={mailAnswer} isHS={question.mailField.includes(\"FALL_HS_TRANSCRIPTS_MAIL\")} /> }\r\n                                            <p>\r\n                                                OSAC suggests mailing the transcripts signature required for\r\n                                                confirmation of delivery. OSAC can not confirm delivery of\r\n                                                transcripts. Postmarks will not be considered as the document\r\n                                                delivery date.\r\n                                            </p>\r\n                                            <div>\r\n                                                Mail documents with the cover letter to:\r\n                                                <address style={{ marginLeft: \"2em\" }}>\r\n                                                    <br />\r\n                                                    Oregon Office of Student Access and Completion\r\n                                                    <br />\r\n                                                    3225 25th Street SE\r\n                                                    <br />\r\n                                                    Salem, OR 97302\r\n                                                </address>\r\n\r\n                                            </div>\r\n                                        </div>\r\n                                    }\r\n\r\n                                    \r\n                                </div>\r\n                            )\r\n                        default:\r\n                            return null\r\n                    }\r\n                })()}\r\n            </div>\r\n\r\n\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default TranscriptAnswer;\r\n","import { groupBy } from \"lodash\";\r\nimport TranscriptAnswer from \"../TranscriptAnswer\";\r\n\r\n/**\r\n * prompt for an entire transcript questions' worth of answers\r\n * \r\n * the way we present transcripts is unlike other questions, since we mingle the different answers together into one UI\r\n * component (to select a delivery method)\r\n * \r\n * @param {*} param0 \r\n * @returns {Component}\r\n */\r\nfunction TranscriptQuestion({ section, disabled, transcriptField, isRequired, formLink, titleHeader, verifyOptionLabel }) {\r\n\r\n    const answers = section.answers?.getAll(transcriptField.name);\r\n    const qualifiedGroups = Object.values(groupBy(answers, x => x?.SchoolAnswerId));\r\n    //const isReviewed = true; //transcriptField.level !== \"Document\";\r\n\r\n    return (\r\n        <div  >           \r\n            {qualifiedGroups.map((answerGroup, i) =>\r\n                <TranscriptAnswer schoolAnswers={answerGroup} \r\n                    formLink={formLink}\r\n                    disabled={disabled} \r\n                    index={i} \r\n                    question={transcriptField} \r\n                    isRequired={isRequired} \r\n                    verifyOptionLabel={verifyOptionLabel}\r\n                    titleHeader={titleHeader}/>\r\n            )}\r\n        </div>\r\n    );\r\n\r\n}\r\n\r\nexport default TranscriptQuestion;","export default __webpack_public_path__ + \"static/media/HSTranscriptRequestForm.65c44973.pdf\";","import { actions } from \"./../../store\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport React, { useState, useEffect } from \"react\";\r\nimport { FieldSection, FieldRow, FieldSlot } from \"../../components/Forms/FieldSection\";\r\nimport FormSection from \"../../components/FormSection\";\r\nimport { FIELDS, TranscriptDeliveryTypes, AnswerTypeTranscriptProps, TRANSCRIPT_QUESTIONS } from \"../../store/form/fields\";\r\nimport { compositeFieldname } from \"../../utils\";\r\nimport _get from \"lodash.get\";\r\nimport { open } from \"../../store/snack/actions\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport apiClient from \"../../utils/API\";\r\nimport TranscriptQuestion from \"../../components/answer/question/TranscriptQuestion\";\r\nimport HSTranscriptRequestForm from '../../docs/HSTranscriptRequestForm.pdf';\r\n\r\n/**\r\n * scholarships program transcript editor\r\n * @param {*} param0 \r\n * @returns {Component}\r\n */\r\nfunction EditTranscripts({ displayInstructions, section, onChange, onCancel, fafsaYear = null, transcriptRequirements = null, schStatus=null, trascriptEndDate=null }) {\r\n\r\n  const methods = useForm({ mode: \"onBlur\", });\r\n  const { setValue, handleSubmit, watch } = methods;\r\n  const reduxFormState = useSelector((state) => state.form);\r\n\r\n  /**\r\n   * check if this question is even being prompted by student answers.\r\n   * @returns {Boolean}\r\n   */\r\n  const isQuestionRequested = (fieldKey) => {\r\n    if (!_get(reduxFormState, `fields.${fieldKey}`))\r\n      return false;\r\n    return true;\r\n  }\r\n  /**\r\n   * get readable description of hs type for transcript prompts\r\n   * @returns {String}\r\n   */\r\n  const getHighSchoolTypeName = () => {\r\n    const highschool = _get(reduxFormState, `fields.${FIELDS.HIGHSCHOOL}`);\r\n    if (!highschool)\r\n      return \"High School or Eequivalent\";\r\n    const highschoolType = _get(highschool, \"Type.value\");\r\n\r\n    switch (highschoolType) {\r\n      case 'Traditional':\r\n        return 'Public/Private Traditional high school'\r\n      case 'Alternative':\r\n        return 'Alternative School';\r\n      case 'CommunityCollege':\r\n        return 'Community College';\r\n      case 'Ged':\r\n      case 'GedHomeSchool':\r\n        return 'GED';\r\n      case 'HomeSchool':\r\n        return 'Home School';\r\n      case 'Unlisted':\r\n      default:\r\n        return \"High School or Equivalent\";\r\n    }\r\n  }\r\n  /**\r\n   * human readable description of transcript requirements\r\n   * @param {*} question \r\n   * @returns {String}\r\n   */\r\n  const getRequirementDescription = (question) => {\r\n    const requirements = transcriptRequirements.get(question.name);\r\n    \r\n    return requirements?.isRequired ? \"Required\"\r\n      : requirements?.isOptional ? \"Optional\"\r\n        : requirements?.isEitherOr ? 'Either College or Public or ' + getHighSchoolTypeName() + ' Transcripts Required'\r\n          : \"\";\r\n  }\r\n\r\n  /**\r\n   * determine appropriate descriptor for transcript-type prompts given it's requirement status\r\n   * @param {*} question \r\n   * @returns \r\n   */\r\n  const getTranscriptTitle = (question) => {\r\n\r\n    return question.description + \" -- \" + getRequirementDescription(question);\r\n  }\r\n\r\n  useEffect(() => {\r\n    (async () => {\r\n      const collegeTranscripts = [\r\n        _get(\r\n          reduxFormState,\r\n          `fields.${FIELDS.FALL_COLLEGE_TRANSCRIPTS_DIGITAL}`\r\n        ),\r\n        _get(reduxFormState, `fields.${FIELDS.FALL_COLLEGE_TRANSCRIPTS_MAIL}`),\r\n      ];\r\n      const fileAvailableColleges = collegeTranscripts.reduce(\r\n        (available, transcripts) => {\r\n          (transcripts || []).map((ts) => {\r\n            if (ts.IsFileAvailable.value === true) {\r\n              available.push(ts);\r\n            }\r\n          });\r\n          return available;\r\n        },\r\n        []\r\n      );\r\n\r\n      for (let i = 0; i < fileAvailableColleges.length; i++) {\r\n        const collegeTranscript = fileAvailableColleges[i];\r\n        const schoolCode = _get(collegeTranscript, \"SchoolCode.value\");\r\n        try {\r\n          const college = await apiClient.getCollege(schoolCode);\r\n          collegeTranscript[\"_name\"] = college && college.Name;\r\n        } catch (e) { }\r\n      }\r\n\r\n    })();\r\n  }, [reduxFormState]);\r\n\r\n  const [loading, setLoading] = useState(false);\r\n  const dispatch = useDispatch();\r\n\r\n  const onSubmit = async (data, e) => {\r\n   \r\n    try {\r\n      setLoading(true);\r\n      const result = await actions.submitForm(\r\n        data,\r\n        [],\r\n        [\"HSTranscriptSubmissionMethod\", \"DELIVERY_METHOD\"]\r\n      );\r\n      if (typeof onChange === \"function\") {\r\n        onChange(true);\r\n      }\r\n    } catch (e) {\r\n      dispatch(\r\n        open({\r\n          message: e.message,\r\n          severity: \"success\",\r\n        })\r\n      );\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  const onError = (errors) => {\r\n    console.log(\"ERR\", errors);    \r\n  };\r\n  \r\n  useEffect(() => {\r\n    window.addEventListener(\"beforeunload\", alertUser);\r\n    return () => {\r\n      window.removeEventListener(\"beforeunload\", alertUser);\r\n    };\r\n  }, []);\r\n\r\n  const alertUser = (e) => {\r\n    e.preventDefault();\r\n    e.returnValue = \"\";\r\n  };\r\n\r\n  const getReduxField = (fieldKey) => {\r\n    return _get(reduxFormState, `fields.${fieldKey}.value`);\r\n  };\r\n\r\n  const hsDigitalSelected = getReduxField(\r\n    compositeFieldname(\r\n      FIELDS.FALL_HS_TRANSCRIPTS_DIGITAL,\r\n      AnswerTypeTranscriptProps.IS_SELECTED\r\n    )\r\n  );\r\n  const hsMailSelected = getReduxField(\r\n    compositeFieldname(\r\n      FIELDS.FALL_HS_TRANSCRIPTS_MAIL,\r\n      AnswerTypeTranscriptProps.IS_SELECTED\r\n    )\r\n  );\r\n  const hsRegistrarSelected = getReduxField(\r\n    compositeFieldname(\r\n      FIELDS.FALL_HS_TRANSCRIPTS_REGISTRAR,\r\n      AnswerTypeTranscriptProps.IS_SELECTED\r\n    )\r\n  );\r\n\r\n  useEffect(() => {\r\n    if (hsDigitalSelected) {\r\n      setValue(\"HSTranscriptSubmissionMethod\", TranscriptDeliveryTypes.UPLOAD);\r\n    } else if (hsMailSelected) {\r\n      setValue(\"HSTranscriptSubmissionMethod\", TranscriptDeliveryTypes.MAIL);\r\n    } else {\r\n      setValue(\r\n        \"HSTranscriptSubmissionMethod\",\r\n        TranscriptDeliveryTypes.REGISTRAR\r\n      );\r\n    }\r\n  }, [hsDigitalSelected, hsMailSelected, hsRegistrarSelected]);\r\n\r\n  const orderedTranscriptQuestions = [\r\n    TRANSCRIPT_QUESTIONS.FALL_COLLEGE_RECENT,\r\n    TRANSCRIPT_QUESTIONS.FALL_COLLEGE_PRIOR,\r\n    TRANSCRIPT_QUESTIONS.FALL_COLLEGE_DURING_HS,\r\n    TRANSCRIPT_QUESTIONS.FALL_HS\r\n  ];\r\n\r\n  return (\r\n    <FormProvider {...methods}>\r\n      <form onSubmit={handleSubmit(onSubmit, onError)}>\r\n        <FormSection\r\n          title=\"Transcripts\"\r\n          isEditable={true}\r\n          onSaveClick={handleSubmit(onSubmit, onError)}\r\n          onCancelClick={onCancel}\r\n          loading={loading}\r\n        >\r\n          {/* Transcript Instructions */}\r\n          {displayInstructions}\r\n\r\n          {/*#4155: SCH - External Review Message & Error message showed on Dashboard. */}\r\n          {schStatus?.IsSubmitted && <FieldSlot md={12}>\r\n            <div className=\"mt-1\">\r\n            <strong>Scholarship Application Review Status</strong> \r\n            {schStatus?.IsSubmitted && (() => {\r\n              switch (schStatus.ReviewStatus){\r\n                  case 'VALID':\r\n                    return <div className=\"rhythm\" >Review Valid</div>\r\n                  case 'REJECT':\r\n                    return (\r\n                      <div className=\"rhythm\" style={{ color: '#da3754' }}>\r\n                        <div>Corrections required.  Fix errors by <b>{trascriptEndDate}</b> to be considered for scholarships.</div>\r\n                        <div dangerouslySetInnerHTML={{__html: schStatus.ReviewInstructions}}></div>\r\n                      </div>)                  \r\n                  case 'PENDING':                    \r\n                  case 'PENDINGNEWDOCREJECT':\r\n                  case 'PENDINGNEWDOCVALID':\r\n                  case 'REVIEW1':\r\n                  case 'REVIEW2':\r\n                    return <div className=\"rhythm\" >Awaiting Review</div>\r\n                  default:\r\n                    return <></>\r\n              }\r\n            })()}                            \r\n            </div>\r\n          </FieldSlot>\r\n          }  \r\n\r\n          <FieldSection>\r\n            <FieldRow>\r\n              <FieldSlot md={12}>\r\n                <div id=\"TranscriptSection\" className=\"mt-05\">\r\n                  {orderedTranscriptQuestions.filter(x => isQuestionRequested(x.uploadField)).map(question =>\r\n                        <TranscriptQuestion\r\n                          titleHeader={getTranscriptTitle(question)}\r\n                          section={section}\r\n                          transcriptField={question}\r\n                          isRequired={transcriptRequirements.isRequired(question.name)}\r\n                          formLink={\r\n                            <div>\r\n                                Print out the&nbsp;                                \r\n                                <a className=\"button\" href={HSTranscriptRequestForm} download=\"HSTranscriptRequestForm.pdf\" >transcript request form</a>                                \r\n                                &nbsp;and give it to your high school registrar.                                \r\n                            </div>\r\n                          }\r\n                    />\r\n                  )}\r\n                </div>\r\n              </FieldSlot>\r\n            </FieldRow>\r\n          </FieldSection>\r\n\r\n        </FormSection>\r\n      </form>\r\n    </FormProvider>\r\n  );\r\n}\r\n\r\nexport default EditTranscripts;\r\n","import React from \"react\";\r\n\r\nconst ReadOnlyActivityPicker = ({ listActivities }) => {\r\n  return (\r\n    <div className=\"table-wrapper\">\r\n      <table className=\"table\">\r\n        <tr className=\"table__header\">\r\n          <th>Title</th>\r\n          <th>Frequency</th>\r\n          <th>Dates</th>\r\n          <th>Weekly Hr.</th>\r\n          <th>Total Hr.</th>\r\n          <th>Responsibilities</th>\r\n        </tr>\r\n\r\n        {listActivities.map((item, i) => (\r\n          <tr className=\"table__row\" key={i} container>\r\n            <td>{item.title}</td>\r\n            <td>{item.frequency}</td>\r\n            <td>{`${item.dates.start} - ${item.dates.end}`}</td>\r\n            <td>{item.weeklyHr}</td>\r\n            <td>{item.totalHr}</td>\r\n            <td>{item.responsibilities}</td>\r\n          </tr>\r\n        ))}\r\n      </table>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default ReadOnlyActivityPicker;\r\n","import { useEffect, useState } from \"react\";\r\nimport ReadOnlyDesktop from \"./ReadOnlyDesktop\";\r\nimport { getCode } from \"../Utility/ConvertCode\";\r\nimport moment from \"moment\";\r\n\r\nconst ReadOnly = ({ activities }) => {\r\n  const [listActivities, setListActivities] = useState([]);\r\n\r\n  useEffect(() => {\r\n    (async () => {\r\n      const _activities = [];\r\n      for (const i in activities) {\r\n        const frequency = await getCode(\r\n          \"ActivityFrequency\",\r\n          activities[i]?.FrequencyCode?.value\r\n        );\r\n        const activity = {\r\n          title: activities[i]?.Title?.value,\r\n          frequency,\r\n          dates: {\r\n            start: moment(activities[i]?.StartDate?.value).format(\"MMMM YYYY\"),\r\n            end: activities[i]?.StopDate?.value\r\n              ? moment(activities[i]?.StopDate?.value).format(\"MMMM YYYY\")\r\n              : \" Current\",\r\n          },\r\n          weeklyHr: activities[i]?.HoursPerUnit?.value,\r\n          totalHr: activities[i]?.TotalHours?.value,\r\n          responsibilities: activities[i]?.Accomplishments?.value,\r\n        };\r\n        _activities.push(activity);\r\n      }\r\n      setListActivities(_activities);\r\n    })();\r\n  }, [activities]);\r\n\r\n  return (\r\n    <ReadOnlyDesktop listActivities={listActivities.slice(0, activities?.length)} />\r\n  );\r\n};\r\n\r\nexport default ReadOnly;\r\n","function ProgressBar({ progress }) {\r\n  \r\n  return (\r\n    <div className=\"progress-bar__chart\">\r\n      <div style={{height: '3rem', background: 'rgba(247, 219, 106, .5)', borderRadius: '5px'}}>\r\n        <div style={{width: `${progress}%`, height: '100%', background: '#a2ba69', borderRadius: '5px 0 0 5px'}}>\r\n          <div align='left' style={{height: '3rem', lineHeight: '3rem', paddingLeft: '1rem', color: '#ffffff', fontWeight: 'bold'}}>{progress}% Completed</div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n\r\nexport default ProgressBar;","import { actions } from '../../store';\r\nimport { useSelector } from 'react-redux';\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport { useEffect } from 'react';\r\nimport { FieldSection, FieldRow, FieldSlot } from '../../components/Forms/FieldSection';\r\nimport { FIELDS, getField } from '../../store/form/fields';\r\nimport FormSection from '../../components/FormSection';\r\nimport { open } from \"../../store/snack/actions\";\r\nimport { useDispatch } from 'react-redux';\r\nimport { useState } from 'react';\r\nimport TextAnswer, { TextVariant } from '../../components/answer/TextAnswer';\r\nimport { Alert } from '@material-ui/core';\r\n\r\nfunction EditPersonalStatements({ section, onChange, onCancel }) {\r\n\r\n  const methods = useForm({\r\n    mode: 'onBlur'\r\n  });\r\n  const { errors, formState, getValues, setValue, handleSubmit } = methods;\r\n  const reduxFormState = useSelector((state) => state.form);\r\n  const isFetchingData = reduxFormState.isLoading;\r\n\r\n  const [loading, setLoading] = useState(false)\r\n  const dispatch = useDispatch();\r\n\r\n  const onSubmit = async (data, e) => {\r\n    try {\r\n      setLoading(true)\r\n      const result = await actions.submitForm(data);\r\n      // console.log(data, e);\r\n      if (typeof onChange === 'function') {\r\n        onChange(true);\r\n      }\r\n    } catch (e) {\r\n      dispatch(open({\r\n        message: e.message,\r\n        severity: \"success\",\r\n      }))\r\n    } finally {\r\n      setLoading(false)\r\n    }\r\n\r\n  };\r\n\r\n  const onError = (errors, e) => {\r\n    // console.log('ERROR',errors, e);\r\n  }\r\n\r\n  useEffect(() => {\r\n    window.addEventListener('beforeunload', alertUser)\r\n    return () => {\r\n      window.removeEventListener('beforeunload', alertUser)\r\n    }\r\n  }, [])\r\n\r\n  const alertUser = e => {\r\n    e.preventDefault()\r\n    e.returnValue = ''\r\n  }\r\n\r\n\r\n  return (\r\n    <FormProvider {...methods} >\r\n      <form onSubmit={handleSubmit(onSubmit, onError)} >\r\n        <FormSection title='Personal Statements' isEditable={true} onSaveClick={handleSubmit(onSubmit, onError)} onCancelClick={onCancel} loading={loading}>\r\n\r\n            <Alert severity=\"info\">\r\n                <p>\r\n                    Complete the 3 required personal statements; the fourth one is optional. Do not exceed the 1,900 character limit. Start with a strong introduction and fully\r\n                    answer each question. Revise for clarity and spelling errors. Get feedback from others. Be honest, authentic, and show your passion.\r\n                </p>\r\n                <p style={{marginTop: '1em'}}>\r\n                    Note: Timeouts may occur, causing you to lose unsaved work. We encourage you to draft your responses in a separate document first. Once finalized, \r\n                    copy your statements into the scholarship application.\r\n                </p>\r\n            </Alert>\r\n\r\n          <FieldSection withDivider={true}>\r\n            <FieldRow>\r\n              <FieldSlot md={12}>\r\n                <br />\r\n                <TextAnswer answer={section.getAnswerByField(FIELDS.ESSAY_1)} variant={TextVariant.ESSAY}\r\n                  inputLabel=\"What are your specific educational plans and career goals and why? What motivates you to achieve them?\"\r\n                  isRequired={true}\r\n                  placeholder='' className=\"mt-2\" characterLimit=\"1900\" />\r\n\r\n                <br />\r\n                <TextAnswer answer={section.getAnswerByField(FIELDS.ESSAY_2)} variant={TextVariant.ESSAY}\r\n                  inputLabel=\"What have you done for your family, school, or community that you care about the most and why?\"\r\n                  placeholder='' className=\"mt-2\" characterLimit=\"1900\" />\r\n\r\n                <br />\r\n                <TextAnswer answer={section.getAnswerByField(FIELDS.ESSAY_3)} variant={TextVariant.ESSAY}\r\n                  inputLabel=\"Describe a personal accomplishment, impactful change, or experience that has occurred in your life. What skills and strengths were needed to respond, and what did you learn about yourself?\"\r\n                  placeholder='' className=\"mt-2\" characterLimit=\"1900\" />\r\n\r\n                <br />\r\n                <TextAnswer answer={section.getAnswerByField(FIELDS.ESSAY_4)} variant={TextVariant.ESSAY}\r\n                  inputLabel={getField(FIELDS.ESSAY_4).question} placeholder='' className=\"mt-2\" characterLimit=\"1900\" />\r\n\r\n              </FieldSlot>\r\n            </FieldRow>\r\n          </FieldSection>\r\n\r\n        </FormSection>\r\n      </form>\r\n    </FormProvider>\r\n  );\r\n}\r\n\r\nexport default EditPersonalStatements;\r\n","import { actions } from './../../store';\r\nimport { useSelector } from 'react-redux';\r\nimport { useForm, useFormContext, FormProvider, useWatch } from \"react-hook-form\";\r\nimport React, { useState, useEffect } from 'react';\r\nimport Button from '../../components/Button';\r\nimport FormSection from '../../components/FormSection';\r\nimport { open } from \"../../store/snack/actions\";\r\nimport { useDispatch } from 'react-redux';\r\nimport {FieldRow, FieldSection, FieldSlot} from \"../../components/Forms/FieldSection\";\r\nimport BooleanRadioGroup from \"../../components/BooleanRadioGroup\";\r\nimport {FIELDS} from \"../../store/form/fields\";\r\nimport BooleanAnswer from \"../../components/answer/BooleanAnswer\";\r\n\r\nfunction EditWorkingStudentData({ onChange, onCancel, section }) {\r\n\r\n    const year = section.year;\r\n    const reduxFormState = useSelector((state)=> state.form);\r\n    const isFetchingData = reduxFormState.isLoading;\r\n\r\n    const methods = useForm({\r\n      mode: 'onBlur'\r\n    });\r\n    const { errors, formState, getValues, setValue, handleSubmit, watch } = methods;\r\n\r\n    const watchWorkingCurrent = watch(FIELDS.WORKING__CURRENT)\r\n    const watchWorkingNextYear = watch(FIELDS.WORKING__NEXT_YEAR)\r\n\r\n    const [loading, setLoading] = useState(false)\r\n    const dispatch = useDispatch();\r\n\r\n    const onSubmit = async (data, e) => {\r\n      try {\r\n        setLoading(true)\r\n        const result = await actions.submitForm(data,[],[]);\r\n        if(typeof onChange === 'function'){\r\n          onChange(true);\r\n        }\r\n        // console.log(data, e);\r\n      } catch (e) {\r\n        dispatch(open({\r\n          message: e.message,\r\n          severity: \"success\",\r\n        }))\r\n      } finally {\r\n        setLoading(false)\r\n      }\r\n    };\r\n\r\n  const onError = (errors, e) => {\r\n      // console.log('ERROR',errors, e);\r\n    }\r\n\r\n    useEffect(() => {\r\n      window.addEventListener('beforeunload', alertUser)\r\n      return () => {\r\n        window.removeEventListener('beforeunload', alertUser)\r\n      }\r\n    }, [])\r\n    const alertUser = e => {\r\n      e.preventDefault()\r\n      e.returnValue = ''\r\n    }\r\n\r\n    return (\r\n      <FormProvider {...methods} >\r\n        <form onSubmit={handleSubmit(onSubmit, onError)} >\r\n          <FormSection title='Working Student Questions' isEditable={true} onSaveClick={handleSubmit(onSubmit, onError)} onCancelClick={onCancel} loading={loading}>\r\n\r\n            <FieldSection>\r\n              <FieldRow>\r\n                <FieldSlot>\r\n                  <FieldSection>\r\n                    <strong>Are you working 20+ hours/week in the current {year-1} - {year} academic year?<span className=\"required\">*</span></strong>\r\n                    <FieldRow>\r\n                      <FieldSlot>\r\n                        <BooleanAnswer\r\n                          answer={section.getAnswerByField(FIELDS.WORKING__CURRENT)}\r\n                          value={watchWorkingCurrent}\r\n                          isRequired={true}\r\n                        />\r\n                      </FieldSlot>\r\n                    </FieldRow>\r\n                  </FieldSection>\r\n\r\n                  <FieldSection>\r\n                    <strong>Are you planning to work 20+ hours a week in the next academic year {year} - {year+1}?<span className=\"required\">*</span></strong>\r\n                    <FieldRow>\r\n                      <FieldSlot>\r\n                        <BooleanAnswer\r\n                          answer={section.getAnswerByField(FIELDS.WORKING__NEXT_YEAR)}\r\n                          value={watchWorkingNextYear}\r\n                          isRequired={true}\r\n                        />\r\n                      </FieldSlot>\r\n                    </FieldRow>\r\n                  </FieldSection>\r\n                </FieldSlot>\r\n              </FieldRow>\r\n            </FieldSection>\r\n          </FormSection>\r\n        </form>\r\n      </FormProvider>\r\n    );\r\n}\r\n\r\nexport default EditWorkingStudentData;\r\n","import NumericDecimal from \"../NumericDecimal\";\r\nimport AnswerLock from \"./status/AnswerLock\";\r\n\r\n/**\r\n * prompt for a whole-number answer (Integer answer type)\r\n * \r\n * @param {*} param0 \r\n * @returns \r\n */\r\nfunction IntegerAnswer({answer, disabled, inputLabel, ...props}){\r\n\r\n\r\n    return <NumericDecimal    \r\n            inputLabel={<>{inputLabel} <AnswerLock answer={answer} /></>}\r\n            placeholder={inputLabel}\r\n            precision={1}\r\n            disabled={disabled || answer.IsLocked}\r\n            allowNegative={false}\r\n            name={answer.FieldKey}\r\n            {...props}        \r\n        />\r\n    \r\n}\r\n\r\nexport default IntegerAnswer;","import { actions } from './../../store';\r\nimport { useSelector } from 'react-redux';\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport { useState, useEffect } from 'react';\r\nimport FormSection from '../../components/FormSection';\r\nimport { open } from \"../../store/snack/actions\";\r\nimport { useDispatch } from 'react-redux';\r\nimport { FieldRow, FieldSection, FieldSlot } from \"../../components/Forms/FieldSection\";\r\nimport Checkbox from \"../../components/Checkbox\";\r\nimport { AnswerTypeHighschoolProps, FIELDS, getField } from \"../../store/form/fields\";\r\nimport { compositeFieldname } from \"../../utils\";\r\nimport DropdownAnswer from '../../components/answer/DropdownAnswer';\r\nimport DateAnswer from '../../components/answer/DateAnswer';\r\nimport HighSchoolAnswer from '../../components/answer/HighSchoolAnswer';\r\nimport CertifyAnswer from '../../components/answer/CertifyAnswer';\r\nimport DecimalAnswer from '../../components/answer/DecimalAnswer';\r\nimport IntegerAnswer from '../../components/answer/IntegerAnswer';\r\nimport TextAnswer from '../../components/answer/TextAnswer';\r\nimport BooleanAnswer from '../../components/answer/BooleanAnswer';\r\n\r\n/**\r\n * high school section of the scholarshpis additional-info page\r\n * \r\n * @param {*} param0 \r\n * @returns {Component}\r\n */\r\nfunction EditHighSchoolInfo({ section, embedded = false, onChange, onCancel }) {\r\n\r\n  // const authState = useSelector((state) => state.auth);\r\n  const reduxFormState = useSelector((state) => state.form);\r\n  const isFetchingData = reduxFormState.isLoading;\r\n  // const [highschool, setHighschool] = useState('');\r\n  const methods = useForm({\r\n    mode: 'onBlur'\r\n  });\r\n\r\n  const { errors, formState, getValues, setValue, handleSubmit, watch } = methods;\r\n\r\n  const [loading, setLoading] = useState(false)\r\n  const dispatch = useDispatch();\r\n  const watchNoLetterGrades = watch(\"NoLetterGrades\")\r\n\r\n  const onSubmit = async (data, e) => {\r\n    // console.log(\"Submit data\", data)\r\n\r\n    try {\r\n      setLoading(true)\r\n      if (watchNoLetterGrades === true) {\r\n        data[FIELDS.HIGHSCHOOL_GPA] = \"0.01\"\r\n      }\r\n\r\n      const excludedFields = [\"NoLetterGrades\"]\r\n      const isUnlistedHs = data[\"UnlistedHS\"]; //TODO: what type is this?\r\n      if (isUnlistedHs) {\r\n        excludedFields.push(compositeFieldname(FIELDS.HIGHSCHOOL, AnswerTypeHighschoolProps.SCHOOL_CODE))\r\n      }\r\n\r\n      const result = await actions.submitForm(data, [], excludedFields);\r\n      if (typeof onChange === 'function') {\r\n        onChange(true);\r\n      }\r\n    } catch (e) {\r\n      dispatch(open({\r\n        message: e.message,\r\n        severity: \"success\",\r\n      }))\r\n    } finally {\r\n      setLoading(false)\r\n    }\r\n  };\r\n\r\n  const onError = (errors, e) => {\r\n    // console.log('ERROR',errors, e);\r\n  };\r\n\r\n  useEffect(() => {\r\n    window.addEventListener('beforeunload', alertUser)\r\n    return () => {\r\n      window.removeEventListener('beforeunload', alertUser)\r\n    }\r\n  }, [])\r\n\r\n  const alertUser = e => {\r\n    e.preventDefault()\r\n    e.returnValue = ''\r\n  }\r\n\r\n  const watchHighSchoolType = watch(FIELDS.HIGHSCHOOL_TYPE)\r\n  const [hsType, setHsType] = useState(null)\r\n  useEffect(() => {\r\n    const type = getValues(FIELDS.HIGHSCHOOL_TYPE)\r\n    // console.log(\"HS TYPE\", type)\r\n    setHsType(type)\r\n  }, [watchHighSchoolType])\r\n\r\n\r\n\r\n  const [gedSectionRequired, setGedSectionRequired] = useState(false)\r\n  useEffect(() => {\r\n    if (hsType === 'GED' || hsType === 'GEDHM') {\r\n      setGedSectionRequired(true)\r\n    } else {\r\n      setGedSectionRequired(false)\r\n    }\r\n  }, [hsType])\r\n\r\n  const [gedScoreRequired, setGedScoreRequired] = useState(true)\r\n  const watchGedScoreFlag = watch(FIELDS.GED_IN_PROGRESS_FLAG)\r\n  useEffect(() => {\r\n    // console.log(\"GED<sup style={{ verticalAlign: \"super\", fontSize: \".9rem\"}}>&reg;</sup> SCORE FLAG CHANGED\", watchGedScoreFlag)\r\n    if (watchGedScoreFlag === true || watchGedScoreFlag === 'True') {\r\n      setGedScoreRequired(false)\r\n      setValue(FIELDS.GED_SCORE, \"\")\r\n    } else {\r\n      setGedScoreRequired(true)\r\n    }\r\n  }, [watchGedScoreFlag])\r\n\r\n\r\n\r\n  const validateHsGradDate = (date) => {\r\n    if (!date || date === 'Invalid date') {\r\n      return 'Field Required'\r\n    } else {\r\n      return true\r\n    }\r\n  }\r\n\r\n  const seniorYear = section.year;\r\n\r\n  return (\r\n    <FormProvider {...methods} >\r\n      <form onSubmit={handleSubmit(onSubmit, onError)} >\r\n        <FormSection title='Edit High School Info' isEditable={true} onSaveClick={handleSubmit(onSubmit, onError)} onCancelClick={onCancel} loading={loading}>\r\n          <FieldRow>\r\n            <strong>Please be advised:</strong> \r\n            Some of the information in this section can only be edited in the  <a href=\"/profile\">Profile</a>  section.\r\n          </FieldRow>\r\n          <FieldSection title=\"High School, Home School or GED\">\r\n            <FieldRow>\r\n              <FieldSection title=\"School or Equivalent\" withDivider={false}>\r\n                <FieldRow>\r\n                  <FieldSlot>\r\n                    <DropdownAnswer answer={section.getAnswerByField(FIELDS.HIGHSCHOOL_TYPE)}\r\n                      disabled={true}\r\n                      isRequired={true}\r\n                      onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                      label=\"Type of High School or Equivalent\"\r\n                    />\r\n                  </FieldSlot>\r\n\r\n                  <HighSchoolAnswer disabled={true} answer={section.getAnswerByField(FIELDS.HIGHSCHOOL)} hstype={watchHighSchoolType} />\r\n\r\n                  <FieldSlot>\r\n                    <DateAnswer\r\n                      disabled={true}\r\n                      answer={section.getAnswerByField(FIELDS.HIGHSCHOOL_GRAD_DATE)}\r\n                      onKeyPress={(e) => { e.key === 'Enter' && e.preventDefault(); }}\r\n                      isRequired={true}\r\n                      label=\"Date of High School Completion\"\r\n                      resolution=\"MONTH\"                     \r\n                    />\r\n                  </FieldSlot>\r\n                </FieldRow>\r\n\r\n              </FieldSection>\r\n            </FieldRow>\r\n          </FieldSection>\r\n\r\n          {gedSectionRequired === true &&\r\n            <FieldSection title=\"GED&reg; Score\">\r\n              <FieldRow>\r\n                <FieldSlot>\r\n                  <DecimalAnswer disabled={true} answer={section.getAnswerByField(FIELDS.GED_SCORE)} inputLabel='GED&reg; Score'\r\n                    isRequired={gedScoreRequired} placeholder=\"GED&reg; Score\" />\r\n                </FieldSlot>\r\n              </FieldRow>\r\n              <FieldRow>\r\n                <FieldSlot>\r\n                  <CertifyAnswer disabled={true} answer={section.getAnswerByField(FIELDS.GED_IN_PROGRESS_FLAG)} label=\"I will not have my GED&reg; requirements completed by the time I submit this application.\" />\r\n                </FieldSlot>\r\n              </FieldRow>\r\n            </FieldSection>\r\n          }\r\n\r\n          {watchHighSchoolType !== 'GED' && watchHighSchoolType !== 'UNSTD' &&\r\n            <FieldSection title=\"HIGH SCHOOL 5TH YEAR\">\r\n              <CertifyAnswer answer={section.getAnswerByField(FIELDS.FIFTH_YEAR_SENIOR)} label={<>I will be a high school 5th year senior attending college in Fall term {seniorYear}.</>} />\r\n            </FieldSection>\r\n          }\r\n\r\n          {gedSectionRequired === false ?\r\n            <FieldSection title={getField(FIELDS.HIGHSCHOOL_GPA).question}>\r\n              <FieldRow>\r\n                <FieldSlot>\r\n                  <DecimalAnswer disabled={true} isRequired={!watchNoLetterGrades}\r\n                    answer={section.getAnswerByField(FIELDS.HIGHSCHOOL_GPA)} inputLabel='High School GPA' placeholder='High School GPA' precision={0.01} allowNegative={false} />\r\n                </FieldSlot>\r\n                <FieldSlot container alignItems=\"flex-end\">\r\n                  <div>\r\n                    <Checkbox disabled={true} name='NoLetterGrades' label=\"My high school did not assign letter grades.\" />\r\n                  </div>\r\n                </FieldSlot>\r\n              </FieldRow>\r\n            </FieldSection>\r\n            : \"\"\r\n          }\r\n\r\n          <FieldSection title=\"SAT Highest Overall Score\">\r\n            <FieldRow>\r\n              <FieldSlot>\r\n                <IntegerAnswer\r\n                  answer={section.getAnswerByField(FIELDS.SAT)}\r\n                  inputLabel=\"SAT Score\"\r\n                  precision={0.01}\r\n                  max={4}\r\n                />\r\n              </FieldSlot>\r\n            </FieldRow>\r\n          </FieldSection>\r\n\r\n          <FieldSection title=\"ACT Highest Overall Score\">\r\n            <FieldRow>\r\n              <FieldSlot>\r\n                <IntegerAnswer\r\n                  answer={section.getAnswerByField(FIELDS.ACT)}\r\n                  inputLabel=\"ACT Score\"\r\n                  max={2}\r\n                />\r\n              </FieldSlot>\r\n            </FieldRow>\r\n          </FieldSection>\r\n\r\n          <FieldSection title=\"Did you work with the ASPIRE program in high school?\">\r\n            <FieldRow>\r\n              <FieldSlot>\r\n                <BooleanAnswer answer={section.getAnswerByField(FIELDS.ASPIRE__MEMBER)} />\r\n              </FieldSlot>\r\n            </FieldRow>\r\n          </FieldSection>\r\n\r\n          <FieldSection withDivider={true}>\r\n            <FieldRow>\r\n              <FieldSlot xs={12}>\r\n                <TextAnswer answer={section.getAnswerByField(FIELDS.ASPIRE__ADVISOR)} inputLabel='ASPIRE Mentor’s Name' placeholder='ASPIRE Mentor’s Name' />\r\n              </FieldSlot>\r\n              <FieldSlot xs={12}>\r\n                <TextAnswer answer={section.getAnswerByField(FIELDS.ASPIRE__SITE)} inputLabel='ASPIRE Site Name' placeholder='ASPIRE Site Name' />\r\n              </FieldSlot>\r\n            </FieldRow>\r\n          </FieldSection>\r\n\r\n        </FormSection>\r\n      </form>\r\n    </FormProvider>\r\n  );\r\n}\r\n\r\nexport default EditHighSchoolInfo;\r\n","/* eslint-disable import/no-anonymous-default-export */\r\nimport React, { useEffect } from 'react';\r\nimport { useState } from 'react';\r\nimport apiClient from '../../utils/API';\r\nimport Dropdown from '../Dropdown';\r\n\r\nexport const STATE_RETURN_TYPE = {\r\n    ABBREVIATION: 'Abbreviation',\r\n    ID: 'Id'\r\n}\r\n\r\nexport default ({ listItems, codeType, returnType = STATE_RETURN_TYPE.ABBREVIATION, shouldExclude = () =>false, ...props}) => {\r\n\r\n    const [items,setItems] = useState([]);\r\n    \r\n    useEffect(()=>{\r\n        (async ()=>{\r\n            const states = await apiClient.get(`/state-and-territory/states-and-territories`);\r\n            setItems(states.reduce((_states,state)=>{\r\n                if(!shouldExclude(state)){\r\n                    _states.push({\r\n                        ...state,\r\n                        label: state.Name,\r\n                        value: state[returnType]\r\n                    });\r\n                }\r\n                return _states;\r\n            },[]))\r\n        })();\r\n    },[]);\r\n\r\n    return <Dropdown placeholder=\"State\" {...props} listItems={items}/>\r\n        \r\n}","import Input from './../../components/Input';\r\nimport Checkbox from './../../components/Checkbox';\r\nimport { useFormContext } from \"react-hook-form\";\r\nimport { useEffect, useState } from 'react';\r\nimport { FieldSection, FieldRow, FieldSlot } from '../../components/Forms/FieldSection';\r\nimport { FIELDS, AnswerTypeCollegeProps, UNLISTED_COLLEGECODE } from '../../store/form/fields';\r\nimport { compositeFieldname } from \"../../utils\";\r\nimport HiddenInput from '../../components/Utility/HiddenInput';\r\nimport StatePicker from './../../components/DataDriven/StatePicker';\r\nimport _get from 'lodash.get';\r\nimport apiClient from '../../utils/API';\r\nimport DropdownSearch from '../DropdownSearch';\r\nimport { Alert } from '@material-ui/core';\r\n\r\n/**\r\n * actually stored as a flag to help track colleges for which student can't find a code\r\n */\r\nconst NO_UNLISTED_COLLEGE_CODE = \"N/A\";\r\n\r\n\r\n/**\r\n * Standard college of choice section\r\n * \r\n * @param {*} param0 \r\n * @returns \r\n */\r\nfunction CollegeChoiceAnswer({ answer }) {\r\n\r\n    const year = answer.Year;\r\n    // const authState = useSelector((state) => state.auth);\r\n    // const reduxFormState = useSelector((state) => state.form);\r\n    const methods = useFormContext({\r\n        mode: 'onBlur'\r\n    });\r\n    const { setValue, watch } = methods;\r\n\r\n    var [colleges, setColleges] = useState([]);\r\n    useEffect(() => {\r\n        if (!answer.Year)\r\n            return;\r\n\r\n        (async () => {\r\n            const options = await apiClient.getOptionsAsListItems(answer.QuestionKey, answer.Year);\r\n            setColleges(options);\r\n        })();\r\n    }, [answer.Year]);\r\n\r\n    const unlistedCollegeCodeFieldName = compositeFieldname(FIELDS.COLLEGE_CHOICE, AnswerTypeCollegeProps.UNLISTED_CODE);\r\n    const noCollegeCodeFlag = watch('noCollegeCode');\r\n  \r\n    const collegeCode = watch(compositeFieldname(FIELDS.COLLEGE_CHOICE, AnswerTypeCollegeProps.CODE));       \r\n    const isUnlistedCollegeSelected = collegeCode?.value === UNLISTED_COLLEGECODE;\r\n    \r\n    useEffect(() => {\r\n        if (answer.IsLoading)\r\n            return;\r\n\r\n        if (noCollegeCodeFlag) {\r\n            setValue(unlistedCollegeCodeFieldName, NO_UNLISTED_COLLEGE_CODE)\r\n        }     \r\n    }, [noCollegeCodeFlag])\r\n\r\n    const isLoadingAnswer = answer === null || answer.IsLoading;\r\n    const yearDescriptor = isLoadingAnswer ? 'upcoming' : `${year}-${(year + 1).toString().substr(-2)}`;\r\n    const title = `Which college do you plan to attend for the ${yearDescriptor} school year?`;\r\n\r\n    if (answer === null || answer.IsLoading) {\r\n        return (\r\n            <FieldSection title={title}>\r\n\r\n            </FieldSection>\r\n        );\r\n    }\r\n\r\n    const defaultNoCollegeCodeFlag = answer.UnlistedCode === NO_UNLISTED_COLLEGE_CODE; //Unlisted College Choice can exist with & without college code.\r\n\r\n\r\n    return (\r\n\r\n        <FieldSection title={title}>\r\n            <FieldRow>\r\n                <FieldSlot>\r\n                    <HiddenInput name={compositeFieldname(FIELDS.COLLEGE_CHOICE, AnswerTypeCollegeProps.TYPE)} defaultValue=\"College\" />   \r\n                           \r\n                    <DropdownSearch isRequired={true} \r\n                        placeholder=\"College\" \r\n                        name={compositeFieldname(FIELDS.COLLEGE_CHOICE, AnswerTypeCollegeProps.CODE)}                     \r\n                        listItems={colleges}\r\n                        includeUnlisted={true} \r\n                        inputLabel='College or University Name' \r\n                        variant='outlined' />\r\n                </FieldSlot>\r\n            </FieldRow>\r\n            {isUnlistedCollegeSelected && (\r\n                <>\r\n                    <FieldRow>\r\n                        <FieldSlot>\r\n                            <Input isRequired={!noCollegeCodeFlag} name={unlistedCollegeCodeFieldName} disabled={noCollegeCodeFlag} inputLabel='College Code' />\r\n                        </FieldSlot>\r\n                        <FieldSlot>\r\n                            <div>\r\n                                <Checkbox name='noCollegeCode' label=\"College is not a Title IV college and has no college code\" defaultValue={defaultNoCollegeCodeFlag} />\r\n                            </div>                            \r\n                        </FieldSlot>                     \r\n                        <Alert severity=\"warning\" className=\"alert alert--error\">\r\n                            <p>You will only be considered for OSAC Scholarships if you select a Title IV school. You may update your school selection prior to the application deadline.</p>                           \r\n                        </Alert>                        \r\n                    </FieldRow>\r\n                    <FieldRow>\r\n                        <FieldSlot>\r\n                            <Input isRequired={true} name={compositeFieldname(FIELDS.COLLEGE_CHOICE, AnswerTypeCollegeProps.UNLISTED_NAME)} inputLabel='College Name' />\r\n                        </FieldSlot>\r\n                    </FieldRow>\r\n                    <FieldRow>\r\n                        <FieldSlot>\r\n                            <StatePicker isRequired={true} name={compositeFieldname(FIELDS.COLLEGE_CHOICE, AnswerTypeCollegeProps.UNLISTED_STATE_NAME)} placeholder=\"State\" label=\"State\" variant=\"outlined\" />\r\n                        </FieldSlot>\r\n                        <FieldSlot>\r\n                            <Input isRequired={true} name={compositeFieldname(FIELDS.COLLEGE_CHOICE, AnswerTypeCollegeProps.UNLISTED_CITY_NAME)} inputLabel='City' placeholder='City' variant='outlined' />\r\n                        </FieldSlot>\r\n                    </FieldRow>\r\n                    <FieldRow className=\"rhythm\">\r\n                        <FieldSlot className=\"rhythm rhythm--deep\">\r\n                            <div className=\"rhythm\">\r\n                                <p>If unlisted college above, check the <a href=\"https://studentaid.gov/fafsa-apply/colleges\" target=\"_blank\">Federal Database</a> to get the college code, college name, and college city.  Select the state of your college choice from the first drop-down list above.</p>\r\n                                <p>If you can't find the college in the Federal database, contact your college's financial aid staff to ensure that the college is eligible to receive Title IV funds.</p>\r\n                            </div>\r\n                        </FieldSlot>\r\n                    </FieldRow>\r\n                </>\r\n            )}\r\n\r\n       \r\n        </FieldSection>\r\n\r\n\r\n    );\r\n}\r\n\r\nexport default CollegeChoiceAnswer;\r\n","import {FieldRow, FieldSection, FieldSlot} from \"../../Forms/FieldSection\";\r\nimport _get from \"lodash.get\";\r\nimport DropdownAnswer from \"../DropdownAnswer\";\r\n\r\n/**\r\n * render standing class stading / year in college question\r\n * \r\n * @param {*} param0.answer dto as provided by the API\r\n * @returns {Component}\r\n */\r\nfunction ClassStanding({answer}){\r\n        \r\n    return (\r\n        <FieldSection title={`College Standing as of Fall Term ${answer.Year}`} withDivider={true}>\r\n            <FieldRow>\r\n                <FieldSlot>\r\n                    <DropdownAnswer isRequired={true} answer={answer} label=\"College Standing\" placholder=\"College Standing\" />\r\n                </FieldSlot>\r\n            </FieldRow>\r\n        </FieldSection>\r\n    );\r\n}\r\n\r\nexport default ClassStanding;","import { useSelector } from 'react-redux';\r\nimport Checkbox from './../../components/Checkbox';\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport { useState, useEffect } from 'react';\r\nimport { FieldSection, FieldRow, FieldSlot } from '../../components/Forms/FieldSection';\r\nimport { FIELDS } from '../../store/form/fields';\r\nimport FormSection from '../../components/FormSection';\r\nimport _get from 'lodash.get';\r\nimport { useDispatch } from 'react-redux';\r\nimport CollegeChoiceAnswer from '../../components/answer/CollegeChoiceAnswer';\r\nimport ClassStanding from \"../../components/answer/question/ClassStanding\";\r\n\r\n/**\r\n * Standard college of choice section\r\n * \r\n * @param {*} param0 \r\n * @returns \r\n */\r\nfunction EditCollegeOfChoice({ year = 0, hideDualEnrolled = true, onChange, onCancel, status, section }) {\r\n\r\n    // const authState = useSelector((state) => state.auth);\r\n    const reduxFormState = useSelector((state) => state.form);\r\n    \r\n    const methods = useForm({\r\n        mode: 'onBlur'\r\n    });\r\n    const { setValue, handleSubmit, watch } = methods;\r\n\r\n    const [loading, setLoading] = useState(false)\r\n    const dispatch = useDispatch();\r\n\r\n    const onSubmit = async (data, e) => {\r\n        data[FIELDS.COLLEGE_DUAL_ENROLLED] = (data[FIELDS.COLLEGE_DUAL_ENROLLED] == 'True' || data[FIELDS.COLLEGE_DUAL_ENROLLED] == true) ? true : false\r\n    \r\n        await section.saveAnswers(data, dispatch);       \r\n        if (typeof onChange === 'function') {\r\n            onChange(true);\r\n        }        \r\n    \r\n    };\r\n\r\n    const onError = () => {\r\n        // console.log('ERROR',errors, e);\r\n    }\r\n\r\n    useEffect(() => {\r\n        window.addEventListener('beforeunload', alertUser)\r\n        return () => {\r\n            window.removeEventListener('beforeunload', alertUser)\r\n        }\r\n    }, [])\r\n    const alertUser = e => {\r\n        e.preventDefault()\r\n        e.returnValue = ''\r\n    }\r\n\r\n  \r\n    return (\r\n        <FormProvider {...methods} >\r\n            <form onSubmit={handleSubmit(onSubmit, onError)} >\r\n                {/* NOTE: extra save button is located within FormSection component */}\r\n                <FormSection title='College Choice' isEditable={true} onSaveClick={handleSubmit(onSubmit, onError)} onCancelClick={onCancel} loading={loading} status={status}>\r\n                    \r\n                    <CollegeChoiceAnswer answer={section.getAnswerByField(FIELDS.COLLEGE_CHOICE)} />                                                                \r\n         \r\n                    \r\n                    {!hideDualEnrolled &&\r\n                        <FieldSection>\r\n                            <FieldRow>\r\n                                <FieldSlot>\r\n                                    <Checkbox name={FIELDS.COLLEGE_DUAL_ENROLLED} label=\"I will be dual enrolled with another school while attending this school.\" />\r\n                                </FieldSlot>\r\n                            </FieldRow>\r\n                        </FieldSection>\r\n                    }\r\n                \r\n                    <ClassStanding answer={section.getAnswerByField(FIELDS.COLLEGE_STANDING)} />                   \r\n                </FormSection>\r\n            </form>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\nexport default EditCollegeOfChoice;\r\n","import Button from \"../../components/Button\";\r\nimport ApplicationInfo from \"../../utils/dtos/ApplicationInfo\";\r\nimport SectionFormHelper from \"../../utils/helper/SectionHelper\";\r\n\r\n/**\r\n * component to do common work of displaying or replacing application submit button\r\n * @param {Object} param0 \r\n * @param {ApplicationInfo} param0.app \r\n * @param {SectionFormHelper} param0.sections \r\n * @param {function} param0.onClick \r\n * @param {boolean} param0.loading \r\n * @param {*} param0.style \r\n */\r\nfunction ApplicationSubmitButton({app, sections, onClick, loading, style}){\r\n\r\n\r\n    const disableSubmit = app.isSubmitted || sections?.isComplete === false || app.isDeadlinePassed;\r\n    \r\n    if (app.isLoading)\r\n        return (<></>);\r\n\r\n    if (app.isSubmitted)\r\n        return (<></>);\r\n    \r\n    if (app.isDeadlinePassed)\r\n        return (<span style={{paddingLeft : '2em'}} >Deadline has passed</span>);\r\n    \r\n    return (\r\n        <Button loading={loading} name=\"Submit\" label=\"Submit\" variant=\"outline\" disabled={disableSubmit} onClick={onClick} style={style}/>\r\n    );\r\n              \r\n}\r\n\r\nexport default ApplicationSubmitButton;","import { useEffect, useState } from \"react\";\r\nimport { FIELDS, TRANSCRIPT_QUESTIONS } from \"../../store/form/fields\";\r\nimport moment from \"moment\";\r\nimport apiClient from \"../../utils/API\";\r\n\r\n/**\r\n * instrutions for all transcripts we are requesting from student\r\n * \r\n * @param {*} param0 \r\n * @returns \r\n */\r\nfunction TranscriptInstructions({section, requirements}){\r\n\r\n    \r\n    /**\r\n     * determine best instruction type key for given answer \r\n     * (will be consolidated later)\r\n     * @param {*} answer DTO\r\n     * @returns {Array<string>}\r\n     */\r\n    function getInstructionType(answer){\r\n        const question = answer.QuestionKey;\r\n        const requirement = requirements.get(answer.QuestionKey);\r\n        if (requirement.isSkipped)\r\n            return null;\r\n\r\n        if (question.toUpperCase() === TRANSCRIPT_QUESTIONS.FALL_COLLEGE_RECENT.name.toUpperCase()){\r\n            const college = section.getAnswerById(answer.SchoolAnswerId);\r\n            if (!college?.StopYear)\r\n                return 'StartingCollege';\r\n\r\n            return 'RecentCollege';\r\n        }\r\n          \r\n        if (question.toUpperCase() === TRANSCRIPT_QUESTIONS.FALL_COLLEGE_PRIOR.name.toUpperCase()) {\r\n            return 'PriorCollege';\r\n        }\r\n            \r\n        if (question.toUpperCase() === TRANSCRIPT_QUESTIONS.FALL_HS.name.toUpperCase()){\r\n            const highschool = section.getAnswerByField(FIELDS.HIGHSCHOOL);\r\n            const hsType = highschool?.Type;\r\n            if (hsType === 'Ged' || hsType == 'GedHomeSchool'){\r\n                return 'GED';\r\n            }       \r\n            if (hsType === 'HomeSchool') {\r\n                const manualState = highschool.StateId;\r\n                if (manualState !== 38)\r\n                    return 'OutofStateHomeSchool';\r\n\r\n                return 'OregonHomeSchool';\r\n            }\r\n                                        \r\n            const gradDateResponse = section.getAnswerByField(FIELDS.HIGHSCHOOL_GRAD_DATE)?.Response;            \r\n            if (gradDateResponse && moment(gradDateResponse).isAfter(`${section.year-1}-09-01`)) {                                                                                   \r\n                    return 'CurrentHighSchool';\r\n            }\r\n            if (requirement.isOptional)\r\n                return null; //NOTE: staff insist no instructions are needed here. Still waiting to see if the other shoe drops\r\n           \r\n            return 'PriorHighSchool';\r\n               \r\n        }\r\n        if (question.toUpperCase() === TRANSCRIPT_QUESTIONS.FALL_COLLEGE_DURING_HS.name.toUpperCase()){\r\n            return null;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * \r\n     * @returns {Array<string>} unique list of instruction types\r\n     */\r\n    function getAllInstructionTypes(){\r\n        if (section.isAnswerLoading)\r\n            return [];\r\n\r\n        const transcripts = section.getAllAnswers().answers;     \r\n        if (transcripts.length === 0){\r\n            return ['NoTranscripts'];          \r\n        }\r\n        const types = transcripts.map(answer => getInstructionType(answer)).filter(t => t !== null);\r\n        const uniqueTypes = [...new Set(types)];\r\n        return uniqueTypes;\r\n    }\r\n\r\n    const transcriptInstructionTypes = getAllInstructionTypes();    \r\n    const [transcriptInstructions, setTranscriptInstructions] = useState([]);\r\n    \r\n  \r\n    useEffect(() => {\r\n        \r\n        (async() =>{\r\n            try {         \r\n                const instructions = await Promise.all(transcriptInstructionTypes.map(t => apiClient.getTextCode('SchTransInstruction', t)));\r\n        \r\n                setTranscriptInstructions(instructions);\r\n            }\r\n            catch(e){\r\n                console.log(e);\r\n            }\r\n        })();   \r\n\r\n    }, [JSON.stringify(transcriptInstructionTypes)]); //look for change in contents of array\r\n\r\n  \r\n      \r\n\r\n    return (\r\n        <div>\r\n            <h2 className=\"heading heading--h2\">Transcript Instructions</h2>\r\n            <ul className=\"list\">\r\n                {transcriptInstructions.map((instruction, index) => (\r\n                    <li key={index}>\r\n                        <div dangerouslySetInnerHTML={{__html: instruction.Message}}></div>                      \r\n                    </li>\r\n                ))}\r\n            </ul>\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default TranscriptInstructions;","import { useEffect } from \"react\";\r\nimport AnswerSet from \"../../utils/dtos/AnswerSet\";\r\nimport { useState } from \"react\";\r\nimport { getOption } from  \"../../components/Utility/ConvertCode\";\r\n\r\n/**\r\n * \r\n * @param {*} param0 example answer\r\n * @returns \r\n */\r\nfunction SchoolRow({answer}){\r\n   \r\n    return (\r\n        <tr>\r\n            <td>{answer.Description}</td>\r\n            <td>{answer.ReviewStatusDescription}</td>\r\n            <td>{answer.ReviewInstructions}</td>\r\n        </tr>\r\n    )\r\n}\r\n\r\nfunction getSampleAnswerPerSchool(answers){\r\n\r\n    var result = [];\r\n    for (var answer of answers){\r\n        if (!result.some(x => x.SchoolAnswerId === answer.SchoolAnswerId))\r\n            result.push(answer);\r\n    }\r\n    return result;\r\n}\r\n\r\n/**\r\n * \r\n * @param {AnswerSet} param0 \r\n */\r\nfunction TranscriptSummary({section}){\r\n\r\n    if (section.isAnswerLoading)\r\n        return <>(loading...)</>;\r\n    \r\n    \r\n    const answers = section.getAllAnswers().answers;\r\n    const examples = getSampleAnswerPerSchool(answers);\r\n\r\n    return (\r\n        <table>\r\n            <tr>\r\n                <th>College or University</th>\t\r\n                <th>Review Status</th>\r\n                <th>Review Instructions</th>\r\n            </tr>\r\n            {examples.map(t => <SchoolRow answer={t} />)}\r\n        </table>\r\n    )\r\n}\r\n\r\nexport default TranscriptSummary;","import { useDispatch, useSelector } from \"react-redux\";\r\nimport React, { useState, Fragment } from \"react\";\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport { useLocation } from 'react-router-dom';\r\nimport PortalView from \"../../components/Global/PortalView\";\r\nimport EditCitizenShip from \"./EditCitizenShip\";\r\nimport ReadOnly from \"./../../components/ReadOnly\";\r\nimport EditFamilyInfo from \"./EditFamilyInfo\";\r\nimport EditCollegeHistory from \"./EditCollegeHistory\";\r\nimport EditCollegePlan from \"./EditCollegePlan\";\r\nimport EditActivities from \"./EditActivities\";\r\nimport EditTranscripts from \"./EditTranscript\";\r\nimport PrintIcon from \"../../components/PrintIcon\";\r\nimport { useHistory, useParams } from \"react-router\";\r\nimport { FieldRow, FieldSection, FieldSlot } from \"../../components/Forms/FieldSection\";\r\nimport ReadOnlyActivityPicker from \"../../components/ActivityPicker/ReadOnly\";\r\nimport CollegeDisplay from \"../../components/CollegeDisplay\";\r\nimport { AnswerTypeTranscriptProps, FIELDS, TranscriptDeliveryTypes, TRANSCRIPT_QUESTIONS, AnswerTypeHighschoolProps, getField, ActivityTypeCodes, UNLISTED_COLLEGECODE } from \"../../store/form/fields\";\r\nimport { actions } from \"../../store\";\r\nimport { useEffect } from \"react\";\r\nimport ConvertCode, { DegreePlans } from \"../../components/Utility/ConvertCode\";\r\nimport FormSection from \"../../components/FormSection\";\r\nimport ProgressBar from \"../../components/progress/ProgressBar\";\r\nimport EditPersonalStatements from \"./EditPersonalStatements\";\r\nimport ReadOnlyField from \"../../components/ReadOnlyField\";\r\nimport apiClient from \"../../utils/API\";\r\nimport RequirementSet from \"../../utils/dtos/RequirementSet\";\r\nimport EditWorkingStudentData from \"./EditWorkingStudentData\";\r\nimport EditHighschoolInfo from \"./EditHighschoolInfo\";\r\nimport EditCollegeOfChoice from \"../field-groups/EditCollegeOfChoice\";\r\nimport _get from \"lodash.get\";\r\nimport Button from \"../../components/Button\";\r\nimport { open } from \"../../store/snack/actions\";\r\nimport {\r\n    compositeFieldname,\r\n    combineProgramStatus,\r\n} from \"../../utils\";\r\nimport ScholarshipTabs from \"../../components/Scholarships/ScholarshipTabs\";\r\nimport CompleteSubmission from \"../../components/CompleteSubmission\";\r\nimport { CheckCircle } from \"@material-ui/icons\";\r\nimport ApplicationSubmitButton from \"../../components/Utility/ApplicationSubmitButton\";\r\nimport ApplicationInfo from \"../../utils/dtos/ApplicationInfo\";\r\nimport ProgramInfo from \"../../utils/dtos/ProgramInfo\";\r\nimport SectionFormHelper from \"../../utils/helper/SectionHelper\";\r\nimport { useRef } from \"react\";\r\nimport SectionStateIcon from \"../../components/progress/SectionStateIcon\";\r\nimport { Alert } from \"@material-ui/core\";\r\nimport TranscriptInstructions from \"./TranscriptInstructions\";\r\nimport TranscriptSummary from \"./TranscriptSummary\";\r\n\r\n\r\nconst PROGRAM_CODE = \"SCH\";\r\n\r\n/**\r\n * render the additional scholarship info page\r\n * @returns {Component} full page\r\n */\r\nfunction AdditionalScholarshipInfo() {\r\n    const { year } = useParams();\r\n    const activeYear = parseInt(year);\r\n\r\n    const methods = useForm({\r\n        mode: \"onBlur\",\r\n    });\r\n    const { setValue, handleSubmit, watch } = methods;\r\n\r\n    const location = useLocation();\r\n    const anchor = location.hash;\r\n    useEffect(() => {\r\n        if (anchor) {\r\n            const element = document.querySelector(anchor);\r\n            if (element) {\r\n                element.scrollIntoView({ behavior: 'smooth' });\r\n            }\r\n        }\r\n    }, [anchor]);\r\n\r\n    const [activityBlurb, setActivityBlurb] = useState({});\r\n    useEffect(() => {\r\n        (async () => {\r\n            const codes = await apiClient.get('/code/codes?codeType=ActCatInstructions');\r\n            const blurbs = {\r\n                work: codes.find(x => x.Code === ActivityTypeCodes.WORK)?.Message,\r\n                school: codes.find(x => x.Code === ActivityTypeCodes.SCHOOL)?.Message,\r\n                volunteer: codes.find(x => x.Code === ActivityTypeCodes.VOLUNTEER)?.Message,\r\n            };\r\n            setActivityBlurb(blurbs);\r\n        })();\r\n\r\n    }, []);\r\n\r\n    const sectionGroup = new SectionFormHelper(useState(null), PROGRAM_CODE);\r\n\r\n    const profileInfo = sectionGroup.create(useState(null), null, [\r\n        FIELDS.FIRST_NAME,\r\n        FIELDS.LAST_NAME\r\n    ]);\r\n\r\n    const parentSection = sectionGroup.create(useState(null), null, [\r\n        FIELDS.ED_LEVEL_FATHER,\r\n        FIELDS.ED_LEVEL_MOTHER,\r\n        FIELDS.FIRST_GEN_IMMIGRANT\r\n    ]);\r\n    const citizenSection = sectionGroup.create(useState(null), null, [\r\n        FIELDS.CITIZENSHIP_STATUS,\r\n    ]);\r\n    const workingSection = sectionGroup.create(useState(null), null, [\r\n        FIELDS.WORKING__CURRENT,\r\n        FIELDS.WORKING__NEXT_YEAR,\r\n    ]);\r\n    const highschoolSection = sectionGroup.create(useState(null), null, [\r\n        FIELDS.HIGHSCHOOL_GRAD_DATE,\r\n        FIELDS.HIGHSCHOOL,\r\n        FIELDS.HIGHSCHOOL_TYPE,\r\n        FIELDS.ASPIRE__MEMBER,\r\n        FIELDS.ASPIRE__ADVISOR,\r\n        FIELDS.ASPIRE__SITE,\r\n        FIELDS.CORRECTIONAL_FACILITY_HS,\r\n        FIELDS.HIGHSCHOOL_GPA,\r\n        FIELDS.ACT,\r\n        FIELDS.SAT,\r\n        FIELDS.FIFTH_YEAR_SENIOR,\r\n        FIELDS.GED_SCORE,\r\n        FIELDS.GED_IN_PROGRESS_FLAG,\r\n    ]);\r\n    const collegeChoiceSection = sectionGroup.create(useState(null), null, [\r\n        FIELDS.COLLEGE_CHOICE,\r\n        FIELDS.COLLEGE_STANDING,\r\n    ]);\r\n    const degreeSection = sectionGroup.create(useState(null), null, [\r\n        FIELDS.DEGREES,\r\n        FIELDS.CAREER_GOAL,\r\n    ]);\r\n    const collegeHistorySection = sectionGroup.create(useState(null), null, [\r\n        FIELDS.PAST_COLLEGE,\r\n        FIELDS.CURRENT_COLLEGE,\r\n        FIELDS.COLLEGE_HISTORY_COMPLETE,\r\n        FIELDS.FINISHED_COMM_COLLEGE,\r\n        FIELDS.FINISHED_BACHELORS_DEGREE,\r\n        FIELDS.UNDERGRAD_GPA,\r\n        FIELDS.GRADUATE_GPA\r\n    ]);\r\n\r\n    const stageOne = sectionGroup.create(useState(null), null, sectionGroup.fieldKeys);\r\n    stageOne.isTrackingOnly = true;\r\n\r\n    //transcripts section\r\n    const stageThree = sectionGroup.create(useState(null), useRef(), [\r\n        FIELDS.FALL_HS_TRANSCRIPTS_DIGITAL,\r\n        FIELDS.FALL_COLLEGE_TRANSCRIPTS_DURING_HS_DIGITAL,\r\n        FIELDS.FALL_COLLEGE_TRANSCRIPTS_RECENT_DIGITAL,\r\n        FIELDS.FALL_COLLEGE_TRANSCRIPTS_PRIOR_DIGITAL,\r\n\r\n        //backwards compatibility for display table:\r\n        FIELDS.FALL_COLLEGE_TRANSCRIPTS_MAIL,\r\n        FIELDS.FALL_COLLEGE_TRANSCRIPTS_DIGITAL,\r\n    ]);\r\n\r\n    const stageFour = sectionGroup.create(useState(null), useRef(), [\r\n        FIELDS.ACTIVITY_WORK,\r\n        FIELDS.HAS_NO_WORK_ACTIVITIES,\r\n        FIELDS.HAS_NO_SCHOOL_ACTIVITIES,\r\n        FIELDS.HAS_NO_VOLUNTEER_ACTIVITIES,\r\n        FIELDS.ACTIVITIES_COMPLETE\r\n    ]);\r\n\r\n    const stageFive = sectionGroup.create(useState(null), useRef(), [\r\n        FIELDS.ESSAY_1,\r\n        FIELDS.ESSAY_2,\r\n        FIELDS.ESSAY_3,\r\n        FIELDS.ESSAY_4,\r\n    ]);\r\n\r\n\r\n\r\n    /* SCHOLARSHIP SELECTION SECTION */  \r\n    const [schStatus, setSchStatus] = useState([]); //SCH application status\r\n    const app = new ApplicationInfo(schStatus);\r\n\r\n    const [programData, setProgramData] = useState(null);\r\n    const program = new ProgramInfo(programData);\r\n    const currentSeason = program.getSeason(activeYear);\r\n\r\n    const schDeadlines = {\r\n        SchSubmitDate: currentSeason?.getDate(\"END\"),\r\n        PriorityEndDate: currentSeason?.getDate(\"PRIORITY_END\"),\r\n        TrascriptEndDate: currentSeason?.getDate(\"TRANSCRIPT_END\"),\r\n        AppealEndDate: currentSeason?.getDate(\"APPEAL_END\"),\r\n    };\r\n\r\n    const [scholarshipAppData, setScholarshipAppData] = useState([]); //Holds selected scholarship apps info including Renew apps.  \r\n    const startedScholarships = scholarshipAppData;\r\n\r\n    const displayBoolean = (fieldKey) => {\r\n\r\n        var answer = sectionGroup.getAnswerByField(fieldKey);\r\n        var value = answer?.Response;\r\n\r\n        if (value === true || value === \"True\" || value === \"true\")\r\n            return \"Yes\";\r\n        if (value === false || value === \"False\" || value === \"false\")\r\n            return \"No\";\r\n        return \"\";\r\n    }\r\n\r\n    const [scholarshipInstructions, setScholarshipInstructions] = useState(null);\r\n    useEffect(() => {\r\n        (async() =>{\r\n            const code = await apiClient.getTextCode(\"StudentMessage\", \"ScholarshipSelectInstruction\");\r\n            setScholarshipInstructions(code?.Message);\r\n        })();\r\n    }, []);\r\n\r\n    /**\r\n     * fetch initial states on page-load\r\n     */\r\n    useEffect(\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n        async () => {\r\n            const programResult = await apiClient.getProgram('SCH');\r\n            setProgramData(programResult);\r\n            const program = new ProgramInfo(programResult);\r\n            const currentSeason = program.getSeason(activeYear);\r\n            if (!currentSeason) {\r\n                dispatch(\r\n                    open({\r\n                        message: \"This application is no longer available\",\r\n                        severity: \"success\",\r\n                    })\r\n                );\r\n                history.push({\r\n                    pathname: '/dashboard', state: {\r\n                        from: history.location.pathname\r\n                    }\r\n                })\r\n                return;\r\n            }\r\n\r\n            sectionGroup.fetchState(activeYear);\r\n            fetchTranscriptCompletionDetails();\r\n\r\n            const [schStatusResult, scholarshipApps] = await Promise.all([\r\n                apiClient.getApplication('SCH', activeYear),\r\n                apiClient.get(\"/application/search\", { year: activeYear, parentCode: 'SCH' }),\r\n            ]);\r\n            setSchStatus(schStatusResult);\r\n            if (!schStatusResult.IsStarted) {\r\n                apiClient.startApplication('SCH', activeYear);\r\n            }\r\n\r\n            const programs = await Promise.all(scholarshipApps.map(x => apiClient.getProgram(x.ProgramCode)));\r\n            const appDigests = scholarshipApps.map(app => {\r\n                const program = programs.find(p => p.Code == app.ProgramCode);\r\n                return combineProgramStatus(program, app);\r\n            });\r\n            setScholarshipAppData(appDigests);\r\n        }, []);\r\n\r\n    const reduxFormState = useSelector((state) => state.form);\r\n    const [transcriptCompletionData, setTranscriptCompletionData] = useState(null);\r\n    const transcriptRequirements = new RequirementSet(transcriptCompletionData);\r\n    const hsTranscriptRequirement = transcriptRequirements.get(TRANSCRIPT_QUESTIONS.FALL_HS.name);\r\n    const collegeHistoryCompletion = transcriptRequirements.getField(FIELDS.PAST_COLLEGE)\r\n\r\n    const [recommendations, setRecommendations] = useState(null);\r\n    /**\r\n     * find recommendation app details on-demand\r\n     * @returns {Array<*>}\r\n     */\r\n    const getRecommendations = async () => {\r\n        if (recommendations !== null)\r\n            return { loadStatus: \"OLD\", recommendations };\r\n\r\n        const recommendedPrograms = await apiClient.get('/recommendations/programs', { year: activeYear });\r\n        setRecommendations(recommendedPrograms);\r\n        return { loadStatus: \"NEW\", recommendations: recommendedPrograms };\r\n    }\r\n    /**\r\n     * find scholarships student is already in a pool for\r\n     * @returns {Array<*>}\r\n     */\r\n    const getStartedScholarships = () => {\r\n        return scholarshipAppData;\r\n    }\r\n\r\n    /**\r\n     * fetch latest completion data\r\n     */\r\n    async function fetchTranscriptCompletionDetails() {\r\n        var fieldKeys = [...stageThree.fieldKeys, \"collegehistories\"];\r\n        const transcriptCompletion = await apiClient.getCompletionReport(PROGRAM_CODE, activeYear, fieldKeys);\r\n        setTranscriptCompletionData(transcriptCompletion);\r\n    }\r\n\r\n    const formState = useSelector((state) => state.form);\r\n    const DEFAULT_FIELD_SECTION_FLAGS = {\r\n        familyInfo: false,\r\n        citizenShipStatus: false,\r\n        collegeHistoryInfo: false,\r\n        workingStudentStatus: false,\r\n        highSchoolStatus: false,\r\n        collegePlanInfo: false,\r\n        scholarships: false,\r\n        transcripts: false,\r\n        activities: false,\r\n        personalStatements: false,\r\n    };\r\n    const [showField, setShowField] = useState(DEFAULT_FIELD_SECTION_FLAGS);\r\n    const history = useHistory();\r\n    const navigateTo = (route) => (e) => {\r\n        e.preventDefault();\r\n        history.push(route);\r\n    };\r\n\r\n\r\n\r\n    const isStageTwoComplete = startedScholarships.length > 0;\r\n    // percent complete, giving a fixed 20% to the profile, 20% to scholarship selection, and 0% to the submit button\r\n    const percentComplete = sectionGroup.isComplete && isStageTwoComplete ? 100 : Math.round(20 + 60 * sectionGroup.percentComplete / 100 + (isStageTwoComplete ? 20 : 0));\r\n    const disableSubmit = !sectionGroup.isComplete;\r\n\r\n\r\n    useEffect(() => {\r\n        if (!disableSubmit && !app?.isSubmitted) {\r\n            dispatch(\r\n                open({\r\n                    message: \"Your scholarship application is now ready to be submitted!\",\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        }\r\n    }, [disableSubmit]);\r\n\r\n    const toggleSection = async (showFieldState) => {\r\n        await sectionGroup.fetchState(activeYear);\r\n        fetchTranscriptCompletionDetails();\r\n        setRecommendations(null);\r\n        actions.purgeDeletedRepeatableFieldIds();\r\n        setShowField(showFieldState);\r\n    };\r\n    const get = (fieldKey, charLimit) => {\r\n        const value = formState.fields[fieldKey]?.value || \"\";\r\n        if (charLimit && value.length > charLimit) {\r\n            return value.slice(0, charLimit) + \"...\";\r\n        } else {\r\n            return value;\r\n        }\r\n    };\r\n\r\n    const getSchoolCode = (fieldKey) => {\r\n        return formState.fields[fieldKey]?.SchoolCode?.value;\r\n    };\r\n\r\n    const getEdLevel = (fieldKey1, fieldKey2) => {\r\n        const parent1 = get(fieldKey1);\r\n        const parent2 = get(fieldKey2);\r\n        return { parent1, parent2 };\r\n    };\r\n\r\n    const getCitizenshipCode = (key) => {\r\n        let csItem = citizenshipItems.find((item) => item.Code == key);\r\n        return csItem ? csItem.Message : null;\r\n    };\r\n\r\n    const handleCancel = (showFieldState) => {\r\n        setShowField(showFieldState);\r\n    };\r\n\r\n    const currentColleges = formState.fields[FIELDS.CURRENT_COLLEGE];\r\n    const pastColleges = formState.fields[FIELDS.PAST_COLLEGE];\r\n\r\n\r\n\r\n    const [isGed, setIsGed] = useState(null);\r\n\r\n    useEffect(() => {\r\n        const highschool = sectionGroup.getAnswerByField(FIELDS.HIGHSCHOOL);\r\n        if (!highschool)\r\n            return;\r\n\r\n        if (highschool.Type === \"Ged\" || highschool.Type === \"GedHomeSchool\") {\r\n            setIsGed(true);\r\n        } else {\r\n            setIsGed(false);\r\n        }\r\n    }, []);\r\n\r\n\r\n    //=====( TRANSCRIPT DATA PARSING )\r\n\r\n    const [hstInfo, setHstInfo] = useState([]);\r\n    useEffect(() => {\r\n        (async () => {\r\n            const highSchoolTranscripts = [\r\n                _get(reduxFormState, `fields.${FIELDS.FALL_HS_TRANSCRIPTS_DIGITAL}`),\r\n                _get(reduxFormState, `fields.${FIELDS.FALL_HS_TRANSCRIPTS_MAIL}`),\r\n                _get(reduxFormState, `fields.${FIELDS.FALL_HS_TRANSCRIPTS_REGISTRAR}`),\r\n            ];\r\n\r\n            const fileAvailableSchools = highSchoolTranscripts.filter(\r\n                (hst) => _get(hst, \"IsFileAvailable.value\") === true\r\n            );\r\n\r\n            for (let i = 0; i < fileAvailableSchools.length; i++) {\r\n                const highschoolTranscript = fileAvailableSchools[i];\r\n                const schoolCode = _get(highschoolTranscript, \"SchoolCode.value\");\r\n                try {\r\n                    const highschool = await apiClient.getHighSchool(schoolCode);\r\n                    highschoolTranscript[\"_name\"] = highschool && highschool.Name;\r\n                } catch (e) { }\r\n            }\r\n\r\n            setHstInfo(fileAvailableSchools);\r\n        })();\r\n    }, [reduxFormState]);\r\n\r\n\r\n    const getReduxField = (fieldKey) => {\r\n        return _get(reduxFormState, `fields.${fieldKey}.value`);\r\n    };\r\n\r\n    const hsDigitalSelected = getReduxField(\r\n        compositeFieldname(\r\n            FIELDS.FALL_HS_TRANSCRIPTS_DIGITAL,\r\n            AnswerTypeTranscriptProps.IS_SELECTED\r\n        )\r\n    );\r\n    const hsMailSelected = getReduxField(\r\n        compositeFieldname(\r\n            FIELDS.FALL_HS_TRANSCRIPTS_MAIL,\r\n            AnswerTypeTranscriptProps.IS_SELECTED\r\n        )\r\n    );\r\n    const hsRegistrarSelected = getReduxField(\r\n        compositeFieldname(\r\n            FIELDS.FALL_HS_TRANSCRIPTS_REGISTRAR,\r\n            AnswerTypeTranscriptProps.IS_SELECTED\r\n        )\r\n    );\r\n\r\n    useEffect(() => {\r\n        if (hsDigitalSelected) {\r\n            setValue(\"HSTranscriptSubmissionMethod\", TranscriptDeliveryTypes.UPLOAD);\r\n        } else if (hsMailSelected) {\r\n            setValue(\"HSTranscriptSubmissionMethod\", TranscriptDeliveryTypes.MAIL);\r\n        } else {\r\n            setValue(\r\n                \"HSTranscriptSubmissionMethod\",\r\n                TranscriptDeliveryTypes.REGISTRAR\r\n            );\r\n        }\r\n    }, [hsDigitalSelected, hsMailSelected, hsRegistrarSelected]);\r\n\r\n\r\n\r\n    useEffect(() => {\r\n        const highschool = _get(reduxFormState, `fields.${FIELDS.HIGHSCHOOL}`);\r\n        if (highschool) {\r\n            const highschoolType = _get(highschool, \"Type.value\");\r\n            if (highschoolType === \"Ged\") {\r\n                setIsGed(true);\r\n                return;\r\n            }\r\n\r\n\r\n            if (highschoolType === \"GedHomeSchool\") {\r\n                setIsGed(true);\r\n                return;\r\n            }\r\n\r\n\r\n        }\r\n    }, [reduxFormState]);\r\n\r\n    // END TRANSCRIPT DATA\r\n\r\n    const [isUnlistedCollegeChoice, setUnlistedCollegeChoice] = useState(null);\r\n    useEffect(() => {\r\n\r\n        const schoolCode = getSchoolCode(FIELDS.COLLEGE_CHOICE);\r\n        const isUnlistedCollege = ((schoolCode === null || schoolCode == UNLISTED_COLLEGECODE) && formState.fields[FIELDS.COLLEGE_CHOICE]?.UnlistedName?.value);\r\n        setUnlistedCollegeChoice(isUnlistedCollege);\r\n\r\n    }, [reduxFormState]);\r\n\r\n    const onError = (errors, e) => {\r\n        dispatch(\r\n            open({\r\n                message: \"There was a problem saving your entries. Please ensure all required transcripts have been uploaded.\",\r\n                severity: \"success\",\r\n            })\r\n        );\r\n        console.log(\"ERROR\", errors, e);\r\n    };\r\n\r\n    const dispatch = useDispatch();\r\n\r\n\r\n    const [showConfirmation, setShowConfirmation] = useState(false);\r\n\r\n    /**\r\n     * do actual work of submitting scholarship application for review\r\n     */\r\n    const actualSubmit = async () => {\r\n        const actualSubmission = async (data, e) => {\r\n            await actions.submitForm(data);\r\n            await apiClient.submitApplication('SCH', activeYear);\r\n            setShowConfirmation(true);\r\n            const updatedAppStatus = await apiClient.getApplication(PROGRAM_CODE, activeYear);\r\n            setSchStatus(updatedAppStatus);\r\n        };\r\n        try {\r\n            const execSubmission = handleSubmit(actualSubmission, onError);\r\n            await execSubmission();\r\n            dispatch(\r\n                open({\r\n                    message: \"Submitted Successfully\",\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        } catch (e) {\r\n            console.error(e);\r\n            dispatch(\r\n                open({\r\n                    message: e.message,\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        }\r\n\r\n    };\r\n    /**\r\n     * resume editing, most likely after submitting\r\n     */\r\n    const onEdit = () => {\r\n        setShowConfirmation(false);\r\n        //no need to reload in this case, since all forms will already be in view state with redux-saved info\r\n    }\r\n\r\n\r\n    const [citizenshipItems, setCitizenshipItems] = useState([]);\r\n\r\n    useEffect(\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n        async () => {\r\n            const codes = await apiClient.get('/code/codes?codeType=CITIZEN');\r\n            setCitizenshipItems(codes);\r\n        }, []);\r\n\r\n\r\n\r\n    const noCollegeHistoryAnswer = collegeHistorySection.getAnswerByField(FIELDS.COLLEGE_HISTORY_COMPLETE).Response;\r\n  \r\n    return (\r\n        <FormProvider {...methods}>\r\n            <PortalView>\r\n                <div name=\"ProfilePage\">\r\n                    <div className=\"page-intro\">\r\n                        <div className=\"wrapper\">\r\n                            <div className=\"page-intro__layout\">\r\n                                <div className=\"page-intro__icon\">\r\n                                    <img src=\"/Profile.svg\" alt=\"Profile icon\" />\r\n                                </div>\r\n                                <div className=\"page-intro__content rhythm\">\r\n                                    <h1 className=\"heading heading--h1\">\r\n                                        OSAC Scholarship Application {activeYear} - {activeYear + 1}\r\n                                        <PrintIcon />\r\n                                    </h1>\r\n                                    <p>This section is required to apply for our scholarships. The information in this section helps us recommend scholarships for you. Deadlines as follows: </p>\r\n                                    <p>Last date to submit scholarship application: {schDeadlines.SchSubmitDate}\r\n                                        <br></br> Priority(Early Bird) end date: {schDeadlines.PriorityEndDate}\r\n                                        <br></br> Last date for transcript corrections: {schDeadlines.TrascriptEndDate}\r\n                                        <br></br> Appeal end date: {schDeadlines.AppealEndDate}</p>\r\n                                    <a href=\"#\" onClick={navigateTo(\"/profile\")}>Return to Profile</a>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n\r\n                    {showConfirmation ? (\r\n                        <CompleteSubmission onEdit={onEdit} details={{\r\n                            code: PROGRAM_CODE,\r\n                            year: activeYear,\r\n                            title: \"Scholarships Additional Info\"\r\n                        }} />\r\n                    ) : (\r\n\r\n                        <div className=\"wrapper wrapper--narrow\">\r\n                            <div style={{ marginTop: \"1rem\" }}>\r\n                                <ProgressBar progress={percentComplete} />\r\n                            </div>\r\n\r\n                            <div style={{ border: '1px solid grey', padding: '1rem', marginTop: '1rem' }}>\r\n                                <div style={{ 'fontWeight': 'bold', fontSize: '2rem' }}>\r\n                                    Section 1\r\n                                    <SectionStateIcon section={stageOne} />\r\n                                </div>\r\n                                {!showField.familyInfo ? (\r\n                                    <FormSection\r\n                                        title=\"My Family Information\"\r\n                                        status={<SectionStateIcon section={parentSection} />}\r\n                                        isEditable={false}\r\n                                        onEditClick={() => setShowField({ ...showField, familyInfo: true })}\r\n                                    >\r\n                                        <div className=\"field-wrapper\">\r\n                                            <div className=\"field-wrapper__title\">Parent or guardians’ highest completed education</div>\r\n                                            <ReadOnly name=\"HighestEd-Parent\" value={<ConvertCode isEdLevel={true} parents={getEdLevel(FIELDS.ED_LEVEL_FATHER, FIELDS.ED_LEVEL_MOTHER)} />} />\r\n                                        </div>\r\n                                        <div className=\"field-wrapper\">\r\n                                            <div className=\"field-wrapper__title\">First-Generation Immigrant</div>\r\n                                            <ReadOnly name=\"working-student-data\"\r\n                                                value={displayBoolean(FIELDS.FIRST_GEN_IMMIGRANT)} />\r\n                                        </div>\r\n                                    </FormSection>\r\n                                ) : (\r\n                                    <EditFamilyInfo\r\n                                        section={parentSection}\r\n                                        onChange={() =>\r\n                                            toggleSection({ ...showField, familyInfo: false })}\r\n                                        onCancel={() =>\r\n                                            handleCancel({ ...showField, familyInfo: false })\r\n                                        }\r\n                                    />\r\n                                )}\r\n\r\n                                {!showField.citizenShipStatus ? (\r\n                                    <FormSection\r\n                                        title=\"Citizenship Status\"\r\n                                        status={<SectionStateIcon section={citizenSection} />}\r\n                                        isEditable={false}\r\n                                        onEditClick={() =>\r\n                                            setShowField({ ...showField, citizenShipStatus: true })\r\n                                        }\r\n                                    >\r\n                                        <div className=\"field-wrapper\">\r\n                                            <div className=\"field-wrapper__title\">Citizenship Status</div>\r\n                                            <ReadOnly\r\n                                                name=\"Citizenship-status\"\r\n                                                value={getCitizenshipCode(get(FIELDS.CITIZENSHIP_STATUS))}\r\n                                            />\r\n                                        </div>\r\n                                    </FormSection>\r\n                                ) : (\r\n                                    <EditCitizenShip\r\n                                        section={citizenSection}\r\n                                        onChange={() =>\r\n                                            toggleSection({ ...showField, citizenShipStatus: false })\r\n                                        }\r\n                                        onCancel={() =>\r\n                                            handleCancel({ ...showField, citizenShipStatus: false })\r\n                                        }\r\n                                    />\r\n                                )}\r\n\r\n                                {'' && <></>}\r\n\r\n                                {!showField.workingStudentStatus ? (\r\n                                    <FormSection\r\n                                        title=\"Working Student Status\"\r\n                                        status={<SectionStateIcon section={workingSection} />}\r\n                                        isEditable={false}\r\n                                        onEditClick={() =>\r\n                                            setShowField({ ...showField, workingStudentStatus: true })\r\n                                        }\r\n                                    >\r\n                                        <div className=\"field-wrapper\">\r\n                                            <div className=\"field-wrapper__title\">Are you working 20+ hours/week in the current ({activeYear - 1} - {activeYear}) academic year?</div>\r\n                                            <ReadOnly name=\"working-student-data\"\r\n                                                value={displayBoolean(FIELDS.WORKING__CURRENT)} />\r\n                                        </div>\r\n                                        <div className=\"field-wrapper\">\r\n                                            <div className=\"field-wrapper__title\">Are you planning to work 20+ hours a week in the next academic year ({activeYear} - {activeYear + 1})? * </div>\r\n                                            <ReadOnly name=\"working-student-data\"\r\n                                                value={displayBoolean(FIELDS.WORKING__NEXT_YEAR)} />\r\n                                        </div>\r\n                                    </FormSection>\r\n                                ) : (\r\n                                    <EditWorkingStudentData\r\n                                        section={workingSection}\r\n                                        onChange={() =>\r\n                                            toggleSection({ ...showField, workingStudentStatus: false })\r\n                                        }\r\n                                        onCancel={() =>\r\n                                            handleCancel({ ...showField, workingStudentStatus: false })\r\n                                        }\r\n                                        year={activeYear}\r\n                                    />\r\n                                )}\r\n\r\n                                {!showField.highSchoolStatus ? (\r\n                                    <FormSection\r\n                                        title=\"High School Information\"\r\n                                        status={<SectionStateIcon section={highschoolSection} />}\r\n                                        isEditable={false}\r\n                                        onEditClick={() => setShowField({ ...showField, highSchoolStatus: true })}\r\n                                    >\r\n                                        <div className=\"form-section__content\">\r\n                                            <div name=\"HighschoolInfoForm\">\r\n                                                <div className=\"field-wrapper\">\r\n                                                    <div className=\"field-wrapper__title\">\r\n                                                        Type of high school or equivalent\r\n                                                    </div>\r\n                                                    <ReadOnly\r\n                                                        name=\"HighschoolType\"\r\n                                                        value={\r\n                                                            <ConvertCode\r\n                                                                codeType=\"HSTYPE\"\r\n                                                                code={get(FIELDS.HIGHSCHOOL_TYPE)}\r\n                                                            />\r\n                                                        }\r\n                                                    />\r\n                                                </div>\r\n\r\n                                                <div className=\"field-wrapper\">\r\n                                                    <div className=\"field-wrapper__title\">High school</div>\r\n                                                    <ReadOnly\r\n                                                        name=\"Highschool\"\r\n                                                        value={\r\n                                                            getSchoolCode(FIELDS.HIGHSCHOOL) ?\r\n                                                                <ConvertCode\r\n                                                                    isHS={true}\r\n                                                                    code={getSchoolCode(FIELDS.HIGHSCHOOL)}\r\n                                                                /> :\r\n                                                                formState.fields[FIELDS.HIGHSCHOOL]?.UnlistedName?.value ?\r\n                                                                    formState.fields[FIELDS.HIGHSCHOOL]?.UnlistedName?.value :\r\n                                                                    \"No High School information received\"\r\n                                                        }\r\n                                                    />\r\n                                                </div>\r\n\r\n                                                <div className=\"field-wrapper\">\r\n                                                    <div className=\"field-wrapper__title\">\r\n                                                        Date of high school completion or graduation\r\n                                                    </div>\r\n                                                    <ReadOnly\r\n                                                        name=\"Grad-Highschool\"\r\n                                                        className=\"text\"\r\n                                                        value={get(FIELDS.HIGHSCHOOL_GRAD_DATE)?.substr(0, 7)}\r\n                                                    />\r\n                                                </div>\r\n\r\n                                                <div className=\"field-wrapper\">\r\n                                                    <div className=\"field-wrapper__title\">\r\n                                                        Will you be attending college as a 5th year senior in Fall term {activeYear}?\r\n                                                    </div>\r\n                                                    <ReadOnly\r\n                                                        name=\"5thYearSenior\"\r\n                                                        className=\"text\"\r\n                                                        value={displayBoolean(FIELDS.FIFTH_YEAR_SENIOR)}\r\n                                                    />\r\n                                                </div>\r\n\r\n                                                {isGed === false || isGed === null ? (\r\n                                                    <>\r\n                                                        <div className=\"field-wrapper\">\r\n                                                            <div className=\"field-wrapper__title\">\r\n                                                                High school gpa (unweighted, cumulative 7-semester)\r\n                                                            </div>\r\n                                                            <ReadOnly\r\n                                                                name=\"GPA-Highschool\"\r\n                                                                className=\"text\"\r\n                                                                value={get(FIELDS.HIGHSCHOOL_GPA)}\r\n                                                            />\r\n                                                        </div>\r\n                                                    </>\r\n                                                ) : (\r\n                                                    <>\r\n                                                        <div className=\"field-wrapper\">\r\n                                                            <div className=\"field-wrapper__title\">GED<sup style={{ verticalAlign: \"super\", fontSize: \".9rem\" }}>&reg;</sup> score</div>\r\n\r\n                                                            <ReadOnly\r\n                                                                name=\"GED-SCore\"\r\n                                                                className=\"text\"\r\n                                                                value={get(FIELDS.GED_SCORE)}\r\n                                                            />\r\n                                                        </div>\r\n                                                    </>\r\n                                                )}\r\n\r\n                                                <div className=\"field-wrapper\">\r\n                                                    <div className=\"field-wrapper__title\">SAT total score</div>\r\n                                                    <ReadOnly\r\n                                                        name=\"SAT\"\r\n                                                        className=\"text\"\r\n                                                        value={get(FIELDS.SAT)}\r\n                                                    />\r\n                                                </div>\r\n\r\n                                                <div className=\"field-wrapper\">\r\n                                                    <div className=\"field-wrapper__title\">ACT total score</div>\r\n                                                    <ReadOnly\r\n                                                        name=\"ACT\"\r\n                                                        className=\"text\"\r\n                                                        value={get(FIELDS.ACT)}\r\n                                                    />\r\n                                                </div>\r\n\r\n                                                <div className=\"field-wrapper\">\r\n                                                    <div className=\"field-wrapper__title\">\r\n                                                        Did you work with the aspire program in high school?\r\n                                                    </div>\r\n                                                    <ReadOnly\r\n                                                        name=\"AspireWork-Highschool\"\r\n                                                        className=\"text\"\r\n                                                        value={\r\n                                                            get(FIELDS.ASPIRE__MEMBER) === true ||\r\n                                                                get(FIELDS.ASPIRE__MEMBER) === \"True\"\r\n                                                                ? \"Yes\"\r\n                                                                : get(FIELDS.ASPIRE__MEMBER) === false ||\r\n                                                                    get(FIELDS.ASPIRE__MEMBER) === \"False\"\r\n                                                                    ? \"No\"\r\n                                                                    : \"\"\r\n                                                        }\r\n                                                    />\r\n                                                </div>\r\n\r\n                                                <div className=\"field-wrapper\">\r\n                                                    <div className=\"field-wrapper__title\">\r\n                                                        Aspire mentor’s name\r\n                                                    </div>\r\n                                                    <ReadOnly\r\n                                                        name=\"AspireMentorName\"\r\n                                                        className=\"text\"\r\n                                                        value={get(FIELDS.ASPIRE__ADVISOR)}\r\n                                                    />\r\n                                                </div>\r\n\r\n                                                <div className=\"field-wrapper\">\r\n                                                    <div className=\"field-wrapper__title\">Aspire site name</div>\r\n                                                    <ReadOnly\r\n                                                        name=\"AspireSiteName\"\r\n                                                        className=\"text\"\r\n                                                        value={get(FIELDS.ASPIRE__SITE)}\r\n                                                    />\r\n                                                </div>\r\n                                            </div>\r\n                                        </div>\r\n                                    </FormSection>\r\n                                ) : (\r\n                                    <EditHighschoolInfo\r\n                                        section={highschoolSection}\r\n                                        readOnlyHs={true}\r\n                                        hideCorrectional={true}\r\n                                        onChange={() =>\r\n                                            toggleSection({ ...showField, highSchoolStatus: false })\r\n                                        }\r\n                                        onCancel={() =>\r\n                                            handleCancel({ ...showField, highSchoolStatus: false })\r\n                                        }\r\n                                    />\r\n                                )}\r\n\r\n                                {!showField.collegeOfChoice ? (\r\n                                    <div id=\"college-choice\">\r\n                                        <FormSection\r\n                                            title=\"College Choice\"\r\n                                            status={<SectionStateIcon section={collegeChoiceSection} />}\r\n                                            isEditable={false}\r\n                                            onEditClick={() =>\r\n                                                setShowField({ ...showField, collegeOfChoice: true })\r\n                                            }\r\n                                        >\r\n                                            <div name=\"CollegeOfChoiceForm\">\r\n                                                <div className=\"field-wrapper\">\r\n                                                    <div className=\"field-wrapper__title\">\r\n                                                        College or University Name\r\n                                                    </div>\r\n                                                    <ReadOnly\r\n                                                        name=\"CollegeName\"\r\n                                                        className=\"text\"\r\n                                                        value={\r\n                                                            isUnlistedCollegeChoice ? formState.fields[FIELDS.COLLEGE_CHOICE]?.UnlistedName?.value :\r\n                                                                <ConvertCode\r\n                                                                    isCollege={true}\r\n                                                                    code={getSchoolCode(FIELDS.COLLEGE_CHOICE)}\r\n                                                                />\r\n                                                        }\r\n                                                    />\r\n                                                </div>\r\n\r\n                                                <div className=\"field-wrapper\">\r\n                                                    <div className=\"field-wrapper__title\">\r\n                                                        College Standing as of Fall {activeYear}\r\n                                                    </div>\r\n                                                    <ReadOnly\r\n                                                        name=\"CollegeCode\"\r\n                                                        className=\"text\"\r\n                                                        value={\r\n                                                            <ConvertCode\r\n                                                                codeType=\"YRINCLG\"\r\n                                                                code={get(FIELDS.COLLEGE_STANDING)}\r\n                                                            />\r\n                                                        }\r\n                                                    />\r\n                                                </div>\r\n                                            </div>\r\n                                        </FormSection>\r\n                                    </div>\r\n                                ) : (\r\n                                    <EditCollegeOfChoice\r\n                                        section={collegeChoiceSection}\r\n                                        onChange={() =>\r\n                                            toggleSection({ ...showField, collegeOfChoice: false })\r\n                                        }\r\n                                        onCancel={() =>\r\n                                            handleCancel({ ...showField, collegeOfChoice: false })\r\n                                        }\r\n                                        year={activeYear}\r\n                                        hideDualEnrolled={false}\r\n                                        isUnlistedCollegeChoice={isUnlistedCollegeChoice}\r\n                                    />\r\n                                )}\r\n\r\n                                {!showField.collegePlanInfo ? (\r\n                                    <div id=\"college-plans\">\r\n                                        <FormSection\r\n                                            title=\"College Plans\"\r\n                                            status={<SectionStateIcon section={degreeSection} />}\r\n                                            isEditable={false}\r\n                                            onEditClick={() =>\r\n                                                setShowField({ ...showField, collegePlanInfo: true })\r\n                                            }\r\n                                        >\r\n\r\n                                            <div container className=\"field-wrapper\">\r\n                                                <div className=\"field-wrapper__title\">degree plan(s)</div>\r\n                                                <ReadOnly name=\"DegreePlan\" value={<DegreePlans degrees={formState.fields[FIELDS.DEGREES]} />} />\r\n                                            </div>\r\n\r\n                                            <div className=\"field-wrapper\">\r\n                                                <div className=\"field-wrapper__title\">{getField(FIELDS.CAREER_GOAL).question}</div>\r\n                                                <ReadOnly name=\"CareerGoal\" value={get(FIELDS.CAREER_GOAL)} />\r\n                                            </div>\r\n                                        </FormSection>\r\n                                    </div>\r\n                                ) : (\r\n                                    <EditCollegePlan\r\n                                        section={degreeSection}\r\n                                        onChange={() =>\r\n                                            toggleSection({ ...showField, collegePlanInfo: false })\r\n                                        }\r\n                                        onCancel={() =>\r\n                                            handleCancel({ ...showField, collegePlanInfo: false })\r\n                                        }\r\n                                        year={activeYear}\r\n                                    />\r\n                                )}\r\n\r\n                                {!showField.collegeHistoryInfo ? (\r\n                                    <FormSection\r\n                                        title=\"College History\"\r\n                                        status={<SectionStateIcon section={collegeHistorySection} />}\r\n                                        isEditable={false}\r\n                                        onEditClick={() =>\r\n                                            setShowField({ ...showField, collegeHistoryInfo: true })\r\n                                        }\r\n                                    >\r\n                                        {noCollegeHistoryAnswer ?\r\n                                            (<Fragment>\r\n                                                <FieldSection>\r\n                                                    You have indicated you have never attended college.\r\n                                                </FieldSection>\r\n                                            </Fragment>)\r\n                                            :\r\n                                            (<Fragment>\r\n\r\n                                                {collegeHistoryCompletion?.isDuplicated === true &&\r\n                                                    <div>\r\n                                                        <Alert severity=\"error\" className=\"alert alert--error\">\r\n                                                            <p>\r\n                                                                Do not report any college more than once. Even if you took time off from a college, report the earliest term of attendance\r\n                                                                and the most recent term of attendance if you are not still currently attending.\r\n                                                            </p>\r\n                                                        </Alert>\r\n                                                    </div>\r\n                                                }\r\n                                                <div className=\"field-wrapper\">\r\n                                                    <div className=\"field-wrapper__title\">Currently attending colleges</div>\r\n\r\n\r\n                                                    <div>\r\n                                                        <CollegeDisplay colleges={currentColleges} />\r\n                                                    </div>\r\n                                                </div>\r\n\r\n                                                <div className=\"field-wrapper\">\r\n                                                    <div className=\"field-wrapper__title\">Previously attended colleges</div>\r\n                                                    <div>\r\n                                                        <CollegeDisplay colleges={pastColleges} />\r\n                                                    </div>\r\n                                                </div>\r\n\r\n                                                <div className=\"field-wrapper\">\r\n                                                    <div className=\"field-wrapper__title\">\r\n                                                        Will you have finished two academic years towards a\r\n                                                        degree or certificate at community college by july 1,{\" \"}\r\n                                                        {activeYear}?\r\n                                                    </div>\r\n                                                    <ReadOnly name=\"2YearsCommCollege\" value={\r\n                                                        get(FIELDS.FINISHED_COMM_COLLEGE) === true ||\r\n                                                            get(FIELDS.FINISHED_COMM_COLLEGE) === \"True\"\r\n                                                            ? \"Yes\"\r\n                                                            : get(FIELDS.FINISHED_COMM_COLLEGE) === false ||\r\n                                                                get(FIELDS.FINISHED_COMM_COLLEGE) === \"False\"\r\n                                                                ? \"No\"\r\n                                                                : \"\"\r\n                                                    }\r\n                                                    />\r\n                                                </div>\r\n\r\n                                                <div className=\"field-wrapper\">\r\n                                                    <div className=\"field-wrapper__title\">\r\n                                                        Will you have earned your bachelor’s degree by fall{\" \"}\r\n                                                        {activeYear}?\r\n                                                    </div>\r\n                                                    <ReadOnly\r\n                                                        name=\"BachelorDegree\"\r\n                                                        value={\r\n                                                            get(FIELDS.FINISHED_BACHELORS_DEGREE) === true ||\r\n                                                                get(FIELDS.FINISHED_BACHELORS_DEGREE) === \"True\"\r\n                                                                ? \"Yes\"\r\n                                                                : get(FIELDS.FINISHED_BACHELORS_DEGREE) === false ||\r\n                                                                    get(FIELDS.FINISHED_BACHELORS_DEGREE) === \"False\"\r\n                                                                    ? \"No\"\r\n                                                                    : \"\"\r\n                                                        }\r\n                                                    />\r\n                                                </div>\r\n\r\n                                                <div className=\"field-wrapper\">\r\n                                                    <div className=\"field-wrapper__title\">Cumulative undergraduate gpa</div>\r\n                                                    <ReadOnly name=\"CGPA-Undergrad\" value={get(FIELDS.UNDERGRAD_GPA)} />\r\n                                                </div>\r\n\r\n                                                <div className=\"field-wrapper\">\r\n                                                    <div className=\"field-wrapper__title\">Cumulative Graduate gpa</div>\r\n                                                    <ReadOnly\r\n                                                        name=\"CGPA-Undergrad\"\r\n                                                        value={get(FIELDS.GRADUATE_GPA)}\r\n                                                    />\r\n                                                </div>\r\n                                            </Fragment>)}\r\n                                    </FormSection>\r\n                                ) : (\r\n                                    <EditCollegeHistory\r\n                                        section={collegeHistorySection}\r\n                                        onChange={() => toggleSection({ ...showField, collegeHistoryInfo: false })}\r\n                                        onCancel={() =>\r\n                                            handleCancel({ ...showField, collegeHistoryInfo: false })\r\n                                        }\r\n                                    />\r\n                                )}\r\n                            </div>\r\n\r\n                            <div id=\"section2\" style={{ border: '1px solid grey', padding: '1rem', marginTop: '1rem' }}>\r\n                                <div style={{ 'fontWeight': 'bold', fontSize: '2rem' }}>\r\n                                    Section 2\r\n                                    {startedScholarships.length > 0 &&\r\n                                        <CheckCircle style={{ color: 'green', marginLeft: '1rem' }} />\r\n                                    }\r\n                                    {startedScholarships.length === 0 &&\r\n                                        <CheckCircle style={{ color: 'lightgray', marginLeft: '1rem' }} />\r\n                                    }\r\n                                </div>\r\n                                {!showField.scholarships ? (\r\n                                    <FormSection\r\n                                        title=\"Select Scholarship(s)\"\r\n                                        editButtonText=\"Add/Remove Scholarships\"\r\n                                        isEditable={false}\r\n                                        onEditClick={() =>\r\n                                            setShowField({ ...showField, scholarships: true })\r\n                                        }>\r\n                                        <div className=\"instructions rhythm rhythm--large\">\r\n                                            <div className=\"rhythm\">\r\n                                                <FieldSlot md={12}>\r\n\r\n                                                    <Alert severity=\"info\" variant=\"outlined\" >\r\n                                                        <div dangerouslySetInnerHTML={{ __html: scholarshipInstructions }} />\r\n                                                    </Alert>\r\n\r\n                                                    {[{ title: 'Selected Scholarships', filter: s => s.Source !== 'Renew' },\r\n                                                    { title: 'Scholarships Renewals', filter: s => s.Source === 'Renew' },\r\n                                                    ].map(t => startedScholarships.some(t.filter) &&\r\n                                                        <div>\r\n                                                            <strong>{t.title}:</strong>\r\n                                                            <ul className=\"list\">\r\n                                                                {startedScholarships.filter(t.filter).map(sch =>\r\n                                                                    <li className=\"li\">\r\n                                                                        {sch.Name}\r\n                                                                    </li>\r\n                                                                )}\r\n                                                            </ul>\r\n                                                        </div>\r\n                                                    )}\r\n\r\n\r\n                                                </FieldSlot>\r\n                                            </div>\r\n                                        </div>\r\n                                    </FormSection>\r\n                                ) : (\r\n                                    <div className=\"form-section\">\r\n                                        <div className=\"form-section__header\">\r\n                                            <h3 className=\"heading heading--h4\">Scholarships</h3>\r\n                                            <div className=\"form-section__actions\">\r\n                                                <Button name='CancelEditBasicInfo' label='Close' variant='text'\r\n                                                    onClick={() =>\r\n                                                        handleCancel({ ...showField, scholarships: false })\r\n                                                    } />\r\n                                            </div>\r\n                                        </div>\r\n                                        <div className=\"form-section__content\">\r\n                                            <ScholarshipTabs\r\n                                                startedScholarshipGetter={getStartedScholarships}\r\n                                                recommendationGetter={getRecommendations}\r\n                                                year={activeYear}\r\n                                            />\r\n                                            <div className=\"save-edit-end\" >\r\n                                                <Button name='CancelEditBasicInfo' label='Close' variant='text' onClick={() => handleCancel({ ...showField, scholarships: false })} />\r\n                                            </div>\r\n                                        </div>\r\n\r\n                                    </div>\r\n                                )}\r\n                            </div>\r\n                            {startedScholarships.length > 0 &&\r\n                                <div>\r\n                                    <div style={{ border: '1px solid grey', padding: '1rem', marginTop: '1rem' }}>\r\n                                        <div style={{ 'fontWeight': 'bold', fontSize: '2rem' }}>\r\n                                            Section 3\r\n                                            <SectionStateIcon section={stageThree} />\r\n                                        </div>\r\n                                        {!showField.transcripts ? (\r\n                                            <FormSection\r\n                                                title=\"Transcripts\"\r\n                                                isEditable={false}\r\n                                                onEditClick={() =>\r\n                                                    setShowField({ ...showField, transcripts: true })\r\n                                                }\r\n                                            >\r\n                                                <div className=\"instructions rhythm rhythm--large\">\r\n                                                    <div className=\"rhythm\">\r\n                                                        <TranscriptInstructions section={stageThree} requirements={transcriptRequirements} />\r\n\r\n                                                        {/*#4155: SCH - External Review Message & Error message showed on Dashboard. */}\r\n                                                        {schStatus?.IsSubmitted && \r\n                                                            <FieldSlot md={12}>\r\n                                                                <div className=\"mt-1\">\r\n                                                                    <strong>Scholarship Application Review Status</strong>\r\n                                                                    {schStatus?.IsSubmitted && (() => {\r\n                                                                        switch (schStatus.ReviewStatus) {\r\n                                                                            case 'VALID':\r\n                                                                                return <div className=\"rhythm\" >Review Valid</div>\r\n                                                                            case 'REJECT':\r\n                                                                                return (\r\n                                                                                    <div className=\"rhythm\" style={{ color: '#da3754' }}>\r\n                                                                                        <div>Corrections required.  Fix errors by <b>{schDeadlines.TrascriptEndDate}</b> to be considered for scholarships.</div>\r\n                                                                                        <div dangerouslySetInnerHTML={{ __html: schStatus.ReviewInstructions }}></div>\r\n                                                                                    </div>)\r\n                                                                            case 'PENDING':\r\n                                                                            case 'PENDINGNEWDOCREJECT':\r\n                                                                            case 'PENDINGNEWDOCVALID':\r\n                                                                            case 'REVIEW1':\r\n                                                                            case 'REVIEW2':\r\n                                                                                return <div className=\"rhythm\" >Awaiting Review</div>\r\n                                                                            default:\r\n                                                                                return <></>\r\n                                                                        }\r\n                                                                    })()}\r\n                                                                </div>\r\n                                                            </FieldSlot>\r\n                                                        }\r\n                                                        <TranscriptSummary section={stageThree} />\r\n                                                      \r\n                                                        \r\n                                                        {(!transcriptRequirements.isLoaded || !transcriptRequirements.isSkipped(TRANSCRIPT_QUESTIONS.FALL_HS.name) || hsTranscriptRequirement.isOptional)\r\n                                                            && hstInfo.map((hst) => (\r\n                                                                <FieldSection\r\n                                                                    withDivider={true}\r\n                                                                    title=\"Highschool Transcript Status\"\r\n                                                                >\r\n                                                                    <FieldRow>\r\n                                                                        <FieldSlot md={12}>\r\n                                                                            <div className=\"mt-1\">\r\n                                                                                { /** #3959: Display HSName for all HSTypes either HS picker or unlisted/HS name typed. */\r\n\r\n                                                                                    <div><ReadOnly name=\"Highschool\"\r\n                                                                                        value={getSchoolCode(FIELDS.HIGHSCHOOL, reduxFormState) ?\r\n                                                                                            <ConvertCode\r\n                                                                                                isHS={true}\r\n                                                                                                code={getSchoolCode(FIELDS.HIGHSCHOOL, reduxFormState)}\r\n                                                                                            />\r\n                                                                                            : getReduxField(compositeFieldname(\r\n                                                                                                FIELDS.HIGHSCHOOL, AnswerTypeHighschoolProps.UNLISTED_NAME), reduxFormState)\r\n                                                                                        }\r\n                                                                                    />\r\n                                                                                    </div>\r\n                                                                                }\r\n                                                                                <h5 className=\"heading heading--h5\">Type: {hst.DeliveryType.value}</h5>\r\n                                                                                <ul className=\"list\"\r\n                                                                                    style={{ color: hst.ReviewStatus.value === 'COMPLETE' || hst.ReviewStatus.value === 'PEND_OSAC' || hst.ReviewStatus.value === 'NA' ? 'black' : '#da3754' }}>\r\n                                                                                    <li className=\"li\"\r\n                                                                                        dangerouslySetInnerHTML={{ __html: hst.ReviewStatusDescription.value }}></li>\r\n                                                                                    {hst.ReviewInstructions.value !== null && hst.ReviewInstructions.value !== '' &&\r\n                                                                                        <li className=\"li\"\r\n                                                                                            dangerouslySetInnerHTML={{ __html: hst.ReviewInstructions.value }}></li>\r\n                                                                                    }\r\n                                                                                </ul>\r\n\r\n                                                                            </div>\r\n                                                                        </FieldSlot>\r\n                                                                    </FieldRow>\r\n                                                                </FieldSection>\r\n                                                            ))}\r\n                                                    </div>\r\n                                                </div>\r\n                                            </FormSection>\r\n                                        ) : (\r\n                                            <EditTranscripts\r\n                                                displayInstructions={<TranscriptInstructions section={stageThree} requirements={transcriptRequirements} />}\r\n                                                section={stageThree}\r\n                                                transcriptRequirements={transcriptRequirements}\r\n                                                schStatus={schStatus}\r\n                                                trascriptEndDate={schDeadlines.TrascriptEndDate}\r\n                                                onChange={() =>\r\n                                                    toggleSection({ ...showField, transcripts: false })\r\n                                                }\r\n                                                onCancel={() =>\r\n                                                    handleCancel({ ...showField, transcripts: false })\r\n                                                }\r\n                                            />\r\n                                        )}\r\n                                    </div>\r\n                                    <div style={{ border: '1px solid grey', padding: '1rem', marginTop: '1rem' }}>\r\n                                        <div style={{ 'fontWeight': 'bold', fontSize: '2rem' }}>\r\n                                            Section 4\r\n                                            <SectionStateIcon section={stageFour} />\r\n                                        </div>\r\n                                        {!showField.activities ? (\r\n                                            <FormSection\r\n                                                title=\"Activities\"\r\n                                                isEditable={false}\r\n                                                onEditClick={() =>\r\n                                                    setShowField({ ...showField, activities: true })\r\n                                                }\r\n                                            >\r\n                                                <div name=\"ActivitiesForm\" className=\"activities\">\r\n                                                    <FieldSection\r\n                                                        title=\"School Activities\"\r\n                                                        subtitle={activityBlurb.school}\r\n                                                        withGrid={false}\r\n                                                    >\r\n                                                        {getReduxField(FIELDS.HAS_NO_SCHOOL_ACTIVITIES) ?\r\n                                                            <div style={{ fontWeight: 'bold' }}>I have no school activites</div>\r\n                                                            :\r\n                                                            <ReadOnlyActivityPicker\r\n                                                                activities={formState.fields[FIELDS.ACTIVITY_SCHOOL]}\r\n                                                            />\r\n                                                        }\r\n                                                    </FieldSection>\r\n\r\n                                                    <FieldSection\r\n                                                        title=\"Volunteer Activities\"\r\n                                                        subtitle={activityBlurb.volunteer}\r\n                                                        withGrid={false}\r\n                                                    >\r\n                                                        {getReduxField(FIELDS.HAS_NO_VOLUNTEER_ACTIVITIES) ?\r\n                                                            <div style={{ fontWeight: 'bold' }}>I have no volunteer activites</div>\r\n                                                            :\r\n                                                            <ReadOnlyActivityPicker\r\n                                                                activities={formState.fields[FIELDS.ACTIVITY_VOLUNTEER]}\r\n                                                            />\r\n                                                        }\r\n                                                    </FieldSection>\r\n\r\n                                                    <FieldSection\r\n                                                        title=\"Paid Work Activities\"\r\n                                                        subtitle={activityBlurb.work}\r\n                                                        withGrid={false}\r\n                                                    >\r\n                                                        {getReduxField(FIELDS.HAS_NO_WORK_ACTIVITIES) ?\r\n                                                            <div style={{ fontWeight: 'bold' }}>I have no work activites</div>\r\n                                                            :\r\n                                                            <ReadOnlyActivityPicker\r\n                                                                activities={formState.fields[FIELDS.ACTIVITY_WORK]}\r\n                                                            />\r\n                                                        }\r\n                                                    </FieldSection>\r\n                                                </div>\r\n                                            </FormSection>\r\n                                        ) : (\r\n                                            <EditActivities\r\n                                                section={stageFour}\r\n                                                onChange={() =>\r\n                                                    toggleSection({ ...showField, activities: false })\r\n                                                }\r\n                                                onCancel={() =>\r\n                                                    handleCancel({ ...showField, activities: false })\r\n                                                }\r\n                                                year={activeYear}\r\n                                            />\r\n                                        )}\r\n                                    </div>\r\n                                    <div style={{ border: '1px solid grey', padding: '1rem', marginTop: '1rem' }}>\r\n                                        <div style={{ 'fontWeight': 'bold', fontSize: '2rem' }}>\r\n                                            Section 5\r\n                                            <SectionStateIcon section={stageFive} />\r\n                                        </div>\r\n                                        {!showField.personalStatements ? (\r\n                                            <FormSection\r\n                                                title=\"Personal Statements\"\r\n                                                isEditable={false}\r\n                                                onEditClick={() =>\r\n                                                    setShowField({ ...showField, personalStatements: true })\r\n                                                }\r\n                                            >\r\n                                                <ReadOnlyField\r\n                                                    name=\"What are your specific educational plans and career goals and why? What motivates you to achieve them?\"\r\n                                                    value={get(FIELDS.ESSAY_1, 120)}\r\n                                                />\r\n\r\n                                                <ReadOnlyField\r\n                                                    name=\"What have you done for your family, school, or community that you care about the most and why?\"\r\n                                                    value={get(FIELDS.ESSAY_2, 120)}\r\n                                                />\r\n\r\n                                                <ReadOnlyField\r\n                                                    name=\"Describe a personal accomplishment, impactful change, or experience that has occurred in your life. What skills and strengths were needed to respond, and what did you learn about yourself?\"\r\n                                                    value={get(FIELDS.ESSAY_3, 120)}\r\n                                                />\r\n\r\n                                                <ReadOnlyField\r\n                                                    name={getField(FIELDS.ESSAY_4).question}\r\n                                                    value={get(FIELDS.ESSAY_4, 120)}\r\n                                                />\r\n                                            </FormSection>\r\n                                        ) : (\r\n                                            <EditPersonalStatements\r\n                                                section={stageFive}\r\n                                                onChange={() =>\r\n                                                    toggleSection({ ...showField, personalStatements: false })\r\n                                                }\r\n                                                onCancel={() =>\r\n                                                    handleCancel({ ...showField, personalStatements: false })\r\n                                                }\r\n                                            />\r\n                                        )}\r\n                                    </div>\r\n                                </div>\r\n                            }\r\n                            <div className=\"grant-action-buttons\" style={{ marginTop: '1rem' }}>\r\n                                <ApplicationSubmitButton app={app} sections={{ isComplete: !disableSubmit && startedScholarships.length > 0 }} style={{ width: '135px' }} onClick={actualSubmit} />\r\n                            </div>\r\n                        </div>\r\n                    )}\r\n                </div>\r\n            </PortalView>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\nexport default AdditionalScholarshipInfo;\r\n","import ProgramInfo from \"../../utils/dtos/ProgramInfo\";\r\nimport PrintIcon from \"../PrintIcon\";\r\n\r\n/**\r\n * \r\n * @param {ProgramInfo} param0.program program info DTO\r\n * @param {number} param0.year specific year being addressed\r\n * @returns {Component}\r\n */\r\nfunction AppHeader({ program, year }) {\r\n\r\n    const programInfo = new ProgramInfo(program);\r\n\r\n    return (\r\n        <div className=\"page-intro\">\r\n            <div className=\"wrapper\">\r\n                <div className=\"page-intro__layout\">\r\n                    <div className=\"page-intro__content rhythm\">\r\n                        <h1 className=\"heading heading--h1\">\r\n                            {programInfo.name}\r\n                            <PrintIcon /> \r\n                        </h1>\r\n                        <p className=\"heading\"> {programInfo.description}</p>\r\n                        <h2 className=\"heading heading--h2\">{year} – {year + 1}</h2>\r\n                        <a href=\"/dashboard\">Return to Dashboard</a>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default AppHeader;","import CheckCircleIcon from \"@material-ui/icons/CheckCircle\";\r\nimport RadioButtonCheckedIcon from \"@material-ui/icons/RadioButtonChecked\";\r\n\r\n/**\r\n * standard label & icon for indicating progress on a multi-step process\r\n * @param {*} param0 \r\n * @returns \r\n */\r\nfunction ProgressBarLabel({ title, state, sectionRef }) {\r\n\r\n    const jumpToSection = () => {\r\n        if (!sectionRef)\r\n            return;\r\n        if (!sectionRef.current)\r\n            return;\r\n        sectionRef.current.scrollIntoView();\r\n    };\r\n\r\n    return (\r\n        <div className=\"progress-bar__label\" onClick={jumpToSection} style={{ cursor: sectionRef == null ? \"auto\" : \"pointer\" }}>\r\n            <div className=\"progress-bar__icon\">\r\n                {(state === \"complete\" && (\r\n                    <CheckCircleIcon style={{ color: \"#429D5B\" }} />\r\n                )) ||\r\n                    (state === \"inProgress\" && (\r\n                        <RadioButtonCheckedIcon style={{ color: \"#E59B6F\" }} />\r\n                    )) ||\r\n                    (state === \"incomplete\" && (\r\n                        <CheckCircleIcon style={{ color: \"#D8D8D8\" }} />\r\n                    ))}\r\n            </div>\r\n            <span>{title}</span>\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default ProgressBarLabel;","\r\n/**\r\n * interpret an answer option as provided by the API\r\n */\r\nclass AnswerOption {\r\n\r\n    /**\r\n     * Wrapping constructor\r\n     * @param {*} data \r\n     */\r\n    constructor(data){\r\n        this._data = data;\r\n    }\r\n\r\n    \r\n    get value(){\r\n        return this._data.Value;\r\n    }\r\n\r\n    get name(){\r\n        return this._data.Name;\r\n    }\r\n\r\n    get disabled(){\r\n        return !this._data.Enabled;\r\n    }\r\n\r\n    /**\r\n     * get a specific option property\r\n     * @param {String} category name of the note category\r\n     * @return {String}\r\n     */\r\n    getNote(category){\r\n        if (category == null)\r\n            return null;\r\n\r\n        for (let note of this._data.Notes)\r\n        {\r\n            if (note.Category.toUpperCase() == category.toUpperCase())\r\n            {\r\n                return note.Description;\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n}\r\n\r\nexport default AnswerOption","import CodeDropdown from './CodeDropdown';\r\n\r\nexport const HIGHSCHOOL_CODE_TYPES = {\r\n    PUBLIC_PRIVATE_TRADITIONAL: \"TRD\",\r\n    COMMUNITY_COLLEGE_HS: \"CC\",\r\n    ALTERNATIVE: \"ALT\",\r\n    HOME_SCHOOL: \"HMSCH\",\r\n    GED: \"GED\",\r\n    GED_AND_HOME_SCHOOL: \"GEDHM\",\r\n    NOT_STANDARD: \"UNSTD\"\r\n}\r\n\r\nexport default ({ listItems, ...props}) => <CodeDropdown codeType=\"HSTYPE\" {...props}/>\r\n\r\n\r\n/*\r\nFIELDS.HIGHSCHOOL_TYPE\r\n[\r\n  {\r\n    \"Code\": \"TRD\",\r\n    \"CodeType\": \"HSTYPE\",\r\n    \"Message\": \"Public/Private Traditional high school\",\r\n    \"SortOrder\": 1\r\n  },\r\n  {\r\n    \"Code\": \"CC\",\r\n    \"CodeType\": \"HSTYPE\",\r\n    \"Message\": \"Community college high school\",\r\n    \"SortOrder\": 2\r\n  },\r\n  {\r\n    \"Code\": \"ALT\",\r\n    \"CodeType\": \"HSTYPE\",\r\n    \"Message\": \"Alternative high school\",\r\n    \"SortOrder\": 3\r\n  },\r\n  {\r\n    \"Code\": \"HMSCH\",\r\n    \"CodeType\": \"HSTYPE\",\r\n    \"Message\": \"Home school\",\r\n    \"SortOrder\": 4\r\n  },\r\n  {\r\n    \"Code\": \"GED\",\r\n    \"CodeType\": \"HSTYPE\",\r\n    \"Message\": \"GED\",\r\n    \"SortOrder\": 5\r\n  },\r\n  {\r\n    \"Code\": \"GEDHM\",\r\n    \"CodeType\": \"HSTYPE\",\r\n    \"Message\": \"GED<sup style={{ verticalAlign: \"super\", fontSize: \".9rem\"}}>&reg;</sup> and home school\",\r\n    \"SortOrder\": 6\r\n  },\r\n  {\r\n    \"Code\": \"UNSTD\",\r\n    \"CodeType\": \"HSTYPE\",\r\n    \"Message\": \"None of the standard choices\",\r\n    \"SortOrder\": 7\r\n  }\r\n]\r\n*/\r\n","import { useState, Fragment } from \"react\";\r\nimport Radio from '@material-ui/core/Radio';\r\nimport RadioGroup from '@material-ui/core/RadioGroup';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport InputDecorator from '../../components/InputDecorator';\r\nimport React from 'react';\r\nimport FormLabel from '@material-ui/core/FormLabel';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport { get } from 'lodash';\r\n\r\n/**\r\n *\r\n * @param {*} options Option set from API\r\n * @param {String} name field name\r\n * @param {*} answer Answer description from api\r\n * @returns\r\n */\r\n function CohortTable({ name, listItems, label, description, control, disabled= false, style, ...props}) {\r\n\r\n  const [selected, setSelected] = useState(\"\");\r\n  const handleChange = (event) => {\r\n    setSelected(event.target.value);\r\n  };\r\n\r\n  const getNoteFromOption = (option, category) => {\r\n    if (!option || !option.Notes) {\r\n      return null;\r\n    }\r\n    const notes = option.Notes\r\n    const note = notes.find(note => note.Category === category)\r\n    return note?.Description\r\n  }\r\n\r\n  const methods = useFormContext({ mode: 'onBlur' });\r\n  const errors = methods?.errors\r\n  let error = null;\r\n  if (errors) {\r\n    error = get(errors, name)\r\n  }\r\n  return (\r\n    <FormControl component=\"fieldset\" className=\"radio-group\">     \r\n      { error && <div style={{ color: 'red'}}>* Selection is required</div>}      \r\n      <RadioGroup aria-label={description} {...props}>\r\n        <table>\r\n          <thead>\r\n            <tr>\r\n              <th>Intended Starting Term</th>\r\n              <th>Application Deadline</th>\r\n              <th>Notes</th>\r\n            </tr>\r\n          </thead>\r\n          {listItems.map((item,i) =>\r\n            <Fragment key={`${label}-option-${i}`}>\r\n              <tr>\r\n                <td>\r\n                  <FormControlLabel\r\n                    value={item.value}\r\n                    control={\r\n                      <Radio\r\n                        color=\"primary\"\r\n                      />\r\n                    }\r\n                    label={item.name}\r\n                    disabled={item.disabled}\r\n                  />\r\n                </td>\r\n                <td style={item.disabled ? { opacity: .4} : {}}>\r\n                  {item.getNote(\"deadline\")}\r\n                </td>\r\n                <td style={item.disabled ? { opacity: .4} : {}}>\r\n                  {item.getNote(\"LegacyStatusMessage\")}\r\n                </td>\r\n              </tr>\r\n            </Fragment>\r\n            )}\r\n        </table>\r\n        \r\n      </RadioGroup>\r\n\r\n    </FormControl>\r\n  );\r\n};\r\n\r\nexport default InputDecorator(CohortTable);\r\n","import { Page, Text, View, Image, Document, StyleSheet, Font, PDFDownloadLink } from '@react-pdf/renderer';\r\nimport { useEffect, useState } from 'react';\r\nimport { FIELDS } from \"../../store/form/fields\";\r\nimport apiClient from '../../utils/API';\r\nimport AnswerSet from '../../utils/dtos/AnswerSet';\r\nimport FormSerializer from '../../store/form/serializer';\r\nimport moment from 'moment';\r\n\r\n/**\r\n * GPA Verification PDF\r\n * \r\n * @returns {Component}\r\n */\r\nfunction GpaVerificationDocument({ app, answers, school }) {\r\n\r\n    const answerSet = new AnswerSet(answers);\r\n\r\n    function getResponse(fieldKey) {\r\n        const questionKey = FormSerializer.getQuestionKey(fieldKey);\r\n        const answer = answerSet.get(questionKey);\r\n        if (!answer)\r\n            return null;\r\n\r\n        if (answer.AnswerType == 'HighSchool')\r\n            return answer;\r\n\r\n        return answer.Response\r\n    }\r\n\r\n    function formatDate(date, formatString = 'M/D/YYYY') {\r\n        return moment(date).format(formatString);\r\n    }\r\n\r\n    function formatPhone(number){\r\n        if (!number || number === '')\r\n            return '          ';\r\n\r\n        var cleaned = ('' + number).replace(/\\D/g, '');\r\n        var match = cleaned.match(/^(\\d{3})(\\d{3})(\\d{4})$/);\r\n        if (match) {\r\n            return '(' + match[1] + ') ' + match[2] + '-' + match[3];\r\n        }\r\n        return number;\r\n    }\r\n\r\n    Font.register({\r\n        family: 'Open Sans',\r\n        fonts: [\r\n            { src: 'https://cdn.jsdelivr.net/npm/open-sans-all@0.1.3/fonts/open-sans-regular.ttf' },\r\n            { src: 'https://cdn.jsdelivr.net/npm/open-sans-all@0.1.3/fonts/open-sans-600.ttf', fontWeight: 600 },\r\n            { src: 'https://cdn.jsdelivr.net/npm/open-sans-all@0.1.3/fonts/open-sans-800.ttf', fontWeight: 800 }\r\n        ]\r\n    });\r\n\r\n    const styles = StyleSheet.create({\r\n        page: {\r\n            backgroundColor: '#FFFFFF',\r\n            marginLeft: 20,\r\n            marginRight: 30,\r\n            fontFamily: 'Open Sans',\r\n            fontSize: 9\r\n        },\r\n        section: {\r\n            marginTop: 10,\r\n            marginBottom: 0,\r\n            marginLeft: 20,\r\n            marginRight: 30,\r\n            padding: 0,\r\n        },\r\n        header: {\r\n            width: '95%',\r\n            height: 'auto'\r\n        },\r\n        mainHeader: {\r\n            textAlign: 'center',\r\n            fontSize: 12,\r\n            marginBottom: 10,\r\n            marginTop: 10\r\n        },\r\n        sectionHeader: {\r\n            fontWeight: 800,\r\n            width: '95%',\r\n            fontSize: 9,\r\n            marginBottom: 10\r\n        },\r\n        paragraph: {\r\n            width: '95%',\r\n            fontSize: 9,\r\n            marginBottom: 10\r\n        },\r\n        listItem: {\r\n            width: '85%',\r\n            fontSize: 9,\r\n            marginBottom: 10,\r\n            marginLeft: 20\r\n        },\r\n        bold: {\r\n            fontWeight: 800\r\n        },\r\n        underlined: {\r\n            textDecoration: 'underline',\r\n            marginLeft: 10,\r\n            marginRight: 10\r\n        },\r\n        footer:{\r\n            width: '85%',\r\n            fontSize: 8,\r\n            marginTop: 15\r\n        }\r\n    });\r\n\r\n\r\n\r\n    return (\r\n        <Document>\r\n            <Page size=\"A4\" style={styles.page}>\r\n                <View style={styles.section}>\r\n                    <Image src={'/pdf_header.png'} style={styles.header}></Image>\r\n                </View>\r\n                <View>\r\n                    <Text style={styles.mainHeader} >\r\n                        OREGON PROMISE APPLICATION HIGH SCHOOL GPA VERIFICATION REQUEST\r\n                    </Text>\r\n                    <Text style={{ ...styles.sectionHeader, textAlign: 'center' }}>\r\n                        Deadline: {formatDate(app?.Deadline)}*\r\n                    </Text>\r\n                    <Text style={styles.paragraph}>\r\n                        To be eligible for Oregon Promise you must verify that your cumulative, unweighted high school GPA is at least 2.00. GPA Verification is\r\n                        completed by your high school registrar using our secure Partner Portal. If your high school chooses to not participate in GPA Verification,\r\n                        you will need to submit a transcript to OSAC via your Student Portal.\r\n                    </Text>\r\n                </View>\r\n                <View>\r\n                    <Text style={styles.paragraph}>\r\n                        <Text style={styles.bold}>High School Name:&nbsp;</Text>\r\n                        <Text style={styles.underlined}>&nbsp;&nbsp;&nbsp;{school.Name}&nbsp;&nbsp;&nbsp;</Text>\r\n\r\n                        <Text>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class of&nbsp;&nbsp;</Text>\r\n                        <Text  style={styles.underlined}>{formatDate(getResponse(FIELDS.HIGHSCHOOL_GRAD_DATE), 'YYYY')}</Text>\r\n\r\n                        <Text style={styles.bold}>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application #</Text>\r\n                        <Text style={styles.underlined}>{app?.AppId}</Text>\r\n                    </Text>\r\n                    <Text style={styles.paragraph}>\r\n                        <Text style={styles.bold}>GPA Verification For:&nbsp;</Text>\r\n                        <Text style={styles.underlined}>\r\n                            &nbsp;&nbsp;&nbsp;{getResponse(FIELDS.FIRST_NAME)}\r\n                            &nbsp;&nbsp;&nbsp;{getResponse(FIELDS.MIDDLE_INITIALS)}\r\n                            &nbsp;&nbsp;&nbsp;{getResponse(FIELDS.LAST_NAME)}\r\n                            &nbsp;&nbsp;&nbsp;\r\n                        </Text>\r\n                        <Text style={styles.bold}>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Birthdate: &nbsp;</Text>\r\n                        <Text style={styles.underlined}>\r\n                            &nbsp;&nbsp;&nbsp;{formatDate(getResponse(FIELDS.BIRTHDATE))}&nbsp;&nbsp;\r\n                        </Text>\r\n                    </Text>\r\n                    <Text style={styles.paragraph}>\r\n                        <Text style={styles.bold}>SSID (Student ID #):&nbsp;</Text>\r\n                        <Text style={styles.underlined}>_____________________________</Text>\r\n\r\n                    </Text>\r\n                    <Text style={styles.paragraph}>\r\n                        <Text style={styles.bold}>Student's Primary Phone:&nbsp;</Text>\r\n                        <Text style={styles.underlined}>&nbsp;&nbsp;{formatPhone(getResponse(FIELDS.HOME_PHONE))}&nbsp;&nbsp;</Text>\r\n                        <Text style={styles.bold}>&nbsp;&nbsp;&nbsp;&nbsp;Student's Alternate Phone:&nbsp;</Text>\r\n                        <Text style={styles.underlined}>&nbsp;&nbsp;{formatPhone(getResponse(FIELDS.ALTERNATE_PHONE))}&nbsp;&nbsp;</Text>\r\n                    </Text>\r\n                    <Text style={styles.paragraph}>\r\n                        <Text style={styles.bold}>Student's Signature </Text>\r\n                        <Text style={styles.underlined}>_____________________________</Text>\r\n                    </Text>\r\n                    <Text style={styles.paragraph}>\r\n                        <Text style={styles.bold}>Registrar's or Transcript Processor's Signature:&nbsp;</Text>\r\n                        <Text style={styles.underlined}>________________________________&nbsp;&nbsp;&nbsp;&nbsp;</Text>\r\n                        <Text style={styles.bold}>&nbsp;&nbsp;&nbsp;Date Received:&nbsp;</Text>\r\n                        <Text style={styles.underlined}>___________</Text>\r\n                    </Text>\r\n                </View>\r\n                <View>\r\n                    <Text style={styles.paragraph}>\r\n                        The student is responsible for ensuring the GPA Verification is transmitted to OSAC by the deadline above. OSAC does not need this form returned.\r\n                        This form is for the student to give to their high school registrar as a reminder for them verify the student's GPA online.\r\n                    </Text>\r\n                    <Text style={styles.sectionHeader} >Notes to the Student</Text>\r\n                    <Text style={styles.listItem} >\r\n                        1. It is your responsibility to ensure GPA Verification is submitted by your high school. You always have the option to go back into your application to submit\r\n                        a transcript instead of GPA Verification, in order to meet the deadline.\r\n                    </Text>\r\n                    <Text style={styles.listItem} >\r\n                        2. Sign this form and give it to the Registrar or staff person at your school who can provide your GPA verification in time to meet the OSAC deadline. Make a\r\n                        copy for your records and be sure your Registrar or Transcript Processor signs and dates the form. (You may need this if your application is marked incomplete\r\n                        because the transcript did not arrive on time.)\r\n                    </Text>\r\n                    <Text style={styles.listItem} >\r\n                        3. OSAC will update your verification status after we receive the online GPA Verification from your high school.\r\n                    </Text>\r\n                    <Text style={styles.listItem} >\r\n                        4. Log in to your Student Dashboard at https://app.oregonstudentaid.gov/ to check that your verification arrived at OSAC, if the verification is correct, or if there is a problem.\r\n                    </Text>\r\n                    <Text style={styles.listItem} >\r\n                        5. OSAC will not review your GPA verification until you submit your Oregon Promise application.\r\n                    </Text>\r\n\r\n                    <Text style={styles.sectionHeader} >Notes to the High School Registrar/Transcript Processor</Text>\r\n                    <Text style={styles.paragraph}>OSAC offers several methods to deliver the GPA verification to OSAC:</Text>\r\n                    <Text style={styles.listItem} >\r\n                        1. Use OSAC's Partner Portal, a secure portal for transmitting student data for scholarship and grant eligibility, to quickly and easily submit the\r\n                        student's GPA Verification. No physical transcript is required for this method. For more information, see the documentation at\r\n                        https://partners.oregonstudentaid.gov/. Or;\r\n                    </Text>\r\n                    <Text style={styles.listItem} >\r\n                        2. Provide a hard copy/electronic transcript to the student for them to upload into their Oregon Promise application.\r\n                    </Text>\r\n                </View>\r\n                <View >\r\n                    <Text style={styles.footer} >\r\n                        *In the event that an Oregon Promise deadline falls on a weekend or holiday, the deadline will automatically be extended to 5:00 p.m. (PST) of the following business day.\r\n                    </Text>                    \r\n                </View>\r\n            </Page>\r\n        </Document>\r\n    );\r\n}\r\n\r\n/**\r\n * \r\n * @param {*} param0 \r\n * @returns {Component}\r\n */\r\nfunction GpaVerificationFormLink({ app }) {\r\n\r\n    const fieldKeys = [\r\n        FIELDS.HIGHSCHOOL,\r\n        FIELDS.HIGHSCHOOL_GRAD_DATE,\r\n        FIELDS.FIRST_NAME,\r\n        FIELDS.MIDDLE_INITIALS,\r\n        FIELDS.LAST_NAME,\r\n        FIELDS.BIRTHDATE,\r\n        FIELDS.HOME_PHONE,\r\n        FIELDS.ALTERNATE_PHONE,\r\n    ];\r\n\r\n    const [answerData, setAnswerData] = useState(null);\r\n    const [highSchool, setHighSchool] = useState(null);\r\n\r\n    useEffect(async () => {\r\n        if (!app)\r\n            return;\r\n        const questionKeys = fieldKeys.map(x => FormSerializer.getQuestionKey(x));\r\n        const answers = await apiClient.get(\"/answer\", { questionKeys: questionKeys, year: app.Year });        \r\n        const answerSet = new AnswerSet(answers);\r\n        const schoolCode = answerSet.get('HighSchool').SchoolCode;\r\n        const schoolInfo = await apiClient.getHighSchool(schoolCode);\r\n\r\n        setAnswerData(answers);\r\n        setHighSchool(schoolInfo);\r\n    }, [app]);\r\n\r\n    if (!answerData || !highSchool)\r\n        return <span>GPA Verification Reminder Form</span>;\r\n\r\n    return (\r\n        <>\r\n            &nbsp;\r\n            <PDFDownloadLink document={<GpaVerificationDocument app={app} answers={answerData} school={highSchool}/>} fileName=\"gpa_verification_form.pdf\">\r\n                {({ blob, url, loading, error }) => (loading ? 'Generating PDF...' : 'GPA Verification Reminder Form')}\r\n            </PDFDownloadLink>\r\n            &nbsp;\r\n        </>\r\n\r\n    );\r\n}\r\n\r\nexport default GpaVerificationFormLink;","import React, { useState, useEffect } from 'react';\r\nimport { useSelector } from \"react-redux\";\r\n\r\nexport function useGetTranscriptInstructions(props) {\r\n\r\n    // Pass programCode to get program instructions.\r\n    const { programCode } = props;\r\n    const highschoolType= useSelector((state) => state.form.fields?.HIGHSCHOOL_TYPE?.value);\r\n    const [transcriptInstructions, setTranscriptInstructions] = useState(null);\r\n\r\n    const programLinks = {\r\n        ORP: 'https://oregonstudentaid.gov/grants/oregon-promise-grant/transcripts/',\r\n    }\r\n\r\n    // TODO:\r\n    //      1. Add instructions for other programs if needed.\r\n    //      2. Possibly make the messages / links dynamic.\r\n    const instuctions = {\r\n        ORP: {\r\n            TRD: (\r\n                <div style={{ paddingBottom:'20px' }}>\r\n                    <div style={{ paddingBottom:'10px' }}>\r\n                        Please submit a complete transcript with grades 9 through first semester/second quarter/first trimester (depending on school calendar) of your senior year.\r\n                        These transcripts are typically available in January/February. \r\n                    </div>\r\n                    <div>\r\n                        For more information, please view our website <a href={programLinks.ORP}>{programLinks.ORP}</a>.\r\n                    </div>\r\n                </div>),\r\n            GED: (\r\n                <div style={{ paddingBottom:'20px' }}>\r\n                    <div style={{ paddingBottom:'10px' }}>\r\n                        Please submit your official GED test transcript. This is a one-page document with student information at the top and test scores at the bottom.\r\n                    </div>\r\n                    <div>\r\n                        For more information, please view our website <a href={programLinks.ORP}>{programLinks.ORP}</a>.\r\n                    </div>\r\n                </div>),\r\n            HMSCH: (\r\n                <div style={{ paddingBottom:'20px' }}>\r\n                    <div style={{ paddingBottom:'10px' }}>\r\n                        Homeschool students must submit the following three documents:\r\n                    </div>\r\n                    <ul style={{ paddingBottom:'10px', paddingLeft:'30px' }}>\r\n                        <li>1. A copy of the Confirmation of Enrollment letter on file at your local Educational Service District (ESD) (also called \"Letter of Intent to homeschool\"). A DMV receipt or record will NOT suffice.</li>\r\n                        <li>2. A copy of the results of a tenth-grade standardized achievement test, required for all homeschool students who have registered with their ESD.</li>\r\n                        <li>3. A high school transcript that includes grade 9 through at least first semester/second quarter/first trimester of grade 12. Transcript must also have the student's cumulative, unweighted GPA</li>\r\n                    </ul>\r\n                    For more information, please view our website <a href={programLinks.ORP}>{programLinks.ORP}</a>.\r\n                </div>),\r\n            CC: (\r\n                <div style={{ paddingBottom:'20px' }}>\r\n                    <div style={{ paddingBottom:'10px' }}>\r\n                        Please submit a complete transcript with grades 9 through first semester/second quarter/first trimester (depending on school calendar) of your senior year from your high school completion program\r\n                        (not a college transcript). These transcripts are typically available in January/February.  \r\n                    </div>\r\n                    <div>\r\n                        For more information, please view our website <a href={programLinks.ORP}>{programLinks.ORP}</a>.\r\n                    </div>\r\n                </div>)\r\n            }   \r\n    }\r\n\r\n    function getTranscriptInstructions(){\r\n        let transcriptType;\r\n\r\n        if(programCode?.includes(\"ORP\")){\r\n            if(highschoolType?.includes(\"GEDHM\"))\r\n            {\r\n                transcriptType = \"GED\"\r\n            }\r\n            else if(highschoolType?.includes(\"ALT\"))\r\n            {\r\n                transcriptType = \"TRD\"\r\n            }\r\n            else{\r\n                transcriptType = highschoolType\r\n            }\r\n        }\r\n\r\n        setTranscriptInstructions(instuctions[programCode][transcriptType]);\r\n    }\r\n\r\n    useEffect(() => {\r\n        getTranscriptInstructions();\r\n    }, [highschoolType, programCode]);\r\n\r\n    return { transcriptInstructions };\r\n}\r\n","import { useSelector } from \"react-redux\";\r\nimport React, { useState, useEffect } from \"react\";\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport Button from \"../../components/Button\";\r\nimport AppHeader from \"../../components/application/AppHeader\";\r\nimport PortalView from \"./../../components/Global/PortalView\";\r\nimport ProgressBar from \"../../components/progress/ProgressBar\";\r\nimport ProgressBarLabel from \"../../components/progress/ProgressBarLabel\";\r\nimport CompleteSubmission from \"../../components/CompleteSubmission\";\r\nimport { Alert, AlertTitle } from '@material-ui/lab';\r\nimport { Checkbox } from \"@material-ui/core\";\r\nimport { FIELDS, TRANSCRIPT_QUESTIONS } from \"../../store/form/fields\";\r\nimport { goBack } from \"../../utils\";\r\nimport apiClient from \"../../utils/API\";\r\nimport AnswerOption from \"../../utils/dtos/AnswerOption\"\r\nimport ProgramInfo from \"../../utils/dtos/ProgramInfo\"\r\nimport { useHistory } from \"react-router\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { open } from \"../../store/snack/actions\";\r\nimport { HIGHSCHOOL_CODE_TYPES } from \"./../../components/DataDriven/HighschoolTypeDropdown\"\r\nimport { FieldSection, FieldSlot, FieldRow } from \"../../components/Forms/FieldSection\";\r\nimport { get } from 'lodash'\r\nimport FormSerializer from \"../../store/form/serializer\";\r\nimport moment from \"moment\";\r\nimport _get from \"lodash.get\";\r\nimport CohortTable from \"./CohortTable\";\r\nimport ApplicationSubmitButton from \"../../components/Utility/ApplicationSubmitButton\";\r\nimport ApplicationInfo from \"../../utils/dtos/ApplicationInfo\";\r\nimport SectionFormHelper from \"../../utils/helper/SectionHelper\";\r\nimport DecimalAnswer from \"../../components/answer/DecimalAnswer\";\r\nimport TranscriptQuestion from \"../../components/answer/question/TranscriptQuestion\";\r\nimport GpaVerificationFormLink from \"./GpaVerificationDocument\";\r\nimport { useRef } from \"react\";\r\nimport SectionStateIcon from \"../../components/progress/SectionStateIcon\";\r\nimport FormSection from \"../../components/FormSection\";\r\nimport { useGetTranscriptInstructions } from \"../../components/TranscriptInstructions\";\r\n\r\n\r\nconst PROGRAM_CODE = \"ORP\";\r\n\r\n/**\r\n * Oregon Promise application\r\n * @returns {Component}\r\n */\r\nfunction OregonPromise() {\r\n\r\n    const history = useHistory();\r\n    const dispatch = useDispatch();\r\n    const handleCancel = () => {\r\n        goBack({\r\n            history,\r\n            defaultRoute: \"dashboard\",\r\n        });\r\n    };\r\n    const methods = useForm({\r\n        mode: \"onBlur\",\r\n    });\r\n    const { setValue, handleSubmit, watch } = methods;\r\n    const formState = useSelector((state) => state.form);\r\n\r\n    const getReduxField = (fieldKey) => {\r\n        return _get(formState, `fields.${fieldKey}.value`);\r\n    };\r\n\r\n    const sectionGroup = new SectionFormHelper(useState(null), PROGRAM_CODE);\r\n    const cohortSection = sectionGroup.create(useState(null), useRef(), [\r\n        FIELDS.COMM_COLLEGE_START_TERM,\r\n    ], 'Community College Start Term');\r\n    const gpaSection = sectionGroup.create(useState(null), useRef(), [\r\n        FIELDS.HIGHSCHOOL_TYPE,\r\n        FIELDS.PROOF_GPA__UPLOAD,\r\n        FIELDS.PROOF_GPA__MAIL,\r\n        FIELDS.PROOF_GPA__REGISTRAR,\r\n        FIELDS.HIGHSCHOOL_GPA,\r\n        FIELDS.HIGHSCHOOL\r\n    ], 'GPA/Transcripts');\r\n\r\n    const [grantDetails, setGrantDetails] = useState(null);\r\n    const program = new ProgramInfo(grantDetails);\r\n    const year = program.recentSeason?.year;\r\n\r\n    const minimumGpa = program.recentSeason?.getConfiguration(\"MinimumGpa\");\r\n\r\n\r\n    const [cohortOptionsData, setCohortOptions] = useState(null);\r\n    const cohortOptions = cohortOptionsData?.map(x => new AnswerOption(x));\r\n\r\n    const [applicationData, setApplicationData] = useState(null);\r\n    const app = new ApplicationInfo(applicationData);\r\n\r\n    /**\r\n     * pull initial info from API\r\n     */\r\n    useEffect(async () => {\r\n\r\n        const result = await apiClient.getProgram(PROGRAM_CODE);\r\n        setGrantDetails(result);\r\n        const program = new ProgramInfo(result);\r\n        const year = program.recentSeason.year;\r\n\r\n        const [appResult, optionResult, _] = await Promise.all([\r\n            apiClient.getApplication(PROGRAM_CODE, year),\r\n\r\n            apiClient.get(\"/answer/options\", {\r\n                \"lookup.questionKey\": FormSerializer.getQuestionKey(FIELDS.COMM_COLLEGE_START_TERM),\r\n                \"lookup.year\": year\r\n            }),\r\n            sectionGroup.fetchState(year)\r\n        ]);\r\n        setApplicationData(appResult);\r\n        setCohortOptions(optionResult);\r\n\r\n        setDisableLetterGrades(get(formState, `fields.${FIELDS.HIGHSCHOOL_GPA}.value`) == '0.01')\r\n        setNoLetterGrades(!get(formState, `fields.${FIELDS.HIGHSCHOOL_GPA}.value`) == '0.01')\r\n\r\n    }, []);\r\n\r\n\r\n    const watchSemester = watch(FIELDS.COMM_COLLEGE_START_TERM)\r\n    const [selectedDeadline, setSelectedDeadline] = useState(null);\r\n    useEffect(() => {\r\n        if (watchSemester && cohortOptions) {\r\n\r\n            const selectedOption = cohortOptions.find(option => option.value === watchSemester);\r\n            const deadline = selectedOption.getNote(\"deadline\");\r\n            setSelectedDeadline(deadline);\r\n\r\n            // now a quick slight-of-hand to avoid having to load the full application all over\r\n            if (cohortOptions.some(option => option.Deadline === applicationData.Deadline)) {\r\n                //if the applicationData deadline is one of the preset deadline, update it. Otherwise it's probably an extension\r\n                applicationData.Deadline = deadline;\r\n                setApplicationData(applicationData);\r\n            }\r\n        }\r\n    }, [watchSemester, cohortOptionsData])\r\n\r\n    const [disableLetterGrades, setDisableLetterGrades] = useState(false)\r\n    const [noLetterGrades, setNoLetterGrades] = useState(false)\r\n\r\n\r\n    const toggleLetterGrades = () => {\r\n        setDisableLetterGrades(!disableLetterGrades)\r\n    }\r\n\r\n    const [showConfirmation, setShowConfirmation] = useState(false);\r\n\r\n    const onError = (errors, e) => {\r\n        console.log(errors, e);\r\n        dispatch(\r\n            open({\r\n                message: \"There has been a validation error. Please scroll up and look for missing required fields.\",\r\n                severity: \"success\",\r\n            })\r\n        );\r\n    };\r\n\r\n\r\n\r\n    const cohortWatch = watch(FIELDS.COMM_COLLEGE_START_TERM);\r\n    const cohortAnswer = cohortSection.getAnswerByField(FIELDS.COMM_COLLEGE_START_TERM);\r\n\r\n    useEffect(() => {\r\n        if (!cohortWatch)\r\n            return;\r\n        if (cohortAnswer.IsLoading)\r\n            return;\r\n\r\n        if (cohortWatch === cohortAnswer.Response)\r\n            return;\r\n\r\n        const data = { [FIELDS.COMM_COLLEGE_START_TERM]: cohortWatch };\r\n\r\n        cohortSection.saveAnswers(data, dispatch);\r\n\r\n    }, [cohortWatch, cohortAnswer.IsLoading]);\r\n\r\n    /**\r\n     * save all the GPA/transcript changes\r\n     * @param {*} data \r\n     * @param {*} e \r\n     */\r\n    const onSave = async (data) => {\r\n\r\n        if (disableLetterGrades === true) {\r\n            data[FIELDS.HIGHSCHOOL_GPA] = \"0.01\"\r\n        }\r\n\r\n        gpaSection.legacySaveAnswers(data, dispatch);\r\n    };\r\n\r\n\r\n    const [submitLoading, setSubmitLoading] = useState(false);\r\n\r\n    /**\r\n     * submit the Oregon Promise application,\r\n     * \r\n     * includes saving any recent changes as well\r\n     */\r\n    const actualSubmit = async () => {\r\n        const actualSubmission = async (data) => {\r\n            if (disableLetterGrades === true) {\r\n                data[FIELDS.HIGHSCHOOL_GPA] = \"0.01\"\r\n            }\r\n\r\n            await gpaSection.legacySaveAnswers(data, dispatch);\r\n            await apiClient.submitApplication(PROGRAM_CODE, year);\r\n            // console.log(data, e);\r\n            setShowConfirmation(true);\r\n        };\r\n\r\n        try {\r\n            setSubmitLoading(true)\r\n            const execSubmission = handleSubmit(actualSubmission, onError);\r\n            await execSubmission();\r\n            dispatch(\r\n                open({\r\n                    message: \"Submitted Successfully\",\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        } catch (e) {\r\n            console.error(e);\r\n            dispatch(\r\n                open({\r\n                    message: e.message,\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        } finally {\r\n            setSubmitLoading(false);\r\n        }\r\n    };\r\n\r\n\r\n    const highSchoolType = getReduxField(FIELDS.HIGHSCHOOL_TYPE, formState);\r\n\r\n    const [isGed, setIsGed] = useState(false);\r\n    useEffect(() => {\r\n        const gedTypes = [\r\n            HIGHSCHOOL_CODE_TYPES.GED,\r\n            HIGHSCHOOL_CODE_TYPES.GED_AND_HOME_SCHOOL\r\n        ]\r\n\r\n        setIsGed(highSchoolType && gedTypes.includes(highSchoolType));\r\n\r\n    }, [highSchoolType])\r\n\r\n    const HIGHSCHOOl_GPA = get(formState, `fields.${FIELDS.HIGHSCHOOL_GPA}.value`)\r\n    const [gpaWarning, setGpaWarning] = useState(false);\r\n\r\n    useEffect(() => {\r\n        const GPA = parseInt(HIGHSCHOOl_GPA);\r\n        if (isNaN(GPA)) {\r\n            return\r\n        }\r\n        if (GPA < minimumGpa) {\r\n            setGpaWarning(true);\r\n        }\r\n    }, [HIGHSCHOOl_GPA])\r\n\r\n    const watchGpa = watch(FIELDS.HIGHSCHOOL_GPA)\r\n\r\n    useEffect(() => {\r\n        setGpaWarning(watchGpa < minimumGpa)\r\n    }, [watchGpa])\r\n\r\n\r\n    const onEdit = () => {\r\n        setShowConfirmation(false);\r\n        window.location.reload(true); /* 3722/SP236: Calling components aren't keeping application state so, reload the page from server. */\r\n    }\r\n\r\n\r\n    const submitRef = useRef();\r\n\r\n    const hsGpaAnswer = gpaSection.getAnswerByField(FIELDS.HIGHSCHOOL_GPA);\r\n    const pecentComplete = sectionGroup.isComplete && app.isSubmitted ? 100 : Math.round(25 + 74 * sectionGroup.percentComplete / 100 + (app.isSubmitted ? 1 : 0));\r\n\r\n    const { transcriptInstructions } = useGetTranscriptInstructions({ programCode: PROGRAM_CODE });\r\n\r\n    return (\r\n        <FormProvider {...methods} >\r\n            <PortalView>\r\n\r\n                <div name=\"ApplicationsPage\" className=\"oregon-promise\">\r\n                    <AppHeader program={program} year={year} />\r\n                    {showConfirmation ? (\r\n                        <CompleteSubmission onEdit={onEdit} details={{\r\n                            title: program.name,\r\n                            year: year,\r\n                            description: program.description,\r\n                            code: PROGRAM_CODE\r\n                        }} />\r\n                    ) : (\r\n                        <div className=\"wrapper\">\r\n\r\n                            <div className=\"progress-bar rhythm\">\r\n                                <h3 className=\"heading heading--h3\">\r\n                                    Application Progress\r\n                                </h3>\r\n\r\n                                <ProgressBar progress={pecentComplete} />\r\n\r\n                                <div className=\"progress-bar__labels\">\r\n                                    <ProgressBarLabel title=\"Profile\" state=\"complete\" />\r\n                                    {sectionGroup.sections.filter(x => x.title != \"Transcripts\").map((section, index) =>\r\n                                        <ProgressBarLabel key={`section${section.title}${index}`} title={section.title} state={section.completionState} sectionRef={section.ref} />\r\n                                    )}\r\n                                    <ProgressBarLabel title=\"Submit\" state={app.isSubmitted ? \"complete\" : \"incomplete\"} sectionRef={submitRef} />\r\n                                </div>\r\n                            </div>\r\n\r\n\r\n                            {/* Questions */}\r\n                            <div className=\"form-wrapper rhythm\" ref={cohortSection.ref}>\r\n\r\n                                <FormSection title='Community College Start Term' isEditable={true} loading={false}\r\n                                    status={<SectionStateIcon section={cohortSection} />}>\r\n\r\n                                    <div className=\"table-wrapper\">\r\n                                        <CohortTable name={FIELDS.COMM_COLLEGE_START_TERM} listItems={cohortOptions || []} />\r\n                                    </div>\r\n\r\n                                </FormSection>\r\n\r\n                            </div>\r\n\r\n                            <div className=\"form-wrapper rhythm\"\r\n                                ref={gpaSection.ref}>\r\n                                <FormSection title='GPA/Transcripts' isEditable={true} loading={false} status={<SectionStateIcon section={gpaSection} />}>\r\n\r\n                                    <div className=\"grid grid--2col\">\r\n                                        <div className=\"rhythm\">\r\n                                            <h4 className=\"heading heading--h4\">GPA Requirement:</h4>\r\n                                            <p><strong>{parseFloat(minimumGpa).toFixed(1)}</strong> or higher</p>\r\n                                            <em>(cumulative, unweighted GPA)</em>\r\n                                        </div>\r\n\r\n                                        <div className=\"rhythm\">\r\n                                            <h4 className=\"heading heading--h4\">GED<sup style={{ verticalAlign: \"super\", fontSize: \".9rem\" }}>&reg;</sup> Requirement:</h4>\r\n                                            <p><strong>0 - 800</strong></p>\r\n                                            <em>(all four tests)</em>\r\n                                        </div>\r\n                                    </div>\r\n\r\n                                    {/* Input Field - High School Transcript */}\r\n                                    <div className=\"component\" >\r\n\r\n                                        {!isGed &&\r\n                                            <FieldSection title=\"High School GPA (cumulative, unweighted through 7th semester)\">\r\n                                                <FieldRow>\r\n                                                    <FieldSlot>\r\n                                                        {!disableLetterGrades &&\r\n                                                            <DecimalAnswer disabled={disableLetterGrades}\r\n                                                                isRequired={!disableLetterGrades}\r\n                                                                answer={hsGpaAnswer}\r\n                                                                inputLabel='High School GPA' placeholder='High School GPA' />\r\n                                                        }\r\n                                                    </FieldSlot>\r\n                                                    <FieldSlot container alignItems=\"flex-end\">\r\n                                                        <div>\r\n                                                            <Checkbox onChange={toggleLetterGrades}\r\n                                                                value={noLetterGrades}\r\n                                                                disabled={hsGpaAnswer.IsLocked}\r\n                                                            /> <span>My high school did not assign letter grades.</span>\r\n                                                        </div>\r\n                                                    </FieldSlot>\r\n                                                </FieldRow>\r\n                                            </FieldSection>\r\n                                        }\r\n\r\n                                        {gpaWarning === true && selectedDeadline ?\r\n                                            <div>\r\n                                                <Alert severity=\"warning\">\r\n                                                    <AlertTitle>GPA Warning</AlertTitle>\r\n                                                    You must have at least a {parseFloat(minimumGpa).toFixed(1)} GPA by {moment(selectedDeadline).format(\"MMMM D, YYYY h:mm A\")}\r\n                                                </Alert>\r\n                                            </div> : \"\"\r\n                                        }\r\n\r\n                                        <div className=\"component rhythm\">\r\n                                            <h5 className=\"heading heading--h5\">\r\n                                                OSAC needs to check your GPA or verify your HS/GED<sup style={{ verticalAlign: \"super\", fontSize: \".9rem\" }}>&reg;</sup> transcript. Choose one option to complete this.\r\n                                            </h5>\r\n                                        </div>\r\n                                        {transcriptInstructions}\r\n                                        <TranscriptQuestion\r\n                                            section={gpaSection}\r\n                                            transcriptField={TRANSCRIPT_QUESTIONS.PROOF_OF_GPA}\r\n                                            isRequired={true}\r\n                                            verifyOptionLabel=\"I will request my high school registrar to verify my GPA.\"\r\n                                            formLink={\r\n                                                <div>\r\n                                                    You may optionally print this\r\n                                                    <GpaVerificationFormLink app={applicationData} />\r\n                                                    and submit it to your registrar\r\n                                                </div>\r\n                                            }\r\n                                        />\r\n\r\n                                    </div>\r\n\r\n                                </FormSection>\r\n\r\n                            </div> {/* form-wrapper */}\r\n\r\n                            <div ref={submitRef}>\r\n                                <div className=\"grant-action-buttons\" ref={submitRef}>\r\n                                    <Button\r\n                                        name=\"Cancel\"\r\n                                        label=\"Cancel\"\r\n                                        variant=\"text\"\r\n                                        onClick={handleCancel}\r\n                                    />\r\n                                    <Button                                        \r\n                                        name=\"Save\"\r\n                                        label=\"Save\"                                       \r\n                                        type=\"submit\"\r\n                                        onClick={handleSubmit(onSave, onError)}\r\n                                    />\r\n                                    <ApplicationSubmitButton                                   \r\n                                        app={app}\r\n                                        sections={sectionGroup}\r\n                                        onClick={actualSubmit}\r\n                                    />\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    )}\r\n                </div>\r\n            </PortalView>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\n\r\n\r\n\r\nexport default OregonPromise;\r\n","import {FieldRow, FieldSection, FieldSlot} from \"../../components/Forms/FieldSection\";\r\nimport CodeDropdown from \"../../components/DataDriven/CodeDropdown\";\r\nimport {FIELDS} from \"../../store/form/fields\";\r\n\r\nfunction CitizenshipStatus({ onChange, onCancel }) {\r\n  return (\r\n    <FieldSection title=\"Select Your Citizenship Status\">\r\n    <FieldRow>\r\n      <FieldSlot md={8}>\r\n        <CodeDropdown name={FIELDS.CITIZENSHIP_STATUS} label='Citizenship Status' variant='outlined' codeType=\"CITIZEN\" isRequired={true}/>\r\n      </FieldSlot>\r\n    </FieldRow>\r\n  </FieldSection>\r\n  );\r\n}\r\n\r\nexport default CitizenshipStatus;\r\n","import { actions } from \"./../../store\";\r\nimport { FIELDS } from \"../../store/form/fields\";\r\nimport { useSelector } from \"react-redux\";\r\nimport React, { useState, useEffect } from \"react\";\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport Button from \"../../components/Button\";\r\nimport PrintIcon from \"../../components/PrintIcon\";\r\nimport PortalView from \"./../../components/Global/PortalView\";\r\nimport ProgressBar from \"../../components/progress/ProgressBar\";\r\nimport Checkbox from \"../../components/Checkbox\";\r\nimport CheckCircleIcon from \"@material-ui/icons/CheckCircle\";\r\nimport RadioButtonCheckedIcon from \"@material-ui/icons/RadioButtonChecked\";\r\nimport CompleteSubmission from \"../../components/CompleteSubmission\";\r\nimport Card from \"../../components/Card\";\r\nimport CardContent from \"@material-ui/core/CardContent\";\r\nimport { goBack, truthy } from \"../../utils\";\r\nimport ProgramInfo from '../../utils/dtos/ProgramInfo';\r\nimport ApplicationInfo from '../../utils/dtos/ApplicationInfo';\r\nimport ProgramSeason from '../../utils/dtos/ProgramSeason';\r\nimport Input from \"../../components/Input\";\r\nimport StatePicker from \"../../components/DataDriven/StatePicker\";\r\nimport apiClient from \"../../utils/API\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { open } from \"../../store/snack/actions\";\r\nimport { Alert, AlertTitle } from '@material-ui/lab';\r\nimport EditCollegeOfChoice from \"../field-groups/EditCollegeOfChoice\";\r\nimport CitizenshipStatus from \"../field-groups/CitizenshipStatus\";\r\nimport BooleanRadioGroup from \"../../components/BooleanRadioGroup\";\r\nimport ApplicationSubmitButton from \"../../components/Utility/ApplicationSubmitButton\";\r\nimport SectionFormHelper from \"../../utils/helper/SectionHelper\";\r\n\r\n\r\nconst PROGRAM_CODE = \"CH\";\r\n\r\n/**\r\n * \r\n * @returns {Component}\r\n */\r\nfunction Chafee() {\r\n    let { year } = useParams();    \r\n    year = parseInt(year);\r\n\r\n    const dispatch = useDispatch();\r\n\r\n    const sectionGroup = new SectionFormHelper(useState(null));\r\n    const allChafeeSection = sectionGroup.create(useState(null), null, [\r\n        FIELDS.CHAFEE__PRESUMMER_1,\r\n        FIELDS.CHAFEE__FALL_1,\r\n        FIELDS.CHAFEE__WINTER_1,\r\n        FIELDS.CHAFEE__SPRING_1,\r\n        FIELDS.CHAFEE__POSTSUMMER_1,\r\n        FIELDS.CHAFEE__PRESUMMER_2,\r\n        FIELDS.CHAFEE__FALL_2,\r\n        FIELDS.CHAFEE__WINTER_2,\r\n        FIELDS.CHAFEE__SPRING_2,\r\n        FIELDS.CHAFEE__POSTSUMMER_2,\r\n        FIELDS.CHAFEE__FOSTER_DHS,\r\n        FIELDS.CHAFEE__FOSTER_OTHER_STATE,\r\n        FIELDS.CHAFEE__FOSTER_TRIBAL,\r\n        FIELDS.CHAFEE__FOSTER_CARE,\r\n        FIELDS.CHAFEE__ADOPTED,\r\n        FIELDS.CHAFEE__FOSTER_QUALIFIED,\r\n        FIELDS.CHAFEE__OTHER_STATE_ID,\r\n        FIELDS.CHAFEE__TRIBE,\r\n        FIELDS.CHAFEE__ADOPTION_FINALIZED,\r\n        FIELDS.CITIZENSHIP_STATUS,\r\n\r\n        FIELDS.COLLEGE_CHOICE,\r\n        FIELDS.COLLEGE_STANDING\r\n    ]);\r\n\r\n    const [grantDetails, setGrantDetails] = useState(null);\r\n    const [nextSeasonData, setNextSeason] = useState(null);\r\n    const [dhsContactInfo, setDhsContactInfo] = useState(\"\");\r\n\r\n    const grantInfo = new ProgramInfo(grantDetails);\r\n    const currentSeason = grantInfo.getSeason(year);\r\n    const nextSeason = new ProgramSeason(nextSeasonData);\r\n\r\n    const [applicationData, setApplicationData] = useState(null);\r\n    const app = new ApplicationInfo(applicationData);\r\n\r\n    useEffect(() => {\r\n        (async () => {\r\n            try {                  \r\n                const result = await apiClient.getProgram(PROGRAM_CODE);\r\n                const currentSeason = new ProgramInfo(result).getSeason(year);\r\n                if (!currentSeason){\r\n                    dispatch(\r\n                        open({\r\n                            message: \"This application is no longer available\",\r\n                            severity: \"success\",\r\n                        })\r\n                    );\r\n                    history.push({\r\n                        pathname: '/dashboard', state: {\r\n                            from: history.location.pathname\r\n                        }\r\n                    })\r\n                    return;\r\n                }\r\n                grantInfo.updateDto(result);\r\n                setGrantDetails(result);\r\n\r\n                const [priorResult, nextResult, dhsResult, appResult, answers] = await Promise.all([                  \r\n                    apiClient.getSeason(PROGRAM_CODE, year - 1),                    \r\n                    apiClient.getSeason(PROGRAM_CODE, year + 1),\r\n                    apiClient.get(\"code?lookup.code=FosterEntityInstruct&lookup.codeType=StudentMessage\"),\r\n                    apiClient.getApplication(PROGRAM_CODE, year),\r\n                    sectionGroup.fetchAnswers(year)\r\n                ]);\r\n                \r\n                           \r\n                setNextSeason(nextResult);\r\n                setDhsContactInfo(dhsResult.Message);\r\n                setApplicationData(appResult);\r\n\r\n\r\n            } catch (e) {\r\n                console.log(e);\r\n            }\r\n        })()\r\n    }, [])\r\n\r\n    \r\n    const preSummerTerm2 = currentSeason?.getDeadlineDisplay('Summer');\r\n    const fallTerm2 = currentSeason?.getDeadlineDisplay('Fall');\r\n    const winterTerm2 = currentSeason?.getDeadlineDisplay('Winter');\r\n    const springTerm2 = currentSeason?.getDeadlineDisplay('Spring');\r\n    \r\n    const history = useHistory();\r\n    const handleCancel = () => {\r\n        goBack({\r\n            history,\r\n            defaultRoute: \"/dashboard\",\r\n        });\r\n    };\r\n    const methods = useForm({\r\n        mode: \"onBlur\",\r\n    });\r\n    const { setValue, handleSubmit, watch, getValues } = methods;\r\n    const formState = useSelector((state) => state.form);\r\n    const [showConfirmation, setShowConfirmation] = useState(false);\r\n    const [progress, setProgress] = useState({\r\n        profile: \"complete\",\r\n        foster: \"inProgress\",\r\n        terms: \"incomplete\",\r\n    });\r\n\r\n    let progressPercent = 0;\r\n    for (const i in progress) {\r\n        if (progress[i] === \"complete\") progressPercent += 1;\r\n    }\r\n    progressPercent =\r\n        progressPercent === 3 ? 99 : (progressPercent / 3).toFixed(2) * 100;\r\n\r\n    \r\n\r\n    const [saveLoading, setSaveLoading] = useState(false);\r\n\r\n    const onSave = async (data, e) => {\r\n        try {\r\n            setSaveLoading(true)\r\n            await actions.submitForm(data, [], [\"Agreement\"], year);\r\n            dispatch(\r\n                open({\r\n                    message: \"Saved Successfully\",\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        } catch (e) {\r\n            console.error(e);\r\n            dispatch(\r\n                open({\r\n                    message: e.message,\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        } finally {\r\n            setSaveLoading(false);\r\n        }\r\n    };\r\n\r\n    const onError = (errors) => {\r\n        console.log(\"ERROR\", errors);\r\n        dispatch(\r\n            open({\r\n                message: \"Your application is not complete. Be sure to resolve all errors above.\",\r\n                severity: \"success\",\r\n            }));\r\n    };\r\n\r\n    // Foster Care - Progress\r\n    //TODO: use API to atually get REAL progrss information as defined by the program directly\r\n    if (\r\n        progress.foster === \"inProgress\" &&\r\n        watch(FIELDS.CHAFEE__FOSTER_CARE) == true &&\r\n        truthy(watch(FIELDS.CHAFEE__ADOPTED)) == true &&\r\n        truthy(watch(FIELDS.CHAFEE__ADOPTION_FINALIZED)) == true\r\n    ) {\r\n        setProgress({ ...progress, foster: \"complete\", terms: \"inProgress\" });\r\n    } else if (\r\n        progress.foster === \"inProgress\" &&\r\n        watch(FIELDS.CHAFEE__FOSTER_CARE) == true &&\r\n        truthy(watch(FIELDS.CHAFEE__ADOPTED)) == false\r\n    ) {\r\n        setProgress({ ...progress, foster: \"complete\", terms: \"inProgress\" });\r\n    } else if (\r\n        progress.foster === \"inProgress\" &&\r\n        watch(FIELDS.CHAFEE__FOSTER_CARE) === false &&\r\n        watch(FIELDS.CHAFEE__FOSTER_QUALIFIED) == true &&\r\n        truthy(watch(FIELDS.CHAFEE__ADOPTED)) === true &&\r\n        truthy(watch(FIELDS.CHAFEE__ADOPTION_FINALIZED)) == true\r\n    ) {\r\n        setProgress({ ...progress, foster: \"complete\", terms: \"inProgress\" });\r\n    } else if (\r\n        progress.foster === \"inProgress\" &&\r\n        watch(FIELDS.CHAFEE__FOSTER_CARE) === false &&\r\n        watch(FIELDS.CHAFEE__FOSTER_QUALIFIED) == true &&\r\n        truthy(watch(FIELDS.CHAFEE__ADOPTED)) === false\r\n    ) {\r\n        setProgress({ ...progress, foster: \"complete\", terms: \"inProgress\" });\r\n    } else if (\r\n        progress.foster === \"inProgress\" &&\r\n        (watch(FIELDS.CHAFEE__FOSTER_DHS) == true ||\r\n            watch(FIELDS.CHAFEE__FOSTER_TRIBAL) == true ||\r\n            watch(FIELDS.CHAFEE__TRIBE) == true)\r\n    ) {\r\n        setProgress({ ...progress, foster: \"complete\", terms: \"inProgress\" });\r\n    }\r\n\r\n    // Current Academic Year - Progress\r\n    if (\r\n        progress.terms == \"inProgress\" &&\r\n        (watch(FIELDS.CHAFEE__PRESUMMER_1) == true ||\r\n            watch(FIELDS.CHAFEE__FALL_1) == true ||\r\n            watch(FIELDS.CHAFEE__WINTER_1) == true ||\r\n            watch(FIELDS.CHAFEE__SPRING_1) == true ||\r\n            watch(FIELDS.CHAFEE__POSTSUMMER_1) == true ||\r\n            watch(FIELDS.CHAFEE__PRESUMMER_2) == true ||\r\n            watch(FIELDS.CHAFEE__FALL_2) == true ||\r\n            watch(FIELDS.CHAFEE__WINTER_2) == true ||\r\n            watch(FIELDS.CHAFEE__SPRING_2) == true ||\r\n            watch(FIELDS.CHAFEE__POSTSUMMER_2) == true)\r\n    ) {\r\n        setProgress({ ...progress, terms: \"complete\" });\r\n        console.log('set terms complete')\r\n    }\r\n\r\n    const [submitLoading, setSubmitLoading] = useState(false);\r\n\r\n    /**\r\n     * submit the application for consideration for an award\r\n     */\r\n    const actualSubmit = async () => {\r\n        const actualSubmission = async (data, e) => {\r\n            try {\r\n                await actions.submitForm(data, [], [\"Agreement\"], year);\r\n                await apiClient.submitApplication(PROGRAM_CODE, year);\r\n                dispatch(\r\n                    open({\r\n                        message: e.message,\r\n                        severity: \"success\",\r\n                    }));\r\n            }\r\n            catch (e) {\r\n                dispatch(\r\n                    open({\r\n                        message: \"Submitted Successfully\",\r\n                        severity: \"success\",\r\n                    }));\r\n            }\r\n            setShowConfirmation(true);\r\n\r\n        };\r\n        const submitError = (errors) => {\r\n            dispatch(open({\r\n                message: \"Your application is not complete. Be sure to resolve all errors above.\",\r\n                severity: \"success\",\r\n            }))\r\n        };\r\n        try {\r\n            setSubmitLoading(true);\r\n            const execSubmission = handleSubmit(actualSubmission, submitError);\r\n            await execSubmission();\r\n        } catch (e) {\r\n            console.error(e);\r\n            dispatch(\r\n                open({\r\n                    message: e.message,\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        } finally {\r\n            setSubmitLoading(false);\r\n        }\r\n\r\n    };\r\n\r\n    const watchFosterOtherState = watch(FIELDS.CHAFEE__FOSTER_OTHER_STATE)\r\n    const watchFosterTribal = watch(FIELDS.CHAFEE__FOSTER_TRIBAL)\r\n    const watchFosterDHS = watch(FIELDS.CHAFEE__FOSTER_DHS)\r\n    useEffect(() => {\r\n        if (watchFosterOtherState === true) {\r\n            setValue(FIELDS.CHAFEE__FOSTER_TRIBAL, false);\r\n            setValue(FIELDS.CHAFEE__FOSTER_DHS, false);\r\n        }\r\n    }, [watchFosterOtherState])\r\n    useEffect(() => {\r\n        if (watchFosterTribal === true) {\r\n            setValue(FIELDS.CHAFEE__FOSTER_OTHER_STATE, false);\r\n            setValue(FIELDS.CHAFEE__FOSTER_DHS, false);\r\n        }\r\n    }, [watchFosterTribal])\r\n    useEffect(() => {\r\n        if (watchFosterDHS === true) {\r\n            setValue(FIELDS.CHAFEE__FOSTER_OTHER_STATE, false);\r\n            setValue(FIELDS.CHAFEE__FOSTER_TRIBAL, false);\r\n        }\r\n    }, [watchFosterDHS])\r\n\r\n\r\n    const watchFosterCare = watch(FIELDS.CHAFEE__FOSTER_CARE)\r\n    const watchFosterQualified = watch(FIELDS.CHAFEE__FOSTER_QUALIFIED)\r\n    const watchFosterAdopted = watch(FIELDS.CHAFEE__ADOPTED)\r\n    const watchFosterAdoptionFinalized = watch(FIELDS.CHAFEE__ADOPTION_FINALIZED)\r\n    const watchCitizenship = watch(FIELDS.CITIZENSHIP_STATUS)\r\n\r\n    const [isEligible, setIsEligible] = useState(true);\r\n\r\n    useEffect(() => {\r\n        if (\r\n            truthy(watchFosterCare) === false &&\r\n            truthy(watchFosterQualified) === false\r\n        ) {\r\n            if (truthy(watchFosterAdopted) == false) {\r\n                setIsEligible(false);\r\n            } else if (truthy(watchFosterAdopted) == true && truthy(watchFosterAdoptionFinalized) == false) {\r\n                setIsEligible(true);\r\n            } else {\r\n                setIsEligible(true);\r\n            }\r\n        } else {\r\n            setIsEligible(true);\r\n        }\r\n    }, [watchFosterCare, watchFosterQualified, watchFosterAdopted, watchFosterAdoptionFinalized])\r\n\r\n    const citizenShipErrors = {\r\n        3: \"Based on your citizenship status, you are ineligible for Chafee ETG. To be eligible you must be able to select U.S. Citizen or Eligible Non-Citizen (includes U.S. Permanent Resident, U.S. Refugee, Asylee, or U.S. Dual Citizen)\"\r\n    }\r\n\r\n    const [showCitizenshipError, setShowCitizenshipError] = useState(false)\r\n\r\n    useEffect(() => {\r\n        let citizenshipAnswer = getValues(FIELDS.CITIZENSHIP_STATUS)\r\n        if (citizenshipAnswer && (parseInt(citizenshipAnswer) === 3)) {\r\n            setIsEligible(false);\r\n            setShowCitizenshipError(true)\r\n        }\r\n        else {\r\n            setIsEligible(true);\r\n            setShowCitizenshipError(false)\r\n        }\r\n    }, [watchCitizenship])\r\n\r\n    const onEdit = () => {\r\n        setShowConfirmation(false);\r\n        window.location.reload(true); /* 3722/SP236: Calling components aren't keeping application state so, reload the page from server. */\r\n    }\r\n\r\n\r\n\r\n    return (\r\n        <FormProvider {...methods}>\r\n            <PortalView>\r\n                <div name=\"ApplicationsPage\">\r\n                    <div className=\"page-intro\">\r\n                        <div className=\"wrapper\">\r\n                            <div className=\"page-intro__layout\">\r\n                                <div className=\"page-intro__icon\">\r\n                                    <img src=\"/MyApplictionsIcon.svg\" alt=\"Applications icon\" style={{ marginTop: \".5rem\" }} />\r\n                                </div>\r\n                                <div className=\"page-intro__content rhythm\">\r\n                                    <h1 className=\"heading heading--h1\">\r\n                                        {grantInfo.name}\r\n                                        <PrintIcon />\r\n                                    </h1>\r\n                                    <p className=\"heading\"> {grantInfo.description}</p>\r\n                                    <h2 className=\"heading heading--h2\">{year} – {year + 1}</h2>\r\n                                    <a href=\"/dashboard\">Return to Dashboard</a>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n\r\n                    {showConfirmation ? (\r\n                        <CompleteSubmission onEdit={onEdit} details={{\r\n                            title: grantInfo.name,\r\n                            description: grantInfo.description,\r\n                            code: PROGRAM_CODE\r\n                        }} />\r\n                    ) : (\r\n                        <div className=\"wrapper\">\r\n                            <div className=\"application-progress component\">\r\n\r\n                                <div className=\"progress-bar rhythm\">\r\n                                    <h3 className=\"heading heading--h3\">\r\n                                        Application Progress\r\n                                    </h3>\r\n\r\n                                    <ProgressBar progress={progressPercent} />\r\n\r\n                                    <div className=\"progress-bar__labels\">\r\n                                        <div className=\"progress-bar__label\">\r\n                                            <div className=\"progress-bar__icon\">\r\n                                                {(progress.profile === \"complete\" && (\r\n                                                    <CheckCircleIcon\r\n                                                        style={{ color: \"#429D5B\" }}\r\n                                                    />\r\n                                                )) ||\r\n                                                    (progress.profile === \"inProgress\" && (\r\n                                                        <RadioButtonCheckedIcon\r\n                                                            style={{ color: \"#E59B6F\" }}\r\n                                                        />\r\n                                                    )) ||\r\n                                                    (progress.profile === \"incomplete\" && (\r\n                                                        <CheckCircleIcon\r\n                                                            style={{ color: \"#D8D8D8\" }}\r\n                                                        />\r\n                                                    ))}\r\n                                            </div>\r\n                                            <span>Profile</span>\r\n                                        </div>\r\n                                        <div className=\"progress-bar__label\">\r\n                                            <div className=\"progress-bar__icon\">\r\n                                                {(progress.foster === \"complete\" && (\r\n                                                    <CheckCircleIcon style={{ color: \"#429D5B\" }} />\r\n                                                )) ||\r\n                                                    (progress.foster === \"inProgress\" && (\r\n                                                        <RadioButtonCheckedIcon style={{ color: \"#E59B6F\" }} />\r\n                                                    )) ||\r\n                                                    (progress.foster === \"incomplete\" && (\r\n                                                        <CheckCircleIcon style={{ color: \"#D8D8D8\" }} />\r\n                                                    ))}\r\n                                            </div>\r\n                                            <span>Foster Care</span>\r\n                                        </div>\r\n                                        <div className=\"progress-bar__label\">\r\n                                            <div className=\"progress-bar__icon\">\r\n                                                {(progress.terms === \"complete\" && (\r\n                                                    <CheckCircleIcon\r\n                                                        style={{ color: \"#429D5B\" }}\r\n                                                    />\r\n                                                )) ||\r\n                                                    (progress.terms === \"inProgress\" && (\r\n                                                        <RadioButtonCheckedIcon\r\n                                                            style={{ color: \"#E59B6F\" }}\r\n                                                        />\r\n                                                    )) ||\r\n                                                    (progress.terms === \"incomplete\" && (\r\n                                                        <CheckCircleIcon\r\n                                                            style={{ color: \"#D8D8D8\" }}\r\n                                                        />\r\n                                                    ))}\r\n                                            </div>\r\n                                            <span>College Terms</span>\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                            </div>{/* application-progress */}\r\n\r\n                            <div className=\"divider\" />\r\n\r\n                            <div className=\"form-wrapper rhythm\">\r\n\r\n                                {/* OTHER section  */}\r\n                                <div className=\"other\">\r\n                                    <div className=\"form-section\">\r\n                                        <div className=\"form-section__header\">\r\n                                            <h2 className=\"heading heading--h3\">Citizenship</h2>\r\n                                        </div>\r\n                                        <div className=\"wrapper rhythm\">\r\n                                            {/*CITIZENSHIP*/}\r\n                                            <CitizenshipStatus />\r\n\r\n                                            {watchCitizenship > 0 &&\r\n                                                <div style={{ color: 'red', padding: '1rem', fontWeight: 'bold' }}>\r\n                                                    {citizenShipErrors[watchCitizenship]}\r\n                                                </div>\r\n                                            }\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n\r\n                                {!showCitizenshipError && (\r\n                                    <div className=\"foster-care\">\r\n                                        <div className=\"form-section\">\r\n                                            <div className=\"form-section__header\">\r\n                                                <h2 className=\"heading heading--h3\">Foster Care</h2>\r\n                                            </div>\r\n                                            <div className=\"wrapper\">\r\n                                                <div className=\"rhythm\">\r\n                                                    {watchFosterOtherState && (\r\n                                                        <div className=\"rhythm\">\r\n                                                            <Card>\r\n                                                                <CardContent>\r\n                                                                    <div dangerouslySetInnerHTML={{ __html: dhsContactInfo }} />\r\n                                                                </CardContent>\r\n                                                            </Card>\r\n                                                        </div>\r\n                                                    )\r\n                                                    }\r\n\r\n                                                    <div className=\"input-field rhythm\">\r\n                                                        <p>\r\n                                                            Are you currently in Child Welfare foster care at least 180 days (six months) after your 13th birthday AND did not leave your foster care placement on or after your 14th birthday?\r\n                                                        </p>\r\n                                                        <div>\r\n                                                            <BooleanRadioGroup name={FIELDS.CHAFEE__FOSTER_CARE} value={watchFosterCare} isRequired={true} />\r\n                                                        </div>\r\n                                                        <div>\r\n                                                        </div>\r\n                                                        {truthy(watchFosterCare) === false && (\r\n                                                            <>\r\n                                                                <p>\r\n                                                                    As a former foster youth, were you in Child Welfare foster care for at least 180 days (six months) of foster care after your 13th birthday and that you exited foster care on or after your 14th birthday?\r\n                                                                </p>\r\n                                                                <div>\r\n                                                                    {/*<Checkbox name={FIELDS.CHAFEE__FOSTER_QUALIFIED} isRequired={false} label=\"Yes\" />*/}\r\n                                                                    <BooleanRadioGroup name={FIELDS.CHAFEE__FOSTER_QUALIFIED} value={watchFosterQualified} isRequired={true} />\r\n                                                                </div>\r\n                                                            </>\r\n                                                        )}\r\n                                                    </div>\r\n\r\n                                                    <div className=\"input-field rhythm\">\r\n                                                        <p>\r\n                                                            Which entities provided care?\r\n                                                        </p>\r\n                                                        <div className=\"rhythm\">\r\n                                                            <Checkbox name={FIELDS.CHAFEE__FOSTER_DHS} label=\"Oregon Department of Human Services Child Welfare (DHS, formerly referred to as SCF)\" />\r\n                                                        </div>\r\n                                                        <div className=\"rhythm\">\r\n                                                            <Checkbox name={FIELDS.CHAFEE__FOSTER_TRIBAL} label=\"Tribal Foster Care\" />\r\n                                                            {watchFosterTribal && (\r\n                                                                <div>\r\n                                                                    <Input name={FIELDS.CHAFEE__TRIBE} inputLabel=\"Please list the tribe:\" isRequired={true} />\r\n                                                                </div>\r\n                                                            )}\r\n                                                        </div>\r\n                                                        <div className=\"rhythm\">\r\n                                                            <Checkbox name={FIELDS.CHAFEE__FOSTER_OTHER_STATE} label=\"Child Welfare system in another state (not Oregon)\" />\r\n                                                            {watchFosterOtherState && (\r\n                                                                <div>\r\n                                                                    <StatePicker\r\n                                                                        name={FIELDS.CHAFEE__OTHER_STATE_ID}\r\n                                                                        label=\"Please list the other state:\"\r\n                                                                        isRequired={true}\r\n                                                                        returnType={\"Id\"}\r\n                                                                        shouldExclude={(state) => state.Abbreviation === 'OR'}\r\n                                                                    />\r\n                                                                </div>\r\n                                                            )}\r\n                                                        </div>\r\n                                                    </div>\r\n\r\n                                                    <div className=\"input-field rhythm\">\r\n                                                        <p>\r\n                                                            Oregon Child Welfare Adoption or Guardianship Finalized on\r\n                                                            or after your 13th birthday?\r\n                                                        </p>\r\n                                                        <div>\r\n                                                            {/*<Checkbox name={FIELDS.CHAFEE__ADOPTED} label=\"Yes\" />*/}\r\n                                                            <BooleanRadioGroup name={FIELDS.CHAFEE__ADOPTED} value={watchFosterAdopted} isRequired={true} />\r\n                                                        </div>\r\n                                                        {truthy(watchFosterAdopted) && (\r\n                                                            <>\r\n                                                                <p>\r\n                                                                    Did your adoption or guardianship finalize on or after\r\n                                                                    9/1/2015?\r\n                                                                </p>\r\n                                                                <div>\r\n                                                                    {/*<Checkbox name={FIELDS.CHAFEE__ADOPTION_FINALIZED} isRequired={false} label=\"Yes\" />*/}\r\n                                                                    <BooleanRadioGroup name={FIELDS.CHAFEE__ADOPTION_FINALIZED} value={watchFosterAdoptionFinalized} isRequired={true} />\r\n                                                                </div>\r\n                                                            </>\r\n                                                        )}\r\n                                                    </div>\r\n\r\n                                                    {!isEligible &&\r\n                                                        <div className=\"input-field\">\r\n                                                            <Alert severity=\"error\" className=\"alert alert--error\">\r\n                                                                <AlertTitle>Not eligible</AlertTitle>\r\n                                                                You must have been in foster care for at least 180 days after your 13th birthday OR adopted or entered into a guardianship on or after your 13th birthday, and your adoption/guardianship finalized after 9/1/2015 to be eligible for Chafee.\r\n                                                            </Alert>\r\n                                                        </div>\r\n                                                    }\r\n                                                </div>\r\n                                            </div>\r\n                                        </div>\r\n                                    </div>\r\n                                )}\r\n                                {!showCitizenshipError && (\r\n                                    <div>\r\n                                        <EditCollegeOfChoice section={allChafeeSection} year={year} />\r\n                                    </div>\r\n                                )}\r\n                                {!showCitizenshipError && (\r\n                                    <div className=\"college-terms\">\r\n                                        <div className=\"form-section\">\r\n                                            <div className=\"form-section__header\">\r\n                                                <h2 className=\"heading heading--h3\">College Terms</h2>\r\n                                            </div>\r\n\r\n                                            <div className=\"wrapper rhythm\">\r\n                                              \r\n                                                <h3 className=\"heading heading--h4 academic-year\">{year} – {year + 1} Academic Year</h3>\r\n                                                <div className=\"table-wrapper\">\r\n                                                    <table className=\"table\">\r\n                                                        <thead>\r\n                                                            <tr>\r\n                                                                <th><b>Term</b></th>\r\n                                                                <th><b>Attending?</b></th>\r\n                                                                <th><b>Application Deadline</b></th>\r\n                                                            </tr>\r\n                                                        </thead>\r\n                                                        <tbody>\r\n                                                            <tr>\r\n                                                                <td>{preSummerTerm2?.term}</td>\r\n                                                                <td><Checkbox name={FIELDS.CHAFEE__PRESUMMER_2} label=\"Yes\" /></td>\r\n                                                                <td>{preSummerTerm2?.deadline}</td>\r\n                                                            </tr>\r\n                                                            <tr>\r\n                                                                <td>{fallTerm2?.term}</td>\r\n                                                                <td><Checkbox name={FIELDS.CHAFEE__FALL_2} label=\"Yes\" /></td>\r\n                                                                <td>{fallTerm2?.deadline}</td>\r\n                                                            </tr>\r\n                                                            <tr>\r\n                                                                <td>{winterTerm2?.term}</td>\r\n                                                                <td><Checkbox name={FIELDS.CHAFEE__WINTER_2} label=\"Yes\" /></td>\r\n                                                                <td>{winterTerm2?.deadline}</td>\r\n                                                            </tr>\r\n                                                            <tr>\r\n                                                                <td>{springTerm2?.term}</td>\r\n                                                                <td><Checkbox name={FIELDS.CHAFEE__SPRING_2} label=\"Yes\" /></td>\r\n                                                                <td>{springTerm2?.deadline}</td>\r\n                                                            </tr>\r\n                                                            <tr>\r\n                                                                <td>{preSummerTerm2?.term.replace(year, year+1)}</td>\r\n                                                                <td><Checkbox name={FIELDS.CHAFEE__POSTSUMMER_2} label=\"Yes\" /></td>\r\n                                                                <td>{preSummerTerm2?.deadline.replace(year, year+1)}</td>\r\n                                                            </tr>\r\n                                                        </tbody>\r\n                                                    </table>\r\n                                                </div>\r\n                                            </div> {/* end wrapper */}\r\n                                        </div> {/* end form-section */}\r\n                                    </div>\r\n                                )}\r\n                                {!showCitizenshipError && (\r\n                                    <div className=\"grant-action-buttons\">\r\n                                        <Button\r\n                                            name=\"Cancel\"\r\n                                            label=\"Cancel\"\r\n                                            variant=\"text\"\r\n                                            onClick={handleCancel}\r\n                                        />\r\n                                        <Button\r\n                                            loading={saveLoading}\r\n                                            name=\"Save\"\r\n                                            label=\"Save\"\r\n                                            disabled={!isEligible}\r\n                                            type=\"submit\"\r\n                                            onClick={handleSubmit(onSave, onError)}\r\n                                        />\r\n                                        <ApplicationSubmitButton loading={submitLoading} app={app} sections={{ isComplete: isEligible }} onClick={actualSubmit} />\r\n                                    </div>\r\n                                )}\r\n                            </div>\r\n                        </div>\r\n                    )}\r\n                </div>\r\n            </PortalView>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\nexport default Chafee;\r\n","import { useEffect, useState } from \"react\";\r\nimport apiClient from \"../../utils/API\";\r\nimport Dropdown from \"../Dropdown\";\r\nimport FormSerializer from \"../../store/form/serializer\";\r\nimport { FIELDS } from \"../../store/form/fields\";\r\n\r\nexport default ({ ...props }) => {\r\n  const [items, setItems] = useState([]);\r\n  let initialized = false;\r\n  // const [tmp, setTmp] = useState(false);\r\n\r\n  useEffect(async () => {\r\n  \r\n        const tribes = await apiClient.get(\"/answer/options\", {\r\n          \"lookup.questionKey\": FormSerializer.getQuestionKey(FIELDS.OTSG__ENROLLED_TRIBE),\r\n        }); \r\n        const listItems = [];    \r\n        for (let tribe of tribes){\r\n          const item = {};\r\n          item.label = tribe.Name;\r\n          item.value = tribe.Value;\r\n          listItems.push(item);\r\n        }       \r\n        setItems(listItems); \r\n        \r\n  }, [])\r\n\r\n\r\n  return <Dropdown {...props} placeholder=\"Tribe\" listItems={items} />;\r\n};\r\n","import { actions } from \"./../../store\";\r\nimport { FIELDS } from \"../../store/form/fields\";\r\nimport { useState, useEffect, useRef } from \"react\";\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport Button from \"../../components/Button\";\r\nimport PrintIcon from \"../../components/PrintIcon\";\r\nimport PortalView from \"./../../components/Global/PortalView\";\r\nimport ProgressBar from \"../../components/progress/ProgressBar\";\r\nimport ProgressBarLabel from \"../../components/progress/ProgressBarLabel\";\r\nimport TribeDropdown from \"../../components/DataDriven/TribeDropdown\";\r\nimport CompleteSubmission from \"../../components/CompleteSubmission\";\r\nimport { goBack } from \"../../utils\";\r\nimport apiClient from \"../../utils/API\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport { open } from \"../../store/snack/actions\";\r\nimport Checkbox from \"../../components/Checkbox\";\r\nimport _get from \"lodash.get\";\r\nimport ApplicationSubmitButton from \"../../components/Utility/ApplicationSubmitButton\";\r\nimport ApplicationInfo from \"../../utils/dtos/ApplicationInfo\";\r\nimport CollegeChoiceAnswer from \"../../components/answer/CollegeChoiceAnswer\";\r\nimport ClassStanding from \"../../components/answer/question/ClassStanding\";\r\nimport SectionFormHelper from \"../../utils/helper/SectionHelper\";\r\nimport { Alert } from '@material-ui/lab';\r\nimport RequirementSet from \"../../utils/dtos/RequirementSet\";\r\n\r\n\r\n\r\nconst PROGRAM_CODE = \"OTSG\";\r\n\r\n/**\r\n * renders the Oregon Tribal Student Grant application\r\n * @returns {Component}\r\n */\r\nfunction OTSG() {\r\n    let { year } = useParams();\r\n\r\n    const activeYear = parseInt(year);\r\n\r\n    const methods = useForm({\r\n        mode: \"onBlur\",\r\n    });\r\n    const { setValue, handleSubmit, watch } = methods;\r\n    const formState = useSelector((state) => state.form);\r\n\r\n    const history = useHistory();\r\n    const handleCancel = () => {\r\n        goBack({\r\n            history,\r\n            defaultRoute: \"/dashboard\",\r\n        });\r\n    };\r\n\r\n    const [showConfirmation, setShowConfirmation] = useState(false);\r\n\r\n    const sectionGroup = new SectionFormHelper(useState(null));\r\n    const allAppSection = sectionGroup.create(useState(null), null, [\r\n        FIELDS.OTSG__ATTENDING_FALL_TERM,\r\n        FIELDS.OTSG__ATTENDING_WINTER_TERM,\r\n        FIELDS.OTSG__ATTENDING_SPRING_TERM,\r\n        FIELDS.OTSG__ENROLLED_TRIBE,\r\n        FIELDS.COLLEGE_CHOICE,\r\n        FIELDS.COLLEGE_STANDING,\r\n        FIELDS.COLLEGE_DUAL_ENROLLED,\r\n        FIELDS.FIRST_NAME,\r\n        FIELDS.MIDDLE_INITIALS,\r\n        FIELDS.LAST_NAME,\r\n        FIELDS.OTHER_NAMES,\r\n    ]);\r\n\r\n \r\n    const applicationYear = `${activeYear}-${activeYear + 1}`;\r\n\r\n    const [applicationData, setApplicationData] = useState(null);\r\n    const app = new ApplicationInfo(applicationData);\r\n\r\n    const [completionData, setCompletionData] = useState(null);\r\n    const sectionCompletion = new RequirementSet(completionData); \r\n    const collegeCompletion = sectionCompletion.getField(FIELDS.COLLEGE_CHOICE);\r\n\r\n    useEffect(async () => {\r\n        const currentSeasonResult =  await apiClient.getSeason(PROGRAM_CODE, year);                   \r\n        if (!currentSeasonResult.IsAvailable){\r\n            dispatch(\r\n                open({\r\n                    message: \"This application is no longer available\",\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n            handleCancel();\r\n            return;\r\n        }\r\n\r\n        const [appResult, answers, completionResult] = await Promise.all([\r\n            apiClient.getApplication(PROGRAM_CODE, activeYear),\r\n            sectionGroup.fetchAnswers(activeYear),\r\n            apiClient.getCompletionReport(\"OTSG\", activeYear, [FIELDS.COLLEGE_CHOICE])\r\n        ]);\r\n        setApplicationData(appResult);\r\n        setCompletionData(completionResult); //set completion data\r\n    }, [])\r\n\r\n\r\n\r\n\r\n    const dispatch = useDispatch();\r\n\r\n    const [saveLoading, setSaveLoading] = useState(false);\r\n\r\n  const onSave = async (data) => {\r\n    // console.log(\"Save\", data);\r\n    try {\r\n      setSaveLoading(true)\r\n      // console.log(data, e);\r\n      await actions.submitForm(data, [], [\"Agreement\"], activeYear);\r\n      dispatch(\r\n        open({\r\n          message: \"Saved Successfully\",\r\n          severity: \"success\",\r\n        })\r\n      );\r\n      var result = await apiClient.getCompletionReport(\"OTSG\", activeYear, [FIELDS.COLLEGE_CHOICE]);\r\n      setCompletionData(result);\r\n    } catch (e) {\r\n      console.error(e);\r\n      dispatch(\r\n        open({\r\n          message: e.message,\r\n          severity: \"success\",\r\n        })\r\n      );\r\n    } finally {\r\n      setSaveLoading(false);\r\n    }\r\n  };\r\n\r\n    const onError = () => {\r\n        // console.log(\"ERROR\", errors, e);\r\n    };\r\n\r\n    const onEdit = () => {\r\n        setShowConfirmation(false);\r\n        window.location.reload(true); /* 3722/SP236: Calling components aren't keeping application state so, reload the page from server. */\r\n    }\r\n\r\n    const [submitLoading, setSubmitLoading] = useState(false);\r\n\r\n    const actualSubmit = async () => {\r\n        const actualSubmission = async (data) => {\r\n            await actions.submitForm(data, [], [\"Agreement\"], activeYear);\r\n            await apiClient.submitApplication(PROGRAM_CODE, activeYear);\r\n            // console.log(data, e);\r\n            setShowConfirmation(true);\r\n        };\r\n        try {\r\n            setSubmitLoading(true);\r\n            const execSubmission = handleSubmit(actualSubmission, onError);\r\n            await execSubmission();\r\n            dispatch(\r\n                open({\r\n                    message: \"Submitted Successfully\",\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        } catch (e) {\r\n            console.error(e);\r\n            dispatch(\r\n                open({\r\n                    message: e.message,\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        } finally {\r\n            setSubmitLoading(false);\r\n        }\r\n\r\n    };\r\n\r\n   const watchCollege =watch(FIELDS.COLLEGE_CHOICE)\r\n\r\n    const watchFallTerm = watch(FIELDS.OTSG__ATTENDING_FALL_TERM);\r\n    const watchWinterTerm = watch(FIELDS.OTSG__ATTENDING_WINTER_TERM)\r\n    const watchSpringTerm = watch(FIELDS.OTSG__ATTENDING_SPRING_TERM)\r\n    useEffect(() => {\r\n        console.log(FIELDS.OTSG__ATTENDING_FALL_TERM)\r\n        console.log(watchFallTerm)\r\n        if (!watchFallTerm) {\r\n            setValue(FIELDS.OTSG__ATTENDING_FALL_TERM, false);\r\n        }\r\n    }, [watchFallTerm])\r\n    useEffect(() => {\r\n        console.log(FIELDS.OTSG__ATTENDING_WINTER_TERM)\r\n        console.log(watchWinterTerm)\r\n        if (!watchWinterTerm) {\r\n            setValue(FIELDS.OTSG__ATTENDING_WINTER_TERM, false);\r\n        }\r\n    }, [watchWinterTerm])\r\n    useEffect(() => {\r\n        console.log(FIELDS.OTSG__ATTENDING_SPRING_TERM)\r\n        console.log(watchSpringTerm)\r\n        if (!watchSpringTerm) {\r\n            setValue(FIELDS.OTSG__ATTENDING_SPRING_TERM, false);\r\n        }\r\n    }, [watchSpringTerm, watchFallTerm, watchWinterTerm])\r\n\r\n\r\n    const watchTribe = watch(FIELDS.OTSG__ENROLLED_TRIBE)\r\n\r\n    /**\r\n     * determine progress based on current watch status\r\n     */\r\n    const progress = {};\r\n    if (watchTribe) {\r\n        progress.tribe = 'complete'\r\n    } else {\r\n        progress.tribe = 'inProgress'\r\n    }\r\n    if ((watchFallTerm && watchFallTerm !== false) ||\r\n        (watchWinterTerm && watchWinterTerm !== false) ||\r\n        (watchSpringTerm && watchSpringTerm !== false)) {\r\n        console.log('terms showing complete')\r\n        progress.terms = 'complete'\r\n    } else {\r\n        progress.terms = 'inProgress'\r\n    } \r\n    if (watchCollege) {\r\n        progress.college = 'complete'\r\n    } else {\r\n        progress.college = 'inProgress'\r\n    }\r\n    \r\n    const submitDisabled = (progress.tribe !== 'complete' || progress.terms !== 'complete' || progress.college !== 'complete');\r\n    const isEligible = true;\r\n    let completeSectionCount = 0;\r\n    for (const i in progress) {\r\n        if (progress[i] === \"complete\")\r\n            completeSectionCount++;\r\n    }\r\n    //give 2% for submit and 25% for profile\r\n    const progressPercent = completeSectionCount === 3 && app.isSubmitted ? 100 : Math.round(25 + 73 * (completeSectionCount / 3) + (app.isSubmitted ? 2 : 0));\r\n\r\n\r\n    const tribeRef = useRef();\r\n    const collegeRef = useRef();\r\n    const termsRef = useRef();\r\n    const submitRef = useRef();\r\n\r\n    return (\r\n        <FormProvider {...methods}>\r\n            <PortalView>\r\n                <div name=\"ApplicationsPage\">\r\n                    <div className=\"page-intro\">\r\n                        <div className=\"wrapper\">\r\n                            <div className=\"page-intro__layout\">\r\n                                <div className=\"page-intro__icon\">\r\n                                    <img src=\"/MyApplictionsIcon.svg\" alt=\"Applications icon\" style={{ marginTop: \".5rem\" }} />\r\n                                </div>\r\n                                <div className=\"page-intro__content rhythm\">\r\n                                    <h1 className=\"heading heading--h1\">\r\n                                        OTSG Grant\r\n                                        <PrintIcon />\r\n                                    </h1>\r\n                                    <h2 className=\"heading heading--h2\">{applicationYear}</h2>\r\n                                    <a href=\"/dashboard\">Return to Dashboard</a>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n\r\n                    {showConfirmation ? (\r\n                        <div>\r\n                            <CompleteSubmission onEdit={onEdit} details={{\r\n                                title: \"OTSG\",\r\n                                code: PROGRAM_CODE,\r\n                            }} />\r\n                        </div>\r\n                    ) : (\r\n                        <div className=\"wrapper\">\r\n                            <div className=\"application-progress component\">\r\n\r\n                                <div className=\"progress-bar rhythm\">\r\n                                    <h3 className=\"heading heading--h3\">\r\n                                        Application Progress\r\n                                    </h3>\r\n\r\n                                    <ProgressBar progress={progressPercent} />\r\n                                    <div className=\"progress-bar__labels\">\r\n                                        <ProgressBarLabel title=\"Profile\" state=\"complete\" />\r\n                                        <ProgressBarLabel title=\"Tribe\" state={progress.tribe} sectionRef={tribeRef} />\r\n                                        <ProgressBarLabel title=\"College\" state={progress.college} sectionRef={collegeRef} />\r\n                                        <ProgressBarLabel title=\"Terms\" state={progress.terms} sectionRef={termsRef} />\r\n                                        <ProgressBarLabel title=\"Submit\" state={app.isSubmitted ? \"complete\" : \"incomplete\"} sectionRef={submitRef} />\r\n                                    </div>\r\n\r\n                                </div>\r\n                            </div>{/* application-progress */}\r\n\r\n                            <div className=\"divider\" />\r\n\r\n                            <div className=\"form-wrapper rhythm\">\r\n\r\n                                {/* Tribe Selection */}\r\n                                <div className=\"tribe-selection\" ref={tribeRef}>\r\n                                    <div className=\"form-section\">\r\n                                        <div className=\"form-section__header\">\r\n                                            <h2 className=\"heading heading--h3\">Enrolled Tribe</h2>\r\n                                        </div>\r\n\r\n                                        <div className=\"wrapper rhythm\">\r\n                                            <h3 className=\"heading heading--h4 academic-year\">Your Enrolled Tribe</h3>\r\n                                            <TribeDropdown\r\n                                                name={FIELDS.OTSG__ENROLLED_TRIBE}\r\n                                                label='Your Selected Tribe'\r\n                                            />\r\n                                        </div> {/* end wrapper */}\r\n                                    </div> {/* end form-section */}\r\n                                </div>\r\n\r\n                                <div className=\"college-terms\" ref={collegeRef}>\r\n                                    <div className=\"form-section\">\r\n                                        <div className=\"form-section__header\">\r\n                                            <h2 className=\"heading heading--h3\">College Choice</h2>\r\n                                        </div>\r\n                                        {collegeCompletion?.isDisqualifying === true &&\r\n                                            <div item>\r\n                                                <Alert severity=\"error\" className=\"alert alert--error\">\r\n                                                    <p>\r\n                                                        <strong>\r\n                                                            The&nbsp;\r\n                                                            <a href=\"https://oregonstudentaid.gov/grants/oregon-opportunity-grant/list-of-participating-schools\">college you selected</a>\r\n                                                            &nbsp;is not eligible to receive the Oregon Tribal Student Grant.\r\n                                                    </strong>\r\n                                                    </p>\r\n                                                </Alert>\r\n                                            </div>\r\n                                        }\r\n                                        <div className=\"wrapper rhythm\">\r\n                                            <CollegeChoiceAnswer answer={allAppSection.getAnswerByField(FIELDS.COLLEGE_CHOICE)}  />\r\n\r\n                                            <ClassStanding answer={allAppSection.getAnswerByField(FIELDS.COLLEGE_STANDING)} />\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n\r\n                                {/* College Terms */}\r\n                                <div className=\"college-terms\" ref={termsRef}>\r\n                                    <div className=\"form-section\">\r\n                                        <div className=\"form-section__header\">\r\n                                            <h2 className=\"heading heading--h3\">College Terms</h2>\r\n                                        </div>\r\n\r\n                                        {/* Desktop - Current Academic Year */}\r\n                                        <div className=\"wrapper rhythm\">\r\n                                            <h3 className=\"heading heading--h4 academic-year\">{applicationYear} Academic Year</h3>\r\n                                            <div className=\"table-wrapper\">\r\n                                                <table className=\"table\">\r\n                                                    <thead>\r\n                                                        <tr>\r\n                                                            <th>Term</th>\r\n                                                            <th>Attending?</th>\r\n                                                        </tr>\r\n                                                    </thead>\r\n                                                    <tbody>\r\n                                                        <tr>\r\n                                                            <td>Fall Term</td>\r\n                                                            <td><Checkbox name={FIELDS.OTSG__ATTENDING_FALL_TERM} label=\"Yes\" /></td>\r\n                                                        </tr>\r\n                                                        <tr>\r\n                                                            <td>Winter Term</td>\r\n                                                            <td><Checkbox name={FIELDS.OTSG__ATTENDING_WINTER_TERM} label=\"Yes\" /></td>\r\n                                                        </tr>\r\n                                                        <tr>\r\n                                                            <td>Spring Term</td>\r\n                                                            <td><Checkbox name={FIELDS.OTSG__ATTENDING_SPRING_TERM} label=\"Yes\" /></td>\r\n                                                        </tr>\r\n                                                    </tbody>\r\n                                                </table>\r\n                                            </div>\r\n                                        </div> {/* end wrapper */}\r\n                                    </div> {/* end form-section */}\r\n                                </div>\r\n\r\n                                {/* Save/Cancel Buttons */}\r\n                                <div className=\"grant-action-buttons\" ref={submitRef}>\r\n                                    <Button\r\n                                        name=\"Cancel\"\r\n                                        label=\"Cancel\"\r\n                                        variant=\"text\"\r\n                                        onClick={handleCancel}\r\n                                    />\r\n                                    <Button\r\n                                        loading={saveLoading}\r\n                                        name=\"Save\"\r\n                                        label=\"Save\"\r\n                                        disabled={!isEligible}\r\n                                        type=\"submit\"\r\n                                        onClick={handleSubmit(onSave, onError)}\r\n                                    />\r\n                                    <ApplicationSubmitButton\r\n                                        loading={submitLoading}\r\n                                        app={app}\r\n                                        sections={{ isComplete: isEligible && !submitDisabled }}\r\n                                        onClick={actualSubmit}\r\n                                    />\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    )}\r\n                </div>\r\n            </PortalView>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\nexport default OTSG;\r\n","import { FIELDS } from \"../../../store/form/fields\";\r\nimport { useFormContext } from \"react-hook-form\";\r\nimport moment from \"moment\";\r\nimport { useState } from \"react\";\r\nimport NumericDecimal from \"../../../components/NumericDecimal\";\r\nimport Checkbox from \"../../../components/Checkbox\";\r\n\r\n\r\n/**\r\n * prompt for number of credits per term, as is appropriate for the school they said they would attend\r\n * @param {*} param0.section \r\n * @param {*} param0.season \r\n * @param {*} param0.includeSummer \r\n * @returns \r\n */\r\nfunction CreditsPerTerm({ section, season, includeSummer = false, termType=\"Q\" }) {\r\n\r\n    const { errors, getValues, setValue, handleSubmit, watch } = useFormContext({ mode: \"onBlur\", });\r\n    const activeYear = section.year;\r\n\r\n    const isQuarterCollege = termType !== \"S\";\r\n\r\n    class TermAttendance {\r\n\r\n        constructor(state, year, name, term, offset = 0, isActive = true) {\r\n            this._state = state;\r\n            this._term = term;\r\n            this._year = year;\r\n            this._name = name;\r\n            this._offset = offset;\r\n            this._isActive = isActive;\r\n        }\r\n\r\n        /**\r\n         * @returns {number|string}\r\n         */\r\n        get creditHours() {\r\n            if (this._state[0] !== null)\r\n                return this._state[0];\r\n            return section.getAnswerByField(this.name)?.Response;\r\n        }\r\n        /**\r\n         * @param {number|string} value\r\n         */\r\n        set creditHours(value) {\r\n            this._state[1](value);\r\n            setValue(this.name, value);\r\n        }\r\n\r\n\r\n        get isActive() {\r\n            return this._isActive;\r\n        }\r\n\r\n        /**\r\n         * display of term\r\n         */\r\n        get term() {\r\n            return `${this._term} ${this._year}`;\r\n        }\r\n\r\n        /**\r\n         * the field name\r\n         */\r\n        get name() {\r\n            return this._name;\r\n        }\r\n\r\n        get deadline() {\r\n            const event = season?.getEvent(\"EndDate\", this._term);\r\n            if (!event)\r\n                return null;\r\n            return moment(event.date).subtract(this._offset, 'years').format('MM/DD/YYYY');\r\n        }\r\n\r\n\r\n        get isNotAttending() {\r\n            return this.creditHours === 0 || this.creditHours === \"0\";\r\n        }\r\n\r\n        set isNotAttending(value) {\r\n            if (value)\r\n                this.creditHours = 0;\r\n            else\r\n                this.creditHours = \"\";\r\n        }\r\n\r\n        get isTermAnswered() {\r\n            var credits = watch(this.name);\r\n            return credits >= 0;\r\n        }\r\n\r\n    }\r\n\r\n    const listTerms = [\r\n        new TermAttendance(useState(null), activeYear, FIELDS.NATIONAL_GUARD__CREDITS_PRESUMMER, 'Summer', 1, includeSummer),\r\n        new TermAttendance(useState(null), activeYear, FIELDS.NATIONAL_GUARD__CREDITS_FALL, 'Fall'),\r\n        new TermAttendance(useState(null), activeYear + 1, FIELDS.NATIONAL_GUARD__CREDITS_WINTER, 'Winter', 0, isQuarterCollege),\r\n        new TermAttendance(useState(null), activeYear + 1, FIELDS.NATIONAL_GUARD__CREDITS_SPRING, 'Spring'),\r\n        new TermAttendance(useState(null), activeYear + 1, FIELDS.NATIONAL_GUARD__CREDITS_POSTSUMMER, 'Summer', 0, includeSummer)\r\n    ];\r\n\r\n    return (\r\n        <div className=\"table-wrapper\">\r\n            <table className=\"table\">\r\n                <thead>\r\n                    <tr>\r\n                        <th>Term</th>\r\n                        <th>Anticipated Credit Hours</th>\r\n                        <th>&nbsp;</th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    {listTerms.filter(x => x.isActive).map(item => {\r\n                        const fieldTermName = item.name;\r\n                        const isNotAttendingFieldName = \"IsNotAttending\" + item.name;\r\n\r\n                        return (\r\n                            <tr>\r\n                                <td>{item.term}<br /><small>Application Deadline: {item.deadline}</small></td>\r\n                                <td>\r\n                                    <NumericDecimal\r\n                                        name={fieldTermName}\r\n                                        placeholder=\"Credit Hours\"\r\n                                        precision={1}\r\n                                        value={item.creditHours} // Pass credit hours value as prop\r\n                                        onChange={(event) => item.creditHours = event.target.value}\r\n                                    />\r\n                                </td>\r\n                                <td>\r\n                                    <Checkbox\r\n                                        name={isNotAttendingFieldName}\r\n                                        label=\"Not attending\"\r\n                                        value={item.isNotAttending || false} // Pass checkbox value as prop\r\n                                        disabled={item.creditHours > 0}\r\n                                        onChange={(isChecked) => item.isNotAttending = isChecked}\r\n                                    />\r\n                                </td>\r\n                            </tr>\r\n                        );\r\n                    })}\r\n                </tbody>\r\n            </table>\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default CreditsPerTerm;","import { FormProvider, useForm } from \"react-hook-form\";\r\nimport FormSection from \"../../components/FormSection\";\r\nimport { AnswerTypeCollegeProps, FIELDS } from \"../../store/form/fields\";\r\nimport SectionStateIcon from \"../../components/progress/SectionStateIcon\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport CollegeChoiceAnswer from \"../../components/answer/CollegeChoiceAnswer\";\r\nimport ClassStanding from \"../../components/answer/question/ClassStanding\";\r\nimport RequirementSet from \"../../utils/dtos/RequirementSet\";\r\nimport { useState, useEffect } from \"react\";\r\nimport apiClient from \"../../utils/API\";\r\nimport Alert from \"@material-ui/lab/Alert\";\r\nimport CreditsPerTerm from \"../../components/answer/question/CreditsPerTerm\";\r\nimport { compositeFieldname } from \"../../utils\";\r\n\r\n\r\n/**\r\n * college plans section for OTSP\r\n * @param {SectionHelper} param0.section \r\n * @returns {Component}\r\n */\r\nfunction EditCollegeChoice({ section, season }) {\r\n\r\n    const dispatch = useDispatch();\r\n    const methods = useForm({ mode: 'onBlur' });\r\n    const { handleSubmit, watch } = methods;\r\n\r\n    const [completionData, setCompletionData] = useState(null);\r\n    const sectionCompletion = new RequirementSet(completionData);\r\n    const collegeCompletion = sectionCompletion.getField(FIELDS.COLLEGE_CHOICE);\r\n\r\n    async function getCompletionReport() {\r\n        var result = await apiClient.getCompletionReport(\"OTSP\", section.year, [FIELDS.COLLEGE_CHOICE]);\r\n        setCompletionData(result);    \r\n    }\r\n    useEffect(() => {\r\n        if (section.year){\r\n            getCompletionReport();\r\n        }        \r\n    }, [section.year]);\r\n\r\n    const onSubmit = (data) => {\r\n        (async () => {\r\n            await section.saveAnswers(data, dispatch);\r\n            await getCompletionReport();\r\n        })();\r\n    }\r\n\r\n    const onError = () => {\r\n\r\n    }\r\n    \r\n    const collegeCode = watch(compositeFieldname(FIELDS.COLLEGE_CHOICE, AnswerTypeCollegeProps.CODE));       \r\n \r\n\r\n    return (\r\n        <FormProvider {...methods} >\r\n            <form onSubmit={handleSubmit(onSubmit, onError)} >\r\n                <FormSection title={section.title} isEditable={true} onSaveClick={handleSubmit(onSubmit, onError)}\r\n                    status={<SectionStateIcon section={section} />}\r\n                    loading={section.isLoading} >\r\n\r\n                    {collegeCompletion?.isDisqualifying === true &&\r\n                        <div item>\r\n                            <Alert severity=\"error\" className=\"alert alert--error\">\r\n                                <p>\r\n                                    <strong>\r\n                                        The&nbsp;\r\n                                        <a href=\"https://oregonstudentaid.gov/grants/oregon-opportunity-grant/list-of-participating-schools\">college you selected</a>\r\n                                        &nbsp;is not eligible to receive the Oregon Teacher Scholars Program.\r\n                                    </strong>\r\n                                </p>\r\n                            </Alert>\r\n                        </div>\r\n                    }\r\n\r\n\r\n                    <CollegeChoiceAnswer answer={section.getAnswerByField(FIELDS.COLLEGE_CHOICE)} />\r\n\r\n                    <ClassStanding answer={section.getAnswerByField(FIELDS.COLLEGE_STANDING)} />\r\n     \r\n                    <CreditsPerTerm section={section} includeSummer={false} season={season} termType={collegeCode?.TermType} />\r\n                \r\n                </FormSection>\r\n            </form>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\nexport default EditCollegeChoice;","import ProgressBar from \"../progress/ProgressBar\";\r\nimport ProgressBarLabel from \"../progress/ProgressBarLabel\";\r\n\r\n/**\r\n * \r\n * @param {*} param0 \r\n * @returns \r\n */\r\nfunction ProgressHeader({sectionGroup, app, submitRef }) {\r\n\r\n    const pecentComplete = sectionGroup.isComplete && app.isSubmitted ? 100 : Math.round(25 + 74 * sectionGroup.percentComplete / 100 + (app.isSubmitted ? 1 : 0));\r\n\r\n    return (\r\n        <div className=\"application-progress component\">\r\n            <div className=\"progress-bar rhythm\">\r\n                <h3 className=\"heading heading--h3\">\r\n                    Application Progress\r\n                </h3>\r\n            \r\n                <ProgressBar progress={pecentComplete} />\r\n               \r\n                <div className=\"progress-bar__labels\">\r\n                    <ProgressBarLabel title=\"Profile\" state=\"complete\" />\r\n                    {sectionGroup.sections.filter(x => x.title != \"Transcripts\").map(section =>\r\n                        <ProgressBarLabel title={section.title} state={section.completionState} sectionRef={section.ref} />\r\n                    )}\r\n                    <ProgressBarLabel title=\"Submit\" state={app.isSubmitted ? \"complete\" : \"incomplete\"} sectionRef={submitRef} />\r\n                </div>\r\n            </div>\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default ProgressHeader;","import { FormProvider, useForm } from \"react-hook-form\";\r\nimport FormSection from \"../../components/FormSection\"; \r\nimport { FieldSection, FieldRow, FieldSlot } from '../../components/Forms/FieldSection';\r\nimport { FIELDS } from '../../store/form/fields';\r\nimport DropdownAnswer from '../../components/answer/DropdownAnswer';\r\nimport TextAnswer, { TextVariant } from \"../../components/answer/TextAnswer\";\r\nimport SectionStateIcon from \"../../components/progress/SectionStateIcon\";\r\nimport { useDispatch } from \"react-redux\";\r\n/**\r\n * \r\n * @param {SectionHelper} param0.section \r\n * @returns {Component}\r\n */\r\nfunction EditAboutMe({ section }) {\r\n\r\n\r\n    const dispatch = useDispatch();\r\n    const methods = useForm({ mode: 'onBlur' });\r\n    const { errors, formState, getValues, setValue, handleSubmit, watch } = methods;\r\n\r\n    const onSubmit = (data) => {\r\n        section.saveAnswers(data, dispatch);\r\n    }\r\n\r\n    const onError = (e) => {\r\n\r\n    }\r\n    return (\r\n        <FormProvider {...methods} >\r\n            <form onSubmit={handleSubmit(onSubmit, onError)} >\r\n                <FormSection title={section.title} isEditable={true} onSaveClick={handleSubmit(onSubmit, onError)} \r\n                    status={<SectionStateIcon section={section} />} loading={section.isLoading} >\r\n                    <FieldSection title=\"Parent or Guardians Highest Level of Completed Education\" withDivider={true}>\r\n                        <FieldRow>\r\n                            <FieldSlot>\r\n                                <DropdownAnswer isRequired={true} answer={section.getAnswerByField(FIELDS.ED_LEVEL_FATHER)} label='Parent 1' />\r\n                            </FieldSlot>\r\n                            <FieldSlot>\r\n                                <DropdownAnswer isRequired={true} answer={section.getAnswerByField(FIELDS.ED_LEVEL_MOTHER)} label='Parent 2' />\r\n                            </FieldSlot>\r\n                        </FieldRow>                        \r\n                    </FieldSection>\r\n                    <FieldSection title=\"Language Fluency\">\r\n                        <FieldRow>\r\n                            <FieldSlot>\r\n                                <TextAnswer answer={section.getAnswerByField(FIELDS.TEACHER_FLUENCY)} variant={TextVariant.ESSAY} \r\n                                    isRequired={true}  characterLimit={500}\r\n                                    inputLabel=\"If you grew up speaking a language other than English at home, what is that language? Are you able to write, read, and speak that language fluently?  Are you able to pass a college-level verification test if asked to? (You may answer 'N/A' if not applicable)  \" />\r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n                    </FieldSection>\r\n                    <FieldSection title=\"Outreach\">\r\n                        <FieldRow>\r\n                            <FieldSlot>\r\n                                <DropdownAnswer isRequired answer={section.getAnswerByField(FIELDS.TEACHER_SCHOLARS_REFERRAL)}\r\n                                    label='How did you find out about the Oregon Teacher Scholars program?' />\r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n                    </FieldSection>\r\n                </FormSection>\r\n            </form>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\nexport default EditAboutMe;","import { FormProvider, useForm } from \"react-hook-form\";\r\nimport FormSection from \"../../components/FormSection\";\r\nimport BooleanAnswer from \"../../components/answer/BooleanAnswer\";\r\nimport TextAnswer from \"../../components/answer/TextAnswer\";\r\nimport { FIELDS } from \"../../store/form/fields\";\r\nimport DropdownAnswer from \"../../components/answer/DropdownAnswer\";\r\nimport { FieldRow, FieldSection, FieldSlot } from \"../../components/Forms/FieldSection\";\r\nimport SectionStateIcon from \"../../components/progress/SectionStateIcon\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { Input } from \"../../components/Input\";\r\n\r\n/**\r\n * \r\n * @param {SectionHelper} param0.section \r\n * @returns {Component}\r\n */\r\nfunction EditWorkingStudent({ section }) {\r\n\r\n    const dispatch = useDispatch();\r\n    const methods = useForm({ mode: 'onBlur' });\r\n    const { errors, formState, getValues, setValue, handleSubmit, watch } = methods;\r\n\r\n    const onSubmit = (data) => {\r\n        section.saveAnswers(data, dispatch);\r\n    }\r\n\r\n    const onError = (e) => {\r\n\r\n    }\r\n\r\n    const teacherWorking = watch(FIELDS.TEACHER_WORKING);\r\n    const teacherWorkingK12 = watch(FIELDS.TEACHER_WORKINGKTHRU12);\r\n    const teacherDistrict = watch(FIELDS.TEACHER_DISTRICT);\r\n\r\n    return (\r\n        <FormProvider {...methods} >\r\n            <form onSubmit={handleSubmit(onSubmit, onError)} >\r\n                <FormSection title={section.title} isEditable={true} onSaveClick={handleSubmit(onSubmit, onError)}\r\n                    status={<SectionStateIcon section={section} />}\r\n                    loading={section.isLoading} >\r\n\r\n\r\n                    <FieldSection>\r\n                        <FieldRow>\r\n                            <BooleanAnswer isRequired={true} answer={section.getAnswerByField(FIELDS.TEACHER_WORKING)}\r\n                                label={`Are you planning to work or student teach during the ${section.year}-${section.year + 1} academic year?`} />\r\n                        </FieldRow>\r\n                        {teacherWorking === 'True' &&\r\n                            <>\r\n                                <FieldRow>\r\n                                    <BooleanAnswer isRequired={true} answer={section.getAnswerByField(FIELDS.TEACHER_WORKING20HOURS)}\r\n                                        label=\"Are you working or student teaching more than 20 hours per week?\" />\r\n                                </FieldRow>\r\n                                <FieldRow>\r\n                                    <BooleanAnswer isRequired={true} answer={section.getAnswerByField(FIELDS.TEACHER_WORKINGKTHRU12)}\r\n                                        label=\"Are you currently employed in a K-12 school district OR an early learning and care facility?\" />\r\n                                </FieldRow>\r\n                            </>\r\n                        }\r\n                        {teacherWorkingK12 === 'True' &&\r\n                            <>\r\n                                <FieldRow>\r\n                                    <DropdownAnswer isRequired={true} answer={section.getAnswerByField(FIELDS.TEACHER_ROLE)}\r\n                                        label=\"What type of role do you hold?\" />\r\n                                </FieldRow>\r\n                                <FieldRow>\r\n                                    <DropdownAnswer isRequired={true} answer={section.getAnswerByField(FIELDS.TEACHER_DISTRICT)}\r\n                                        label=\"What school or district are you currently employed in?\" />\r\n                                </FieldRow>\r\n                                {teacherDistrict?.value === '-4' &&\r\n                                    <FieldRow>                                \r\n                                        <TextAnswer isRequired={true} answer={section.getAnswerByField(FIELDS.UNLISTED_TEACHER_DISTRICT)} \r\n                                            inputLabel=\"What is the name of the unlisted school district?\" />\r\n                                    </FieldRow>\r\n                                }\r\n                            </>\r\n                        }\r\n\r\n                    </FieldSection>\r\n                </FormSection>\r\n            </form>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\nexport default EditWorkingStudent;","import { useState } from \"react\";\r\nimport Checkbox from \"../../Checkbox\";\r\nimport { useEffect } from \"react\";\r\nimport HiddenInput from \"../../Utility/HiddenInput\";\r\nimport AnswerLock from \"../status/AnswerLock\";\r\nimport { repeatableFieldName } from \"../../Utility/RepeatableField\";\r\nimport { useFormContext } from \"react-hook-form\";\r\nimport { Component } from \"react\";\r\n\r\n/**\r\n * A selection of qualified boolean answers that together form a group under one question\r\n * @param {*} param0 \r\n * @returns {Comment}\r\n */\r\nfunction BooleanGroupQuestion({ section, fieldKey, label, disabled, ...props }) {\r\n\r\n    const allAnswers = section.getAllAnswersByField(fieldKey);\r\n\r\n    const lockExample = allAnswers.find(a => a.IsLocked);\r\n    const isDisabled = disabled || lockExample;\r\n    \r\n    return (\r\n        <div>\r\n            <h3>{label} <AnswerLock answer={lockExample}/></h3>\r\n            <ul>\r\n                {allAnswers.map((a, i) =>\r\n                    <li>\r\n                        <QualifiedBooleanAnswer answer={a} disabled={isDisabled} index={i} />\r\n                    </li>\r\n                )}\r\n            </ul>\r\n        </div>\r\n\r\n\r\n    );\r\n\r\n}\r\n\r\n/**\r\n * just one boolean answer in the larger group\r\n * @param {*} param0 \r\n * @returns {Component}\r\n */\r\nfunction QualifiedBooleanAnswer({answer, disabled, index, ...props}){\r\n\r\n \r\n    const idFieldName = repeatableFieldName(answer.FieldKey, index, \"Id\");\r\n    const qualifierFieldName = repeatableFieldName(answer.FieldKey, index, \"Qualifier\");\r\n    const responseFieldName = repeatableFieldName(answer.FieldKey, index, \"Response\");\r\n\r\n\r\n    const { errors, formState, getValues, setValue, handleSubmit, watch } = useFormContext();   \r\n   \r\n    useEffect(() => {\r\n      \r\n        setValue(responseFieldName, answer.Response);\r\n    \r\n    }, [])\r\n    \r\n    return (\r\n        <>\r\n            <HiddenInput name={idFieldName} value={answer.Id} />\r\n            <HiddenInput name={qualifierFieldName} value={answer.Qualifier} />\r\n            <Checkbox name={responseFieldName} {...props} disabled={disabled} label={answer.Description} />\r\n        </>\r\n    )\r\n}\r\n\r\nexport default BooleanGroupQuestion;","import { FormProvider, useForm, useFormContext } from \"react-hook-form\";\r\nimport FormSection from \"../../components/FormSection\";\r\nimport { FIELDS } from \"../../store/form/fields\";\r\nimport DateAnswer, { DateResolution } from \"../../components/answer/DateAnswer\";\r\nimport DropdownAnswer from \"../../components/answer/DropdownAnswer\";\r\nimport { FieldRow } from \"../../components/Forms/FieldSection\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport SectionStateIcon from \"../../components/progress/SectionStateIcon\";\r\nimport { useState } from \"react\";\r\nimport BooleanGroupQuestion from \"../../components/answer/question/BooleanGroupQuestion\";\r\n\r\n\r\n/**\r\n * \r\n * @param {SectionHelper} param0.section \r\n * @returns {Component}\r\n */\r\nfunction EditLicensePlans({ section }) {\r\n\r\n    const dispatch = useDispatch();\r\n    const methods = useFormContext({ mode: 'onBlur' });\r\n    const { errors, formState, getValues, setValue, handleSubmit, watch } = methods;\r\n\r\n    const onSubmit = (data) => {\r\n        section.saveAnswers(data, dispatch);\r\n    }\r\n\r\n    const onError = (e) => {\r\n\r\n    }\r\n     \r\n    const licenseType = watch(FIELDS.TEACHER_LICENSE_TYPE);\r\n\r\n    return (\r\n        <FormProvider {...methods} >\r\n            <form onSubmit={handleSubmit(onSubmit, onError)} >\r\n                <FormSection title={section.title} isEditable={true} status={<SectionStateIcon section={section} />}\r\n                    onSaveClick={handleSubmit(onSubmit, onError)} loading={section.isLoading} >\r\n\r\n                    <FieldRow>\r\n                        <DropdownAnswer answer={section.getAnswerByField(FIELDS.TEACHER_LICENSE_TYPE)} isRequired={true}                         \r\n                            label=\"What license are you pursuing?\" />\r\n                    </FieldRow>\r\n\r\n                    {licenseType === 'Teaching' &&\r\n                        <FieldRow>\r\n                            <BooleanGroupQuestion section={section} fieldKey={FIELDS.TEACHER_LICENSE_ENDORSEMENTS} isRequired={true}\r\n                                label=\"Tell us the endorsement or preliminary license type\" />\r\n                        </FieldRow>\r\n                    }\r\n\r\n                    <FieldRow>\r\n                        <DateAnswer answer={section.getAnswerByField(FIELDS.TEACHER_LISENCE_BEGIN)}\r\n                            isRequired={true} resolution={DateResolution.MONTH}\r\n                            label=\"The date your preliminary licensure program began or will begin\" />\r\n                    </FieldRow>\r\n                    <FieldRow>\r\n                        <DateAnswer answer={section.getAnswerByField(FIELDS.TEACHER_LICENSE_COMPLETE)}\r\n                            isRequired={true} resolution={DateResolution.MONTH}\r\n                            label=\"The date you anticipate graduating the program with your license\" />\r\n\r\n                    </FieldRow>\r\n\r\n                </FormSection>\r\n            </form>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\nexport default EditLicensePlans;","import { FIELDS } from \"../../store/form/fields\";\r\nimport { useState, useEffect } from \"react\";\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport Button from \"../../components/Button\";\r\nimport PortalView from \"./../../components/Global/PortalView\";\r\nimport CompleteSubmission from \"../../components/CompleteSubmission\";\r\nimport apiClient from \"../../utils/API\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { open } from \"../../store/snack/actions\";\r\nimport EditCollegeChoice from \"./EditCollegeChoice\";\r\nimport EditCollegePlan from \"../additional-scholarship-info/EditCollegePlan\";\r\nimport AppHeader from \"../../components/application/AppHeader\";\r\nimport SectionFormHelper from \"../../utils/helper/SectionHelper\";\r\nimport { useRef } from \"react\";\r\nimport ProgressHeader from \"../../components/application/ProgressHeader\";\r\nimport ApplicationInfo from \"../../utils/dtos/ApplicationInfo\";\r\nimport EditAboutMe from \"./EditAboutMe\";\r\nimport EditWorkingStudent from \"./EditWorkingStudent\";\r\nimport EditLicensePlans from \"./EditLicensePlans\";\r\nimport SectionStateIcon from \"../../components/progress/SectionStateIcon\";\r\nimport ProgramInfo from \"../../utils/dtos/ProgramInfo\";\r\n\r\n\r\nconst PROGRAM_CODE = \"OTSP\";\r\n\r\n/**\r\n * full Oregon Teacher Scholars application\r\n * @returns {Component}\r\n */\r\nfunction OTSP() {\r\n    const { year } = useParams();\r\n    const activeYear = parseInt(year);\r\n\r\n    const methods = useForm({ mode: \"onBlur\", });\r\n\r\n    const dispatch = useDispatch();\r\n\r\n\r\n    const sectionGroup = new SectionFormHelper(useState(null), PROGRAM_CODE);\r\n    const collegeChoiceSection = sectionGroup.create(useState(null), useRef(), [\r\n        FIELDS.COLLEGE_CHOICE,\r\n        FIELDS.COLLEGE_DUAL_ENROLLED,\r\n        FIELDS.COLLEGE_STANDING,\r\n        FIELDS.NATIONAL_GUARD__CREDITS_FALL,\r\n        FIELDS.NATIONAL_GUARD__CREDITS_WINTER,\r\n        FIELDS.NATIONAL_GUARD__CREDITS_SPRING,\r\n    ], 'College Choice');\r\n    const collegePlansSection = sectionGroup.create(useState(null), useRef(), [\r\n        FIELDS.DEGREES,\r\n        FIELDS.CAREER_GOAL\r\n    ], 'College Plans');\r\n    const workingSection = sectionGroup.create(useState(null), useRef(), [\r\n        FIELDS.TEACHER_WORKING,\r\n        FIELDS.TEACHER_WORKING20HOURS,\r\n        FIELDS.TEACHER_WORKINGKTHRU12,\r\n        FIELDS.TEACHER_ROLE,\r\n        FIELDS.TEACHER_DISTRICT,\r\n        FIELDS.UNLISTED_TEACHER_DISTRICT\r\n    ], 'Working Student');\r\n    const licensingSection = sectionGroup.create(useState(null), useRef(), [\r\n        FIELDS.TEACHER_LICENSE_TYPE,\r\n        FIELDS.TEACHER_LICENSE_ENDORSEMENTS,\r\n        FIELDS.TEACHER_LISENCE_BEGIN,\r\n        FIELDS.TEACHER_LICENSE_COMPLETE\r\n    ], 'Licensing');\r\n    const aboutMeSection = sectionGroup.create(useState(null), useRef(), [\r\n        FIELDS.ED_LEVEL_FATHER,\r\n        FIELDS.ED_LEVEL_MOTHER,\r\n        FIELDS.TEACHER_FLUENCY,\r\n        FIELDS.TEACHER_SCHOLARS_REFERRAL,\r\n    ], 'About Me');\r\n\r\n\r\n\r\n    const [programData, setProgramData] = useState(null);\r\n    const [applicationData, setApplicationData] = useState(null);\r\n    const application = new ApplicationInfo(applicationData);\r\n    const program = new ProgramInfo(programData);\r\n    const season = program.getSeason(activeYear);\r\n\r\n    useEffect(() => {\r\n        (async () => {\r\n            \r\n            const [program, answers, application] = await Promise.all([\r\n                apiClient.getProgram(PROGRAM_CODE),\r\n                sectionGroup.fetchState(activeYear),\r\n                apiClient.getApplication(PROGRAM_CODE, activeYear)\r\n            ]);\r\n            if (!application.IsStarted){\r\n                await apiClient.startApplication(PROGRAM_CODE, activeYear);\r\n                application.IsStarted = true;\r\n            }\r\n            setProgramData(program);\r\n            setApplicationData(application);\r\n\r\n        })();\r\n    }, [])\r\n\r\n\r\n\r\n    const onError = (errors, e) => {\r\n        // console.log(\"ERROR\", errors, e);\r\n    };\r\n\r\n    const [showConfirmation, setShowConfirmation] = useState(false);\r\n    const onEdit = () => {\r\n        setShowConfirmation(false);\r\n        window.location.reload(true);\r\n    }\r\n\r\n    const onApplicationSubmit = (e) => {\r\n\r\n        (async () => {\r\n            try {\r\n                await apiClient.submitApplication(PROGRAM_CODE, activeYear);\r\n                setShowConfirmation(true);\r\n                dispatch(\r\n                    open({\r\n                        message: \"Submitted Successfully\",\r\n                        severity: \"success\",\r\n                    })\r\n                );\r\n            }\r\n            catch (ex) {\r\n                dispatch(\r\n                    open({\r\n                        message: ex.message,\r\n                        severity: \"success\",\r\n                    })\r\n                );\r\n            }\r\n\r\n        })();\r\n    }\r\n\r\n\r\n    return (\r\n        <FormProvider {...methods}>\r\n            <PortalView>\r\n                <div name=\"ApplicationsPage\">\r\n                    <AppHeader program={programData} year={activeYear} />\r\n\r\n\r\n                    {showConfirmation ? (\r\n                        <CompleteSubmission onEdit={onEdit} applicationHelper={sectionGroup} />\r\n                    ) : (\r\n                        <div className=\"wrapper\">\r\n\r\n                            <ProgressHeader sectionGroup={sectionGroup} app={application} />\r\n\r\n                            <div className=\"divider\" />\r\n\r\n                            <div className=\"form-wrapper rhythm\">\r\n\r\n                                <div ref={collegeChoiceSection.ref} >\r\n                                    <EditCollegeChoice section={collegeChoiceSection} season={season} />\r\n                                </div>\r\n\r\n\r\n                                <div ref={collegePlansSection.ref} >\r\n                                    <EditCollegePlan year={year} status={<SectionStateIcon section={collegePlansSection} />} section={collegePlansSection} />\r\n                                </div>\r\n\r\n                                <div ref={workingSection.ref}>\r\n                                    <EditWorkingStudent section={workingSection} />\r\n                                </div>\r\n\r\n                                <div ref={licensingSection.ref}>\r\n                                    <EditLicensePlans section={licensingSection} />\r\n                                </div>\r\n\r\n                                <div ref={aboutMeSection.ref}>\r\n                                    <EditAboutMe section={aboutMeSection} />\r\n                                </div>\r\n\r\n                                {/* Save/Cancel Buttons */}\r\n                                <div className=\"grant-action-buttons\">\r\n\r\n\r\n                                    {!application.isSubmitted &&\r\n                                        <Button\r\n                                            name=\"Submit\"\r\n                                            label=\"Submit\"\r\n                                            variant=\"outline\"\r\n                                            type=\"submit\"\r\n                                            disabled={!sectionGroup.isComplete}\r\n                                            onClick={onApplicationSubmit}\r\n                                        />\r\n                                    }\r\n\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    )}\r\n                </div>\r\n            </PortalView>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\nexport default OTSP;\r\n","import sumBy from 'lodash/sumBy'\r\n\r\n/**\r\n * wrapper & interpretor for Award DTO from API\r\n */\r\nclass Award {\r\n\r\n    /**\r\n     * \r\n     * @param {Array<*>} data raw dtos from API\r\n     */\r\n    constructor(data) {\r\n        this._data = data;\r\n    }\r\n\r\n    /**\r\n     * total authorized amount\r\n     * \r\n     * @returns {number}\r\n     */\r\n    get authorizedAmount() {\r\n        if (!this._data)\r\n            return null;\r\n\r\n        const totalAuthAmount = sumBy(this._data, 'AuthorizedAmount');       \r\n        return totalAuthAmount;\r\n    }\r\n\r\n    /**\r\n     * do any of the awards have the given status\r\n     * @param {String} awardStatus \r\n     */\r\n    hasStatus(awardStatus) {\r\n        if (!this._data)\r\n            return null;\r\n\r\n        for (let award of this._data)\r\n            for (let status of award.Statuses)\r\n                if (status.StatusCode === awardStatus)\r\n                    return true;\r\n\r\n        return false;\r\n    }\r\n\r\n}\r\n\r\nexport default Award;","import { actions } from \"../../store\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport React, { useState, useEffect } from \"react\";\r\nimport { FieldSection, FieldRow, FieldSlot } from \"../../components/Forms/FieldSection\";\r\nimport FormSection from \"../../components/FormSection\";\r\nimport { FIELDS, TRANSCRIPT_QUESTIONS } from \"../../store/form/fields\";\r\nimport _get from \"lodash.get\";\r\nimport { open } from \"../../store/snack/actions\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport moment from \"moment\";\r\nimport TranscriptQuestion from \"../../components/answer/question/TranscriptQuestion\";\r\nimport SectionStateIcon from \"../../components/progress/SectionStateIcon\";\r\nimport apiClient from \"../../utils/API\";\r\nimport RequirementSet from \"../../utils/dtos/RequirementSet\";\r\n\r\n/**\r\n * section to prompt for just spring transcripts form a ChildCare perspective\r\n * @param {SectionHelper} param0.section \r\n * @param {Function} param0.onChange\r\n * @param {Function} param0.onCancel\r\n * @param {Number} param0.fafsaYear (optional)\r\n * @returns {Component}\r\n */\r\nfunction EditSpringTranscripts({ section, onChange, onCancel, fafsaYear = null }) {\r\n\r\n    const methods = useForm({ mode: \"onBlur\", });\r\n    const { setValue, handleSubmit, watch } = methods;\r\n\r\n    const reduxFormState = useSelector((state) => state.form);\r\n\r\n    const [loading, setLoading] = useState(false);\r\n    const dispatch = useDispatch();\r\n\r\n    const [transcriptCompletionData, setTranscriptCompletionData] = useState(null);   \r\n    const transcriptRequirements = new RequirementSet(transcriptCompletionData);\r\n\r\n    const orderedTranscriptQuestions = [   \r\n        TRANSCRIPT_QUESTIONS.SPRING_COLLEGE,\r\n        TRANSCRIPT_QUESTIONS.SPRING_HS,        \r\n    ].map(x => ({transcript: x, requirement: transcriptRequirements.get(x.name)}));\r\n\r\n    /**\r\n     * fetch latest completion data\r\n     */\r\n    const fetchTranscriptRequirements = async () => {\r\n        const completionData = await apiClient.getCompletionReport(\"CC\", section.year, section.fieldKeys);\r\n        setTranscriptCompletionData(completionData);\r\n    }\r\n\r\n    useEffect(() =>{\r\n        (async () => {\r\n            await fetchTranscriptRequirements();\r\n        })();        \r\n    }, [section.answers._data]);\r\n\r\n    const onSubmit = async (data, e) => {\r\n        try {\r\n            setLoading(true);\r\n            const result = await actions.submitForm(data, [], []);\r\n            if (typeof onChange === \"function\") {\r\n                onChange(true);\r\n            }       \r\n            dispatch(\r\n                open({\r\n                    message: \"Transcripts Saved\",\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        } catch (e) {\r\n            dispatch(\r\n                open({\r\n                    message: e.message,\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        } finally {\r\n            setLoading(false);\r\n        }\r\n    };\r\n\r\n    const onError = (errors, e) => {\r\n        // console.log('ERROR', errors, e);\r\n    };\r\n\r\n    useEffect(() => {\r\n        window.addEventListener(\"beforeunload\", alertUser);\r\n        return () => {\r\n            window.removeEventListener(\"beforeunload\", alertUser);\r\n        };\r\n    }, []);\r\n\r\n    const alertUser = (e) => {\r\n        e.preventDefault();\r\n        e.returnValue = \"\";\r\n    };\r\n\r\n    const [isAttendingCollege, setIsAttendingCollege] = useState(null);\r\n    const [clgWithInTenYears, setClgWithInTenYears] = useState(null);\r\n    const [clgOverTenYears, setClgOverTenYears] = useState(null);\r\n\r\n\r\n    useEffect(() => {\r\n        const pastColleges = _get(reduxFormState, `fields.${FIELDS.PAST_COLLEGE}`);\r\n\r\n\r\n\r\n        const currentColleges = _get(\r\n            reduxFormState,\r\n            `fields.${FIELDS.CURRENT_COLLEGE}`\r\n        );\r\n        if (\r\n            currentColleges &&\r\n            Array.isArray(currentColleges) &&\r\n            currentColleges.length > 0\r\n        ) {\r\n            setIsAttendingCollege(true);\r\n            setClgWithInTenYears(true);\r\n        } else {\r\n            setIsAttendingCollege(false);\r\n        }\r\n\r\n        if (\r\n            pastColleges &&\r\n            Array.isArray(pastColleges) &&\r\n            pastColleges.length > 0\r\n        ) {\r\n            const now = moment();\r\n            const overTenYears = pastColleges.some((college) => {\r\n                const gradDate = _get(college, `AttendedStop.value`);\r\n                const startDate = _get(college, `AttendedStart.value`);\r\n\r\n                if (gradDate) {\r\n                    const elapsedYears = now.diff(moment(gradDate), \"years\");\r\n                    if (elapsedYears > 10) {\r\n                        return true;\r\n                    }\r\n                }\r\n\r\n                if (startDate) {\r\n                    const elapsedYears = now.diff(moment(startDate), \"years\");\r\n                    if (elapsedYears > 10) {\r\n                        return true;\r\n                    }\r\n                }\r\n            });\r\n            setClgOverTenYears(overTenYears);\r\n        }\r\n    }, [reduxFormState]);\r\n\r\n    return (\r\n        <FormProvider {...methods}>     \r\n            <form onSubmit={handleSubmit(onSubmit, onError)}>\r\n                <FormSection\r\n                    title=\"Transcripts\"\r\n                    isEditable={true}\r\n                    onSaveClick={handleSubmit(onSubmit, onError)}\r\n                    onCancelClick={onCancel}\r\n                    loading={loading}\r\n                    status={<SectionStateIcon section={section} />}\r\n                >\r\n                    <FieldSection>\r\n                        <FieldRow>\r\n                            <FieldSlot md={12}>\r\n                                <h4 className=\"heading heading--h4\">Transcript Instructions</h4>\r\n                                <ul className=\"list\">\r\n                                    {clgWithInTenYears && (\r\n                                        <li className=\"li\">\r\n                                            <div>College Grades, Recent (within last 10 years)</div>\r\n                                            <div>\r\n                                                <ul className=\"list\">\r\n                                                    <li className=\"li\">\r\n                                                        Submit transcripts of all college coursework taken\r\n                                                        between August {fafsaYear - 11} and Fall\r\n                                                        Quarter/Semester {fafsaYear - 1}.\r\n                                                    </li>\r\n                                                    <li className=\"li\">\r\n                                                        If you attended more than one college, submit a\r\n                                                        transcript for each college, including work on prior\r\n                                                        degrees.\r\n                                                    </li>\r\n                                                    <li className=\"li\">\r\n                                                        Transfer credits are not accepted. Each college must\r\n                                                        have a complete transcript.\r\n                                                    </li>\r\n                                                </ul>\r\n                                            </div>\r\n                                        </li>\r\n                                    )}\r\n                                    {isAttendingCollege && (\r\n                                        <li className=\"li\">\r\n                                            <div>College Grades, Started within last year</div>\r\n                                            <div>\r\n                                                <p>\r\n                                                    If you have completed only one semester or term of\r\n                                                    college, a complete high school/home school transcript\r\n                                                    or GED<sup style={{ verticalAlign: \"super\", fontSize: \".9rem\" }}>&reg;</sup> scores is optional, but recommended as part of\r\n                                                    the selection process.\r\n                                                </p>\r\n                                            </div>\r\n                                        </li>\r\n                                    )}\r\n                                    {clgOverTenYears && (\r\n                                        <li className=\"li\">\r\n                                            <div>College Grades, Prior (before 10 years ago)</div>\r\n                                            <div>\r\n                                                <p>\r\n                                                    You may also submit pre-{fafsaYear - 11} college\r\n                                                    transcripts that document academic achievement.\r\n                                                </p>\r\n                                                <p>\r\n                                                    Submit transcripts of all college coursework taken\r\n                                                    before August {fafsaYear - 11} or your complete high\r\n                                                    school transcript. If you attended more than one\r\n                                                    college, submit a transcript for each college,\r\n                                                    including work on prior degrees.\r\n                                                </p>\r\n                                            </div>\r\n                                        </li>\r\n                                    )}\r\n                                    {isAttendingCollege &&\r\n                                        (clgOverTenYears || clgWithInTenYears) && (\r\n                                            <li className=\"li\">\r\n                                                <div>\r\n                                                    College Grades, Prior Grades but Recently started\r\n                                                    again\r\n                                                </div>\r\n                                                <div>\r\n                                                    <p>\r\n                                                        If you have completed only one semester or term of\r\n                                                        college, a complete high school/home school\r\n                                                        transcript or GED<sup style={{ verticalAlign: \"super\", fontSize: \".9rem\" }}>&reg;</sup> transcript is optional, but\r\n                                                        recommended as part of the selection process.\r\n                                                    </p>\r\n                                                </div>\r\n                                            </li>\r\n                                        )}\r\n                                </ul>\r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n                    </FieldSection>\r\n\r\n       \r\n                    <FieldSection>\r\n                        <FieldRow>\r\n                            <FieldSlot md={12}>\r\n                                <div className=\"mt-05\">\r\n                                    {orderedTranscriptQuestions.filter(x => x.requirement?.isSkipped === false).map(question =>\r\n                                        <TranscriptQuestion\r\n                                            titleHeader={question.transcript.description}\r\n                                            section={section}\r\n                                            transcriptField={question.transcript}\r\n                                            isRequired={question.requirement?.isRequired === true}\r\n                                        />\r\n                                    )}\r\n                                </div>                             \r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n                    </FieldSection>\r\n\r\n                    <FieldSection>\r\n                        <FieldRow>\r\n                            <FieldSlot md={12}>\r\n                                <div className=\"mt-05\">                                   \r\n                                    <TranscriptQuestion\r\n                                        titleHeader={TRANSCRIPT_QUESTIONS.CHILDCARE_EXPENSES.description}\r\n                                        section={section}\r\n                                        transcriptField={TRANSCRIPT_QUESTIONS.CHILDCARE_EXPENSES}\r\n                                        isRequired={true}\r\n                                    />                                \r\n                                </div>                             \r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n                    </FieldSection>\r\n\r\n\r\n                </FormSection>\r\n            </form>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\nexport default EditSpringTranscripts;\r\n","import { Alert } from '@material-ui/lab';\r\nimport CollegePicker from \"../../CollegePicker-modified\";\r\nimport { FieldRow } from \"../../Forms/FieldSection\";\r\nimport { FIELDS } from \"../../../store/form/fields\";\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport { useDispatch } from 'react-redux';\r\nimport FormSection from '../../FormSection';\r\nimport BooleanAnswer from '../BooleanAnswer';\r\nimport DecimalAnswer from '../DecimalAnswer';\r\nimport CertifyAnswer from '../CertifyAnswer';\r\n\r\n\r\n/**\r\n * child care college history questions\r\n * @returns {Component}\r\n */\r\nfunction CollegeHistorySection({ status, onChange, section }) {\r\n    const methods = useForm({ mode: \"onBlur\", });\r\n    const { errors, formState, getValues, setValue, handleSubmit, watch } = methods;\r\n    const dispatch = useDispatch();\r\n\r\n    const onSubmit = (data, e) => {\r\n        section.saveAnswers(data, dispatch);        \r\n    }\r\n    const onError = async (data, e) => {\r\n        //just display validations is enough\r\n    }\r\n\r\n    return (\r\n        <FormProvider {...methods} >\r\n            <form onSubmit={handleSubmit(onSubmit, onError)} >\r\n                <FormSection title='College History' isEditable={true} onSaveClick={handleSubmit(onSubmit, onError)} loading={section.isAnswerLoading} status={status} displayOnLoad={true}>\r\n\r\n                    <Alert severity=\"success\" color=\"warning\" className=\"alert alert--success\">\r\n                        All college history is required\r\n                    </Alert>\r\n\r\n\r\n                    <CollegePicker section={section}/>\r\n\r\n                    <div className=\"input-field\" alignItems=\"baseline\">                   \r\n                        <CertifyAnswer answer={section.getAnswerByField(FIELDS.COLLEGE_HISTORY_COMPLETE)} \r\n                            isRequired={false} \r\n                            label={<>I have no college history / I have entered all my college history. <span style={{color:'red'}}>*</span> </> }/>\r\n                    </div>\r\n\r\n                    <div className=\"input-field\">                     \r\n                        <BooleanAnswer answer={section.getAnswerByField(FIELDS.FINISHED_COMM_COLLEGE)} isRequired={true} \r\n                            label={<>Will you have finished two academic years towards a degree or certificate at community college by July 1, {section.year}?</>} />\r\n                    </div>\r\n\r\n\r\n                    <div container className=\"input-field\">                  \r\n                        <BooleanAnswer answer={section.getAnswerByField(FIELDS.FINISHED_BACHELORS_DEGREE)} isRequired={true} \r\n                            label={<>Will you have earned your Bachelor's degree by Fall {section.year}?</>}/>\r\n                    </div>\r\n\r\n\r\n                    <div className=\"input-field rhythm\">\r\n                        <h4 className=\"heading heading--h5\">Cumulative GPA(s)</h4>\r\n                        <FieldRow className=\"rhythm\">\r\n                            <DecimalAnswer answer={section.getAnswerByField(FIELDS.UNDERGRAD_GPA)} inputLabel=\"Undergraduate GPA\" />\r\n                            <DecimalAnswer answer={section.getAnswerByField(FIELDS.GRADUATE_GPA)} inputLabel=\"Graduate GPA\" />\r\n                        </FieldRow>\r\n                    </div>\r\n\r\n\r\n                </FormSection>\r\n            </form>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\nexport default CollegeHistorySection;","import { useSelector } from \"react-redux\";\r\nimport React, { useState, useEffect } from \"react\";\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport Button from \"../../components/Button\";\r\nimport { FieldRow, FieldSlot } from \"../../components/Forms/FieldSection\";\r\nimport Card from \"../../components/Card\";\r\nimport CardContent from \"@material-ui/core/CardContent\";\r\nimport CardActions from \"@material-ui/core/CardActions\";\r\nimport MaterialButton from \"@material-ui/core/Button\";\r\nimport { FIELDS } from \"../../store/form/fields\";\r\nimport { Alert, AlertTitle } from '@material-ui/lab';\r\nimport _get from \"lodash.get\";\r\nimport { useDispatch } from 'react-redux';\r\nimport { actions } from '../../store';\r\nimport FormSection from \"../../components/FormSection\";\r\nimport { open } from \"../../store/snack/actions\";\r\nimport {toBoolean} from \"../../utils\";\r\nimport TextAnswer, {TextVariant} from \"../../components/answer/TextAnswer\";\r\nimport DateAnswer from \"../../components/answer/DateAnswer\";\r\nimport BooleanAnswer from \"../../components/answer/BooleanAnswer\";\r\nimport DropdownAnswer from \"../../components/answer/DropdownAnswer\";\r\n\r\n\r\n/**\r\n * child care providers component\r\n * \r\n * @param {Component} arg.status\r\n * @param {Function} arg.onChange\r\n * @param {SectionHelper} arg.section \r\n */\r\nfunction ChildCareProviderSection({ status, onChange, section }) {\r\n    const methods = useForm({\r\n        mode: \"onBlur\",\r\n    });\r\n    const { errors, formState, getValues, setValue, handleSubmit, watch } = methods;\r\n    const dispatch = useDispatch();\r\n\r\n    const formsState = useSelector((state) => state.form);\r\n   \r\n    const provider1ListedWatch = toBoolean(watch(FIELDS.CHILD_CARE_PROVIDER__LISTED));\r\n    const provider1RegisteredWatch = toBoolean(watch(FIELDS.CHILD_CARE_PROVIDER__REGISTERED));\r\n    const provider1ParentWatch = toBoolean(watch(FIELDS.CHILD_CARE_PROVIDER__PARENT));\r\n    const provider2ListedWatch = toBoolean(watch(FIELDS.CHILD_CARE_PROVIDER2__LISTED));\r\n    const provider2RegisteredWatch = toBoolean(watch(FIELDS.CHILD_CARE_PROVIDER2__REGISTERED));\r\n    const provider2ParentWatch = toBoolean(watch(FIELDS.CHILD_CARE_PROVIDER2__PARENT));\r\n                \r\n    /**\r\n     * given these provider traits, is it valid for child care grant\r\n     * @param {*} providerListed \r\n     * @param {*} providerRegistered \r\n     * @param {*} providerParent \r\n     * @returns \r\n     */\r\n    function isProviderValid(providerListed, providerRegistered, providerParent) {\r\n        // if (section.isAnswerLoading)\r\n        //     return;\r\n        if (providerListed === null || providerRegistered === null || providerParent === null) {\r\n            return true; //innocent until proven guilty                            \r\n        }\r\n       \r\n        const isValid = (providerListed === true || providerRegistered === true) && providerParent === false;\r\n        return isValid;          \r\n    }\r\n   \r\n    const providerValid = isProviderValid(provider1ListedWatch, provider1RegisteredWatch, provider1ParentWatch)\r\n    const secondProviderValid = isProviderValid(provider2ListedWatch, provider2RegisteredWatch, provider2ParentWatch);\r\n  \r\n    const [show2ndProvider, setShow2ndProvider] = useState(false);\r\n    useEffect(() => {\r\n        formsState.fields[FIELDS.CHILD_CARE_PROVIDER2__NAME]?.value && setShow2ndProvider(true);\r\n    }, [formsState]);\r\n\r\n    useEffect(() => {\r\n        if (show2ndProvider === false) {\r\n            // console.log('show 2nd provider is false', show2ndProvider)\r\n            setValue(FIELDS.CHILD_CARE_PROVIDER2__NAME, null);\r\n            setValue(FIELDS.CHILD_CARE_PROVIDER2__ADDRESS, null);\r\n            setValue(FIELDS.CHILD_CARE_PROVIDER2__STATE, null);\r\n            setValue(FIELDS.CHILD_CARE_PROVIDER2__CITY, null);\r\n            setValue(FIELDS.CHILD_CARE_PROVIDER2__ZIP, null);\r\n            setValue(FIELDS.CHILD_CARE_PROVIDER2__PHONE, \"\");\r\n            setValue(FIELDS.CHILD_CARE_PROVIDER2__START_DATE, \"\");\r\n            setValue(FIELDS.CHILD_CARE_PROVIDER2__NEW, null);\r\n            setValue(FIELDS.CHILD_CARE_PROVIDER2__LISTED, null);\r\n            setValue(FIELDS.CHILD_CARE_PROVIDER2__REGISTERED, null);\r\n            setValue(FIELDS.CHILD_CARE_PROVIDER2__PARENT, null);\r\n        }\r\n    }, [show2ndProvider]);\r\n\r\n\r\n    const handleRemoveAdditionalProvider = () => {\r\n        setShow2ndProvider(false);\r\n    };\r\n\r\n    const handleAddProvider = () => {\r\n        setShow2ndProvider(true);\r\n    };\r\n\r\n    const watchERDC = watch(FIELDS.IsReceivingERDCSubsidy);\r\n    const isERDCRecipient = toBoolean(watchERDC);\r\n\r\n\r\n    const onSubmit = async (data, e) => {\r\n        try {\r\n            await actions.submitForm(data, [], [], section.year);\r\n            \r\n            if (onChange)\r\n                onChange();\r\n\r\n            dispatch(\r\n                open({\r\n                    message: \"Saved Providers Successfully\",\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        } catch (e) {\r\n            dispatch(open({\r\n                message: e.message,\r\n                severity: \"success\",\r\n            }))\r\n        }\r\n\r\n    }\r\n    const onError = async (data, e) => {\r\n        console.log(errors);\r\n        //just display validations is enough\r\n    }\r\n\r\n\r\n    return (\r\n        <FormProvider {...methods} >\r\n            <form>\r\n                <FormSection title='Providers' isEditable={true} onSaveClick={handleSubmit(onSubmit, onError)} loading={section.isAnswerLoading} displayOnLoad={true} status={status}>\r\n                    <div className=\"input-field\">\r\n                        <FieldRow>\r\n                            <FieldSlot>                                \r\n                                <BooleanAnswer answer={section.getAnswerByField(FIELDS.IsReceivingERDCSubsidy)} isRequired={true}\r\n                                    label=\"Are you currently receiving the Employment Related Daycare Subsidy (ERDC) from the Department of Early Learning and Care (formerly part of Oregon Department of Human Services, ODHS)?\" />\r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n                        {isERDCRecipient &&\r\n                            <FieldRow>\r\n                                <FieldSlot>                                \r\n                                    <DateAnswer answer={section.getAnswerByField(FIELDS.ERDCSubsidyExpirationDate)} isRequired={true} \r\n                                        label=\"When will your ERDC subsidy expire? (Please note, students cannot receive the ERDC subsidy and the Oregon Student Child Care Grant)\" />\r\n                                </FieldSlot>\r\n                            </FieldRow>   \r\n                        }                                            \r\n                    </div>\r\n                    <div className=\"input-field\">\r\n                        <FieldRow>\r\n                            <FieldSlot>                                \r\n                                <TextAnswer answer={section.getAnswerByField(FIELDS.CHILD_CARE_PROVIDER__NAME)} inputLabel=\"Company Name or Full Name\" isRequired={true} />\r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n                        <FieldRow>\r\n                            <FieldSlot>\r\n                                <TextAnswer answer={section.getAnswerByField(FIELDS.CHILD_CARE_PROVIDER__ADDRESS)} inputLabel=\"Street Address\" isRequired={true} variant={TextVariant.ADDRESS} />\r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n                        <FieldRow>\r\n                            <FieldSlot>\r\n                                <DropdownAnswer answer={section.getAnswerByField(FIELDS.CHILD_CARE_PROVIDER__STATE)} label=\"State\" isRequired={true} />\r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n                        <FieldRow>\r\n                            <FieldSlot>\r\n                                <TextAnswer answer={section.getAnswerByField(FIELDS.CHILD_CARE_PROVIDER__CITY)} inputLabel=\"City\" isRequired={true} />\r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n                        <FieldRow>\r\n                            <FieldSlot>\r\n                                <TextAnswer answer={section.getAnswerByField(FIELDS.CHILD_CARE_PROVIDER__ZIP)} variant={TextVariant.ZIPCODE}\r\n                                        inputLabel=\"Zip Code\" isRequired={true} placeholder=\"Zip Code\" />\r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n\r\n                        <FieldRow>\r\n                            <FieldSlot>\r\n                                <TextAnswer answer={section.getAnswerByField(FIELDS.CHILD_CARE_PROVIDER__PHONE)} inputLabel=\"Phone Number\" isRequired={true} \r\n                                        variant={TextVariant.TELEPHONE} placeholder=\"Phone Number with Area Code\" />\r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n                        <FieldRow>\r\n                            <FieldSlot>\r\n                                <DateAnswer answer={section.getAnswerByField(FIELDS.CHILD_CARE_PROVIDER__START_DATE)} isRequired={true} label=\"Start Date\" />\r\n                            </FieldSlot>\r\n                        </FieldRow>\r\n                    </div>\r\n\r\n                    <div className=\"input-field\">\r\n                        <BooleanAnswer answer={section.getAnswerByField(FIELDS.CHILD_CARE_PROVIDER__NEW)} isRequired={true}\r\n                            label=\"Is this a new provider?\" />\r\n                    </div>\r\n                    <div className=\"input-field\">                       \r\n                        <BooleanAnswer answer={section.getAnswerByField(FIELDS.CHILD_CARE_PROVIDER__LISTED)} isRequired={true}\r\n                            label=\"Is this provider listed with Oregon Department of Human Services?\" />\r\n                    </div>\r\n                    <div className=\"input-field\">                      \r\n                        <BooleanAnswer answer={section.getAnswerByField(FIELDS.CHILD_CARE_PROVIDER__REGISTERED)} isRequired={true} \r\n                            label=\"Is this provider registered or certified with the Child Care Division (CCD), Oregon Department of Employment?\"/>\r\n                    </div>\r\n                    <div className=\"input-field\">                     \r\n                        <BooleanAnswer answer={section.getAnswerByField(FIELDS.CHILD_CARE_PROVIDER__PARENT)} isRequired={true} \r\n                            label=\" Is this provider the child's/children's birth parent or your spouse/partner?\"/>\r\n                    </div>\r\n\r\n                    {!providerValid && <div item>\r\n                        <Alert severity=\"error\" className=\"alert alert--error\">\r\n                            <AlertTitle>Not eligible</AlertTitle>\r\n                            <p><strong>Provider does not appear to be eligible. Please check your answers. For more information visit <a href=\"https://www.OregonStudentAid.gov\" target=\"_blank\">www.OregonStudentAid.gov</a></strong></p>\r\n                        </Alert>\r\n                    </div>}\r\n\r\n                    {show2ndProvider &&\r\n\r\n                        <Card>\r\n                            <CardContent>\r\n                                <h4 className=\"heading heading--h4\">\r\n                                    Additional Child Care Provider\r\n                                </h4>\r\n                                <div container className=\"input-field\">\r\n                                    <FieldRow>\r\n                                        <FieldSlot>\r\n                                            <TextAnswer answer={section.getAnswerByField(FIELDS.CHILD_CARE_PROVIDER2__NAME)} isRequired={true} inputLabel=\"Company Name or Full Name\" />\r\n                                        </FieldSlot>\r\n                                    </FieldRow>\r\n                                    <FieldRow>\r\n                                        <FieldSlot>\r\n                                            <TextAnswer variant={TextVariant.ADDRESS} answer={section.getAnswerByField(FIELDS.CHILD_CARE_PROVIDER2__ADDRESS)} isRequired={true} inputLabel=\"Street Address\" placeholder=\"Street Address\" />\r\n                                        </FieldSlot>\r\n                                    </FieldRow>\r\n\r\n                                    <FieldRow>\r\n                                        <FieldSlot>\r\n                                            <DropdownAnswer answer={section.getAnswerByField(FIELDS.CHILD_CARE_PROVIDER2__STATE)} isRequired={true} label=\"State\" placeholder=\"State\" />\r\n                                        </FieldSlot>\r\n                                    </FieldRow>\r\n\r\n                                    <FieldRow>\r\n                                        <FieldSlot>\r\n                                            <TextAnswer answer={section.getAnswerByField(FIELDS.CHILD_CARE_PROVIDER2__CITY)} isRequired={true} inputLabel=\"City\" placeholder=\"City\" />\r\n                                        </FieldSlot>\r\n                                    </FieldRow>\r\n\r\n                                    <FieldRow>\r\n                                        <FieldSlot>\r\n                                            <TextAnswer variant={TextVariant.ZIPCODE} answer={section.getAnswerByField(FIELDS.CHILD_CARE_PROVIDER2__ZIP)} isRequired={true} inputLabel=\"Zip Code\" placeholder=\"Zip Code\" />\r\n                                        </FieldSlot>\r\n                                    </FieldRow>\r\n\r\n                                    <FieldRow>\r\n                                        <FieldSlot>\r\n                                            <TextAnswer variant={TextVariant.TELEPHONE} answer={section.getAnswerByField(FIELDS.CHILD_CARE_PROVIDER2__PHONE)} isRequired={true} inputLabel=\"Phone Number\" placeholder=\"Phone Number with Area Code\" />\r\n                                        </FieldSlot>\r\n                                    </FieldRow>\r\n\r\n                                    <FieldRow>\r\n                                        <FieldSlot>\r\n                                            <DateAnswer answer={section.getAnswerByField(FIELDS.CHILD_CARE_PROVIDER2__START_DATE)} isRequired={true} label=\"Start Date\" />\r\n                                        </FieldSlot>\r\n                                    </FieldRow>\r\n                                </div>\r\n\r\n                                <div className=\"input-field\">\r\n                                    <div className=\"input-field\">                          \r\n                                        <BooleanAnswer answer={section.getAnswerByField(FIELDS.CHILD_CARE_PROVIDER2__NEW)} isRequired={true} label=\"Is this a new provider?\"/>\r\n                                    </div>\r\n                                    <div className=\"input-field\">                                        \r\n                                        <BooleanAnswer answer={section.getAnswerByField(FIELDS.CHILD_CARE_PROVIDER2__LISTED)} isRequired={true}\r\n                                            label=\"Is this provider listed with Oregon Department of Human Services?\" />\r\n                                    </div>\r\n                                    <div className=\"input-field\">                                      \r\n                                        <BooleanAnswer answer={section.getAnswerByField(FIELDS.CHILD_CARE_PROVIDER2__REGISTERED)} isRequired={true} \r\n                                            label=\"Is this provider registered or certified with the Child Care Division (CCD), Oregon Department of Employment?\"/>\r\n                                    </div>\r\n                                    <div className=\"input-field\">                                        \r\n                                        <BooleanAnswer answer={section.getAnswerByField(FIELDS.CHILD_CARE_PROVIDER2__PARENT)} isRequired={true}\r\n                                            label=\"Is this provider the child's/children's birth parent or your spouse or partner?\"/>\r\n                                    </div>\r\n                                    {!secondProviderValid && <div item>\r\n                                        <Alert severity=\"error\">\r\n                                            <AlertTitle>Not eligible</AlertTitle>\r\n                                            <p><strong>Provider does not appear to be eligible. Please check your answers. For more information visit <a href=\"https://www.OregonStudentAid.gov\" target=\"_blank\">www.OregonStudentAid.gov</a></strong></p>\r\n                                        </Alert>\r\n                                    </div>}\r\n                                </div>\r\n                            </CardContent>\r\n                            <CardActions style={{ justifyContent: \"flex-end\" }}>\r\n                                <MaterialButton\r\n                                    size=\"small\"\r\n                                    color=\"secondary\"\r\n                                    onClick={handleRemoveAdditionalProvider}\r\n                                >\r\n                                    Remove\r\n                                </MaterialButton>\r\n                            </CardActions>\r\n                        </Card>\r\n                    }\r\n                    {!show2ndProvider &&\r\n                        <Button name=\"Add2ndProvider\" label=\"+ Add Child Care Provider\" variant=\"text\" onClick={handleAddProvider} />\r\n                    }\r\n                </FormSection>\r\n            </form>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\nexport default ChildCareProviderSection;","import React, { Fragment } from \"react\";\r\nimport { useFormContext } from \"react-hook-form\";\r\nimport { repeatableFieldName } from '../Utility/RepeatableField';\r\nimport { FieldRow, FieldSlot } from '../Forms/FieldSection';\r\nimport Input from '../Input';\r\nimport MaskedDatePicker from '../MaskedDatePicker';\r\nimport HiddenInput from '../Utility/HiddenInput';\r\nimport NumericDecimal from '../NumericDecimal';\r\nimport Checkbox from '../Checkbox';\r\nimport { AnswerTypeChildProps } from '../../store/form/fields';\r\nimport AnswerLock from \"./status/AnswerLock\";\r\n\r\n/**\r\n * prompt for a dependent child who needs care.\r\n * \r\n * @param {*} param0 \r\n * @returns \r\n */\r\nfunction ChildAnswer({ answer, disabled }) {\r\n\r\n    const methods = useFormContext({ mode: 'onBlur' });\r\n    const { getValues } = methods;\r\n\r\n    const i = answer.Index;\r\n    const firstNameFieldName = repeatableFieldName(answer.FieldKey, i, AnswerTypeChildProps.FIRST_NAME);\r\n    const middleInitialFieldName = repeatableFieldName(answer.FieldKey, i, AnswerTypeChildProps.MIDDLE_INITIAL);\r\n    const lastNameFieldName = repeatableFieldName(answer.FieldKey, i, AnswerTypeChildProps.LAST_NAME);\r\n    const birthdayFieldName = repeatableFieldName(answer.FieldKey, i, AnswerTypeChildProps.BIRTHDATE);\r\n    const genderFieldName = repeatableFieldName(answer.FieldKey, i, AnswerTypeChildProps.GENDER);\r\n    const citizenshipFieldName = repeatableFieldName(answer.FieldKey, i, AnswerTypeChildProps.CITIZENSHIP);\r\n    const childCareFieldName = repeatableFieldName(answer.FieldKey, i, AnswerTypeChildProps.CHILD_CARE_NEEDED);\r\n    const disabilityFieldName = repeatableFieldName(answer.FieldKey, i, AnswerTypeChildProps.EXTRA_CARE_NEEDED);\r\n    const amountRequestedFieldName = repeatableFieldName(answer.FieldKey, i, AnswerTypeChildProps.AMOUNT);\r\n    const idFieldName = repeatableFieldName(answer.FieldKey, i, AnswerTypeChildProps.ID);\r\n\r\n    const isDisabled = disabled || answer.IsLocked;\r\n\r\n    return (\r\n        <Fragment key={answer.Id}>\r\n            <FieldRow>\r\n                <FieldSlot>\r\n                    <HiddenInput name={idFieldName} />\r\n                    <HiddenInput name={genderFieldName} value=\"X\" />\r\n                    <HiddenInput name={citizenshipFieldName} value=\"X\" />\r\n                    <Input disabled={isDisabled} \r\n                        name={firstNameFieldName} \r\n                        defaultValue={getValues(firstNameFieldName)} \r\n                        key={firstNameFieldName} \r\n                        inputLabel={<>First Name <AnswerLock answer={answer} /></>}\r\n                        placeholder='First Name' \r\n                        variant='outlined' isRequired={true} />\r\n                  \r\n                </FieldSlot>\r\n                <FieldSlot>\r\n                    <Input disabled={isDisabled} name={middleInitialFieldName} defaultValue={getValues(middleInitialFieldName)} key={middleInitialFieldName} fullWidth={false} inputLabel='Middle Initial' variant='outlined' placeholder='Middle Initial' inputProps={{ maxLength: 1, size: 1 }} />\r\n                </FieldSlot>\r\n                <FieldSlot>\r\n                    <Input disabled={isDisabled} name={lastNameFieldName} defaultValue={getValues(lastNameFieldName)} key={lastNameFieldName} inputLabel='Last Name' variant='outlined' placeholder='Last Name' isRequired={true} />\r\n                </FieldSlot>\r\n            </FieldRow>\r\n            <FieldRow>\r\n                <FieldSlot>\r\n                    <MaskedDatePicker disabled={isDisabled} name={birthdayFieldName} defaultValue={getValues(birthdayFieldName)} key={birthdayFieldName} label='Birthday' variant='outlined' isRequired={true} />\r\n                </FieldSlot>\r\n            </FieldRow>\r\n            <FieldRow>\r\n                <Checkbox disabled={isDisabled} name={childCareFieldName} label=\"This child requires child care\" />\r\n            </FieldRow>\r\n            <FieldRow >\r\n                <Checkbox disabled={isDisabled} name={disabilityFieldName} label=\"This child requires extra care due to disability\" />\r\n            </FieldRow>\r\n            <FieldRow>\r\n                <div>Amount Requested for child care per month</div>\r\n                <FieldSlot>\r\n                    <NumericDecimal disabled={isDisabled} \r\n                        name={amountRequestedFieldName} \r\n                        defaultValue={getValues(amountRequestedFieldName)} \r\n                        key={amountRequestedFieldName} \r\n                        inputLabel='Child Care Request' \r\n                        placeholder='Child Care Request' precision={1} isRequired={true} />\r\n                </FieldSlot>\r\n            </FieldRow>\r\n        </Fragment>\r\n    );\r\n}\r\n\r\nexport default ChildAnswer;","import React, { Fragment } from \"react\";\r\nimport FormSection from '../../components/FormSection';\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport { useDispatch } from 'react-redux';\r\nimport { actions } from '../../store';\r\nimport { open } from \"../../store/snack/actions\";\r\nimport { FIELDS } from '../../store/form/fields';\r\nimport RepeatableQuestion from \"../../components/answer/question/RepeatableQuestion\";\r\nimport ChildAnswer from \"../../components/answer/ChildAnswer\";\r\nimport Card from \"../../components/Card\";\r\nimport { FieldRow, FieldSlot } from '../../components/Forms/FieldSection';\r\nimport Button from '../../components/Button';\r\nimport CardActions from '@material-ui/core/CardActions';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport MaterialButton from '@material-ui/core/Button';\r\n\r\n\r\n/**\r\n * returns section prompting for all dependent children\r\n * \r\n * @param {*} param0 \r\n * @returns {Component}\r\n */\r\nfunction ChildrenSection({ section, year, status, onChange }) {\r\n    const methods = useForm({ mode: \"onBlur\", });\r\n    const { errors, formState, getValues, setValue, handleSubmit, watch } = methods;\r\n    const dispatch = useDispatch();\r\n\r\n    const onSubmit = async (data, e) => {\r\n        try {\r\n            const result = await actions.submitForm(data, [], [], year);\r\n            if (onChange)\r\n                onChange();\r\n\r\n            dispatch(\r\n                open({\r\n                    message: \"Saved Children in Household Successfully\",\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        } catch (e) {\r\n            dispatch(open({\r\n                message: e.message,\r\n                severity: \"success\",\r\n            }))\r\n        }\r\n\r\n    }\r\n\r\n    const onError = async (data, e) => {\r\n        //just display validations is enough\r\n    }\r\n\r\n    const answers = section.getAllAnswersByField(FIELDS.CHILDREN);\r\n    const isAddDisabled = answers.some(x => x.IsLocked); //any locked children is ground to lock the add too\r\n\r\n    return (\r\n        <FormProvider {...methods} >\r\n            <form onSubmit={handleSubmit(onSubmit, onError)} >\r\n                <FormSection title='Children In Household' isEditable={true} onSaveClick={handleSubmit(onSubmit, onError)} loading={false} status={status}>\r\n                    <p>List all of your legally dependent children younger than age 13 and your legally dependent children older than age 12 requiring extra care due to disability.</p>\r\n\r\n                    <RepeatableQuestion section={section} name={FIELDS.CHILDREN} >\r\n                        {(answers, handleAdd, handleDelete) => {\r\n                            return (\r\n                                <Fragment>\r\n                                    {answers.map((answer) =>\r\n                                        <Fragment key={answer.Id}>\r\n                                            <Card>\r\n                                                <CardContent>\r\n                                                    <ChildAnswer answer={answer} />\r\n                                                </CardContent>\r\n                                                <CardActions style={{ justifyContent: 'flex-end' }}>\r\n                                                    <MaterialButton size=\"small\" color=\"secondary\" \r\n                                                        disabled={answer.IsLocked}\r\n                                                        style={{ position: 'relative', bottom: '-1rem' }}\r\n                                                        onClick={handleDelete(answer)} >Remove</MaterialButton>\r\n                                                </CardActions>\r\n                                            </Card>\r\n                                        </Fragment>\r\n                                    )}\r\n                                    <FieldRow>\r\n                                        <FieldSlot>\r\n                                            <Button name='AddChild' label='+ Add Child' variant='text' style={{ textTransform: \"capitalize\" }}\r\n                                                disabled={isAddDisabled}\r\n                                                onClick={handleAdd({ Id: 0, AnswerType: 'Dependent' })} />\r\n                                        </FieldSlot>\r\n                                    </FieldRow>\r\n                                </Fragment>\r\n                            )\r\n                        }}\r\n                    </RepeatableQuestion>\r\n                </FormSection>\r\n            </form>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\nexport default ChildrenSection;","import { actions } from \"./../../store\";\r\nimport { useSelector } from \"react-redux\";\r\nimport React, { useState, useRef, useEffect } from \"react\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport PrintIcon from \"../../components/PrintIcon\";\r\nimport PortalView from \"./../../components/Global/PortalView\";\r\nimport CompleteSubmission from \"../../components/CompleteSubmission\";\r\nimport { FIELDS } from \"../../store/form/fields\";\r\nimport ProgramInfo from \"../../utils/dtos/ProgramInfo\";\r\nimport ApplicationInfo from \"../../utils/dtos/ApplicationInfo\";\r\nimport Award from \"../../utils/dtos/Award\";\r\nimport apiClient from \"../../utils/API\";\r\nimport { useHistory, useParams } from \"react-router\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { open } from \"../../store/snack/actions\";\r\nimport _get from \"lodash.get\";\r\nimport EditSpringTranscripts from \"./EditSpringTranscripts\"\r\nimport EditCollegePlan from \"../additional-scholarship-info/EditCollegePlan\";\r\nimport EditCollegeOfChoice from \"../field-groups/EditCollegeOfChoice\";\r\nimport SectionFormHelper from \"../../utils/helper/SectionHelper\";\r\nimport CollegeHistorySection from \"../../components/answer/section/CollegeHistorySection\";\r\nimport ChildCareProviderSection from \"./ChildCareProviderSection\";\r\nimport ChildrenSection from \"./ChildrenSection\";\r\nimport SectionStateIcon from \"../../components/progress/SectionStateIcon\";\r\nimport ApplicationSubmitButton from \"../../components/Utility/ApplicationSubmitButton\";\r\nimport ProgressHeader from \"../../components/application/ProgressHeader\";\r\n\r\n/**\r\n * child care program code\r\n */\r\nconst PROGRAM_CODE = \"CC\";\r\n\r\n/**\r\n * Child care application component\r\n */\r\nfunction ChildCare() {\r\n    const history = useHistory();\r\n    const { year } = useParams();\r\n    const activeYear = parseInt(year);\r\n\r\n    const methods = useForm({\r\n        mode: \"onBlur\",\r\n    });\r\n    const {\r\n        errors,\r\n        formState,\r\n        getValues,\r\n        setValue,\r\n        handleSubmit,\r\n        watch,\r\n    } = methods;\r\n    const formsState = useSelector((state) => state.form);\r\n\r\n    const [showConfirmation, setShowConfirmation] = useState(false);\r\n   \r\n    const [programData, setProgramData] = useState(null);\r\n    const program = new ProgramInfo(programData);\r\n   \r\n    const [awardData, setAwardData] = useState(null);\r\n    const [applicationData, setApplicationData] = useState(null);\r\n    const award = new Award(awardData);\r\n    const app = new ApplicationInfo(applicationData);\r\n\r\n    const isDocumentRequested = award.hasStatus(\"QUAL\") || award.hasStatus(\"QUALPREF\") || app.reviewStatus === \"VALID\";\r\n\r\n    const submitRef = useRef(null);\r\n\r\n    const sectionGroup = new SectionFormHelper(useState(null), PROGRAM_CODE);\r\n\r\n    sectionGroup.title = program.title;\r\n    const collegeHistory = sectionGroup.create(useState(null), useRef(), [\r\n        FIELDS.PAST_COLLEGE,\r\n        FIELDS.CURRENT_COLLEGE,\r\n        FIELDS.COLLEGE_HISTORY_COMPLETE,\r\n        FIELDS.FINISHED_COMM_COLLEGE,\r\n        FIELDS.FINISHED_BACHELORS_DEGREE,\r\n        FIELDS.UNDERGRAD_GPA,\r\n        FIELDS.GRADUATE_GPA,\r\n    ], \"College History\");\r\n\r\n    const collegeChoice = sectionGroup.create(useState(null), useRef(), [\r\n        FIELDS.COLLEGE_CHOICE,\r\n        FIELDS.COLLEGE_STANDING,\r\n    ], \"College Choice\");\r\n\r\n    const collegePlans = sectionGroup.create(useState(null), useRef(), [\r\n        FIELDS.DEGREES,\r\n        FIELDS.CAREER_GOAL\r\n    ], \"College Plans\");\r\n\r\n    const children = sectionGroup.create(useState(null), useRef(), [\r\n        FIELDS.CHILDREN\r\n    ], \"Children\");\r\n\r\n    const providers = sectionGroup.create(useState(null), useRef(), [\r\n        FIELDS.IsReceivingERDCSubsidy,\r\n        FIELDS.ERDCSubsidyExpirationDate,\r\n        FIELDS.CHILD_CARE_PROVIDER__NAME,\r\n        FIELDS.CHILD_CARE_PROVIDER__ADDRESS,\r\n        FIELDS.CHILD_CARE_PROVIDER__STATE,\r\n        FIELDS.CHILD_CARE_PROVIDER__CITY,\r\n        FIELDS.CHILD_CARE_PROVIDER__ZIP,\r\n        FIELDS.CHILD_CARE_PROVIDER__PHONE,\r\n        FIELDS.CHILD_CARE_PROVIDER__START_DATE,\r\n        FIELDS.CHILD_CARE_PROVIDER__NEW,\r\n        FIELDS.CHILD_CARE_PROVIDER__LISTED,\r\n        FIELDS.CHILD_CARE_PROVIDER__REGISTERED,\r\n        FIELDS.CHILD_CARE_PROVIDER__PARENT,\r\n        FIELDS.CHILD_CARE_PROVIDER2__NAME,\r\n        FIELDS.CHILD_CARE_PROVIDER2__ADDRESS,\r\n        FIELDS.CHILD_CARE_PROVIDER2__STATE,\r\n        FIELDS.CHILD_CARE_PROVIDER2__CITY,\r\n        FIELDS.CHILD_CARE_PROVIDER2__ZIP,\r\n        FIELDS.CHILD_CARE_PROVIDER2__PHONE,\r\n        FIELDS.CHILD_CARE_PROVIDER2__START_DATE,\r\n        FIELDS.CHILD_CARE_PROVIDER2__NEW,\r\n        FIELDS.CHILD_CARE_PROVIDER2__LISTED,\r\n        FIELDS.CHILD_CARE_PROVIDER2__REGISTERED,\r\n        FIELDS.CHILD_CARE_PROVIDER2__PARENT,\r\n    ], \"Providers\");\r\n\r\n    const postAcceptanceSections = new SectionFormHelper(useState(null));\r\n    const transcripts = postAcceptanceSections.create(useState(null), useRef(), [\r\n        FIELDS.SPRING_COLLEGE_TRANSCRIPTS_DIGITAL,\r\n        FIELDS.SPRING_COLLEGE_TRANSCRIPTS_MAIL,\r\n        FIELDS.SPRING_HS_TRANSCRIPTS_DIGITAL,\r\n        FIELDS.SPRING_HS_TRANSCRIPTS_MAIL,\r\n        FIELDS.CHILD_CARE_EXPENSES_DIGITAL,\r\n        FIELDS.CHILD_CARE_EXPENSES_MAIL\r\n    ], \"Transcripts\");\r\n\r\n\r\n\r\n\r\n    useEffect(() => {\r\n        (async () => {           \r\n            const program = await apiClient.getProgram(PROGRAM_CODE);\r\n            const currentSeason = new ProgramInfo(program).getSeason(activeYear);\r\n            if (!currentSeason){\r\n                dispatch(\r\n                    open({\r\n                        message: \"This application is no longer available\",\r\n                        severity: \"success\",\r\n                    })\r\n                );\r\n                history.push({\r\n                    pathname: '/dashboard', state: {\r\n                        from: history.location.pathname\r\n                    }\r\n                })\r\n                return;\r\n            }\r\n            setProgramData(program);\r\n            \r\n            const [awards, app, unused, unused2] = await Promise.all([\r\n                apiClient.getApplicationAwardStatus(PROGRAM_CODE, activeYear),\r\n                apiClient.getApplication(PROGRAM_CODE, activeYear),\r\n                sectionGroup.fetchState(activeYear),\r\n                postAcceptanceSections.fetchState(activeYear)\r\n            ]);\r\n            setApplicationData(app);\r\n            setAwardData(awards);\r\n        })()\r\n    }, []);\r\n\r\n    const handleCollegeChange = async () =>{\r\n        await Promise.all([\r\n            collegeHistory.updateCompletion(),\r\n            postAcceptanceSections.fetchState(activeYear)\r\n        ]);\r\n\r\n    }\r\n\r\n    const applicationYear = `${activeYear}-${activeYear + 1}`;\r\n\r\n    const dispatch = useDispatch();\r\n\r\n    const onError = (errors, e) => {\r\n        // console.log(\"ERROR\", errors, e);\r\n    };\r\n\r\n    const [submitLoading, setSubmitLoading] = useState(false);\r\n\r\n\r\n    const actualSubmit = async () => {\r\n        const actualSubmission = async (data, e) => {\r\n            let omitField = '';\r\n            if (formsState.fields[FIELDS.SPRING_COLLEGE_TRANSCRIPTS_DIGITAL] !== undefined) {\r\n                data.SPRING_COLLEGE_TRANSCRIPTS_DIGITAL = formsState.fields[FIELDS.SPRING_COLLEGE_TRANSCRIPTS_DIGITAL]\r\n            } else {\r\n                omitField = FIELDS.SPRING_COLLEGE_TRANSCRIPTS_DIGITAL\r\n            }\r\n            await actions.submitForm(data, [], [\"Agreement\", omitField], activeYear);\r\n            await apiClient.submitApplication(PROGRAM_CODE, activeYear);\r\n            // console.log(data, e);\r\n            setShowConfirmation(true);\r\n        };\r\n\r\n        try {\r\n            setSubmitLoading(true);\r\n            const execSubmission = handleSubmit(actualSubmission, onError);\r\n            await execSubmission();\r\n            dispatch(\r\n                open({\r\n                    message: \"Submitted Successfully\",\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        } catch (e) {\r\n            console.error(e);\r\n            dispatch(\r\n                open({\r\n                    message: e.message,\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        } finally {\r\n            setSubmitLoading(false);\r\n        }\r\n    };\r\n\r\n    const onEdit = () => {\r\n        setShowConfirmation(false);\r\n        window.location.reload(true); /* 3722/SP236: Calling components aren't keeping application state so, reload the page from server. */\r\n    }\r\n\r\n\r\n\r\n    // percent complete, giving a fixed 25% to the profile and 1% to the submit button\r\n    const pecentComplete = sectionGroup.isComplete && app.isSubmitted ? 100 : Math.round(25 + 74 * sectionGroup.percentComplete / 100 + (app.isSubmitted ? 1 : 0));\r\n\r\n    return (\r\n\r\n        <PortalView>\r\n            <div name=\"ApplicationsPage\">\r\n                <div className=\"page-intro\">\r\n                    <div className=\"wrapper\">\r\n                        <div className=\"page-intro__layout\">\r\n                            <div className=\"page-intro__icon\">\r\n                                <img src=\"/MyApplictionsIcon.svg\" alt=\"Applications icon\" style={{ marginTop: \".5rem\" }} />\r\n                            </div>\r\n                            <div className=\"page-intro__content rhythm\">\r\n                                <h1 className=\"heading heading--h1\">\r\n                                    Student Child Care Grant\r\n                                    <PrintIcon />\r\n                                </h1>\r\n                                <h2 className=\"heading heading--h2\">{applicationYear}</h2>\r\n                                <a href=\"/dashboard\">Return to Dashboard</a>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n\r\n                {showConfirmation ? (\r\n                    <CompleteSubmission onEdit={onEdit} applicationHelper={sectionGroup} />\r\n                ) : (\r\n\r\n                    <div className=\"wrapper\">\r\n                        \r\n                        <ProgressHeader sectionGroup={sectionGroup} app={app} />\r\n                      \r\n                        <div className=\"divider\" />\r\n\r\n                        {/* Questions */}\r\n\r\n                        <div className=\"transcripts\">\r\n                            <div className=\"form-wrapper rhythm\">\r\n                                {isDocumentRequested &&\r\n                                    <EditSpringTranscripts section={transcripts} onChange={() => transcripts.updateCompletion()}  />\r\n                                }\r\n                            </div>\r\n                        </div>\r\n\r\n                        <div className=\"college-history\" ref={collegeHistory.ref}>\r\n                            <div className=\"form-wrapper rhythm\">\r\n                                <CollegeHistorySection status={<SectionStateIcon section={collegeHistory} />} section={collegeHistory}\r\n                                    onChange={() => handleCollegeChange()} />\r\n                            </div>\r\n                        </div>{/* college history */}\r\n\r\n                        <div className=\"college-choice\" ref={collegeChoice.ref}>\r\n                            <div className=\"form-wrapper rhythm\">\r\n                                <EditCollegeOfChoice section={collegeChoice} year={activeYear} status={<SectionStateIcon section={collegeChoice} />} onChange={() => collegeChoice.updateCompletion()} />\r\n                            </div>\r\n                        </div>\r\n\r\n                        <div className=\"transcripts\" ref={collegePlans.ref}>\r\n                            <div className=\"form-wrapper rhythm\">\r\n                                <EditCollegePlan section={collegePlans} year={activeYear} status={<SectionStateIcon section={collegePlans} />} onChange={() => collegePlans.updateCompletion()} />\r\n                            </div>\r\n                        </div>\r\n\r\n                        <div className=\"children\" ref={children.ref}>\r\n                            <div className=\"form-wrapper rhythm\">\r\n                                <ChildrenSection section={children} year={activeYear} status={<SectionStateIcon section={children} />} onChange={() => children.updateCompletion()} />\r\n                            </div>\r\n                        </div>\r\n\r\n                        <div className=\"child-care\" ref={providers.ref}>\r\n                            <div className=\"form-wrapper rhythm\">\r\n                                <ChildCareProviderSection status={<SectionStateIcon section={providers} />} section={providers} onChange={() => providers.updateCompletion()} />\r\n                            </div>\r\n                        </div>\r\n                        <div ref={submitRef}>\r\n                            <div className=\"form-wrapper rhythm\">\r\n                                <div className=\"grant-action-buttons\">\r\n                                    <ApplicationSubmitButton onClick={actualSubmit} app={app} sections={sectionGroup} loading={submitLoading} />\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n\r\n\r\n                    </div>\r\n                )}\r\n            </div>{/* applications-page */}\r\n        </PortalView>\r\n    );\r\n}\r\n\r\nexport default ChildCare;\r\n","import { actions } from \"./../../store\";\r\nimport { useState, useEffect, useRef } from \"react\";\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport Button from \"../../components/Button\";\r\nimport PrintIcon from \"../../components/PrintIcon\";\r\nimport PortalView from \"./../../components/Global/PortalView\";\r\nimport ProgressBar from \"../../components/progress/ProgressBar\";\r\nimport ProgressBarLabel from \"../../components/progress/ProgressBarLabel\";\r\nimport RadioGroup from \"../../components/RadioGroup\";\r\nimport Checkbox from \"../../components/Checkbox\";\r\nimport NumericDecimal from \"../../components/NumericDecimal\";\r\nimport { FieldRow, FieldSlot } from \"../../components/Forms/FieldSection\";\r\nimport CompleteSubmission from \"../../components/CompleteSubmission\";\r\nimport { FIELDS } from \"../../store/form/fields\";\r\nimport { goBack } from \"../../utils\";\r\nimport apiClient from \"../../utils/API\";\r\nimport { useHistory, useParams } from \"react-router\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { open } from \"../../store/snack/actions\";\r\nimport moment from \"moment\";\r\nimport DropdownSearch from \"../../components/DropdownSearch\";\r\nimport ApplicationSubmitButton from \"../../components/Utility/ApplicationSubmitButton\";\r\nimport ProgramInfo from \"../../utils/dtos/ProgramInfo\";\r\nimport ApplicationInfo from \"../../utils/dtos/ApplicationInfo\";\r\nimport CollegeChoiceAnswer from \"../../components/answer/CollegeChoiceAnswer\";\r\nimport ClassStanding from \"../../components/answer/question/ClassStanding\";\r\nimport { Component } from \"react\";\r\nimport SectionFormHelper from \"../../utils/helper/SectionHelper\";\r\nimport AnswerSet from \"../../utils/dtos/AnswerSet\";\r\nimport FormSerializer from \"../../store/form/serializer\";\r\nimport { Alert } from \"@material-ui/core\";\r\nimport RequirementSet from \"../../utils/dtos/RequirementSet\";\r\n\r\nconst PROGRAM_CODE = \"ONGSTA\";\r\n\r\nconst integers = [\r\n    FIELDS.NATIONAL_GUARD__CREDITS_PRESUMMER,\r\n    FIELDS.NATIONAL_GUARD__CREDITS_FALL,\r\n    FIELDS.NATIONAL_GUARD__CREDITS_WINTER,\r\n    FIELDS.NATIONAL_GUARD__CREDITS_SPRING,\r\n    FIELDS.NATIONAL_GUARD__CREDITS_POSTSUMMER,\r\n];\r\n\r\n\r\n/**\r\n * render the national guard application\r\n * @returns {Component}\r\n */\r\nfunction NationalGuard() {\r\n    const { year } = useParams();\r\n    const activeYear = parseInt(year);\r\n    \r\n    const methods = useForm({ mode: \"onBlur\", });\r\n    const { errors, getValues, setValue, handleSubmit, watch } = methods;\r\n\r\n    const history = useHistory();\r\n    const handleCancel = () => {\r\n        goBack({\r\n            history,\r\n            defaultRoute: \"/dashboard\",\r\n        });\r\n    };\r\n\r\n    const [completionData, setCompletionData] = useState(null);\r\n    const sectionCompletion = new RequirementSet(completionData);\r\n    const collegeCompletion = sectionCompletion.getField(FIELDS.COLLEGE_CHOICE);\r\n\r\n    const sectionGroup = new SectionFormHelper(useState(null));\r\n    const allAppSection = sectionGroup.create(useState(null), null, [\r\n        FIELDS.NATIONAL_GUARD__UNIT,\r\n        FIELDS.NATIONAL_GUARD__BRANCH,\r\n        FIELDS.NATIONAL_GUARD__CREDITS_PRESUMMER,\r\n        FIELDS.NATIONAL_GUARD__CREDITS_FALL,\r\n        FIELDS.NATIONAL_GUARD__CREDITS_WINTER,\r\n        FIELDS.NATIONAL_GUARD__CREDITS_SPRING,\r\n        FIELDS.NATIONAL_GUARD__CREDITS_POSTSUMMER,\r\n        FIELDS.COLLEGE_CHOICE,\r\n        FIELDS.COLLEGE_STANDING,\r\n    ]);\r\n\r\n    const [grantDetails, setGrantDetails] = useState(null);\r\n    const program = new ProgramInfo(grantDetails); \r\n    const currentSeason = program.getSeason(activeYear);\r\n    const details = {\r\n        title: program.name,\r\n        year: activeYear,\r\n        description: program.description,\r\n        code: PROGRAM_CODE\r\n    };\r\n\r\n\r\n    const [applicationData, setApplicationData] = useState(null);\r\n    const app = new ApplicationInfo(applicationData);\r\n\r\n    //TODO: replace with <CreditsPerTerm />\r\n    class OngstaTerm{\r\n\r\n        constructor(year, name, term, offset = 0){\r\n            this._term = term;\r\n            this._year = year;\r\n            this._name = name;         \r\n            this._offset = offset;\r\n        }\r\n\r\n        /**\r\n         * display of term\r\n         */\r\n        get term(){\r\n            return `${this._term} ${this._year}`;\r\n        }\r\n\r\n        /**\r\n         * the field name\r\n         */\r\n        get name(){\r\n            return this._name;\r\n        }\r\n\r\n        get deadline(){\r\n            const event = currentSeason?.getEvent(\"EndDate\", this._term);\r\n            if (!event)\r\n                return null;\r\n            return moment(event.date).subtract(this._offset, 'years').format('MM/DD/YYYY');\r\n        }\r\n        \r\n        get creditHours(){\r\n            return getValues(this.name);\r\n        }\r\n        set creditHours(value){\r\n            setValue(this.name, value);\r\n        }\r\n\r\n        get isNotAttending(){\r\n            return this.creditHours === 0 || this.creditHours === \"0\";\r\n        }\r\n\r\n        set isNotAttending(value) {\r\n            if (value)\r\n                this.creditHours = 0;\r\n            else\r\n                this.creditHours = \"\";\r\n        }\r\n\r\n        get isTermAnswered(){            \r\n            var credits = watch(this.name);\r\n            return credits >= 0;\r\n        }\r\n        \r\n    }\r\n    \r\n    const listTerms = [\r\n        new OngstaTerm(activeYear, FIELDS.NATIONAL_GUARD__CREDITS_PRESUMMER, 'Summer', 1),\r\n        new OngstaTerm(activeYear, FIELDS.NATIONAL_GUARD__CREDITS_FALL, 'Fall'),\r\n        new OngstaTerm(activeYear + 1, FIELDS.NATIONAL_GUARD__CREDITS_WINTER, 'Winter'),\r\n        new OngstaTerm(activeYear + 1, FIELDS.NATIONAL_GUARD__CREDITS_SPRING, 'Spring'),\r\n        new OngstaTerm(activeYear + 1, FIELDS.NATIONAL_GUARD__CREDITS_POSTSUMMER, 'Summer'),\r\n    ];              \r\n\r\n\r\n\r\n    /**\r\n     * pull initial application state from API\r\n     */\r\n    useEffect(async () => {\r\n        const programResult = await apiClient.getProgram(PROGRAM_CODE);\r\n        const season = new ProgramInfo(programResult).getSeason(activeYear);\r\n        if (!season){\r\n            dispatch(\r\n                open({\r\n                    message: \"This application is no longer available\",\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n            handleCancel();\r\n            return;\r\n        }\r\n        setGrantDetails(programResult);\r\n\r\n        const [appResult, answers, collegeCompletion] = await Promise.all([            \r\n            apiClient.getApplication(PROGRAM_CODE, activeYear),\r\n            sectionGroup.fetchAnswers(activeYear),\r\n            apiClient.getCompletionReport(PROGRAM_CODE, activeYear, [FIELDS.COLLEGE_CHOICE])\r\n        ]);\r\n        \r\n        setApplicationData(appResult);\r\n        setCompletionData(collegeCompletion);  \r\n\r\n        const answerSet = new AnswerSet(answers);\r\n        for (let term of listTerms){    \r\n            var response = answerSet.get(FormSerializer.getQuestionKey(term.name)).Response;\r\n            term.creditHours = response;\r\n        }\r\n        \r\n    }, []);\r\n   \r\n   \r\n    const watchCollegeChoice = watch(FIELDS.COLLEGE_CHOICE);\r\n    const watchCollegeStanding = watch(FIELDS.COLLEGE_STANDING);\r\n    const watchBranch = watch(FIELDS.NATIONAL_GUARD__BRANCH);\r\n    const progress = {\r\n        profile: \"complete\",\r\n        serviceHistory: watchBranch && watch(FIELDS.NATIONAL_GUARD__UNIT) ? \"complete\" : \"incomplete\",\r\n        enrollment: listTerms.every(x => x.isTermAnswered) ? \"complete\" : \"incomplete\",\r\n        collegePlans: watchCollegeChoice && watchCollegeStanding ? \"complete\" : \"incomplete\",\r\n        submit: app.isSubmitted ? \"complete\" : \"incomplete\"\r\n    };\r\n\r\n    for (let key in progress) {\r\n        if (progress[key] === \"incomplete\") {\r\n            progress[key] = \"inProgress\";\r\n            break;\r\n        }\r\n    }\r\n\r\n    let completeSectionCount = 0;\r\n    for (const i in progress) {\r\n        if (progress[i] === \"complete\")\r\n            completeSectionCount++;\r\n    }\r\n    const progressPercent = Math.round(100 * completeSectionCount / 5)\r\n    const disableSubmit = !(progress.serviceHistory === \"complete\" && progress.enrollment === \"complete\" && progress.collegePlans == \"complete\");\r\n\r\n    const [units, setUnits] = useState(true);\r\n    useEffect(async () => {\r\n\r\n        const result = await apiClient.get('/code/codes?codeType=NationalGuardUnit_' + watchBranch, {});\r\n        var resultUnits = result.map(r => ({\r\n            label: r.Message,\r\n            value: r.Code\r\n        }));\r\n        setUnits(resultUnits);\r\n    }, [watchBranch])\r\n\r\n\r\n    const dispatch = useDispatch();\r\n    const [saveLoading, setSaveLoading] = useState(false);\r\n\r\n    const onSave = async (data, e) => {\r\n        try {\r\n            setSaveLoading(true);\r\n\r\n            await actions.submitForm(data, [], [\"Agreement\"], activeYear);\r\n            var completionReport = await apiClient.getCompletionReport(PROGRAM_CODE, activeYear, [FIELDS.COLLEGE_CHOICE])\r\n            setCompletionData(completionReport);\r\n            \r\n            for (const prop in data) {\r\n                if (integers.find(i => i === prop)) {\r\n                    data[prop] = parseInt(data[prop]);\r\n                }\r\n            }\r\n            dispatch(\r\n                open({\r\n                    message: \"Saved Successfully\",\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        } catch (e) {\r\n            console.error(e);\r\n            dispatch(\r\n                open({\r\n                    message: e.message,\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        } finally {\r\n            setSaveLoading(false);\r\n        }\r\n    };\r\n\r\n    const onError = (errors, e) => {\r\n        // console.log(\"ERROR\", errors, e);\r\n    };\r\n\r\n\r\n\r\n    const [submitLoading, setSubmitLoading] = useState(false);\r\n    const [showConfirmation, setShowConfirmation] = useState(false);\r\n    const actualSubmit = async () => {\r\n\r\n        const actualSubmission = async (data, e) => {\r\n            await actions.submitForm(data, [], [], activeYear);\r\n            await apiClient.submitApplication(PROGRAM_CODE, activeYear);\r\n            for (const prop in data) {\r\n                if (integers.find(i => i === prop)) {\r\n                    data[prop] = parseInt(data[prop]);\r\n                }\r\n            }\r\n            // console.log(data, e);\r\n            setShowConfirmation(true);\r\n        };\r\n        try {\r\n            setSubmitLoading(true);\r\n            const execSubmission = handleSubmit(actualSubmission, onError);\r\n            await execSubmission();\r\n            dispatch(\r\n                open({\r\n                    message: \"Submitted Successfully\",\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        } catch (e) {\r\n            console.error(e);\r\n            dispatch(\r\n                open({\r\n                    message: e.message,\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        } finally {\r\n            setSubmitLoading(false);\r\n        }\r\n    };\r\n\r\n    const onEdit = () => {\r\n        setShowConfirmation(false);\r\n        window.location.reload(true); /* 3722/SP236: Calling components aren't keeping application state so, reload the page from server. */\r\n    }\r\n\r\n\r\n\r\n    const serviceRef = useRef();\r\n    const enrollmentRef = useRef();\r\n    const collegeRef = useRef();\r\n    const submitRef = useRef();\r\n\r\n    return (\r\n        <FormProvider {...methods}>\r\n            <PortalView>\r\n                <div name=\"ApplicationsPage\" className=\"national-guard\">\r\n                    <div className=\"page-intro\">\r\n                        <div className=\"wrapper\">\r\n                            <div className=\"page-intro__layout\">\r\n                                <div className=\"page-intro__icon\">\r\n                                    <img src=\"/MyApplictionsIcon.svg\" alt=\"Applications icon\" style={{ marginTop: \".4rem\" }} />\r\n                                </div>\r\n                                <div className=\"page-intro__content rhythm\">\r\n                                    <h1 className=\"heading heading--h1\">\r\n                                        {details.title}\r\n                                        <PrintIcon />\r\n                                    </h1>\r\n                                    <p className=\"heading\">{details.description}</p>\r\n                                    <h2 className=\"heading heading--h2\">{activeYear} – {activeYear+1}</h2>\r\n                                    <a href=\"/dashboard\">← Return to Dashboard</a>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    {showConfirmation ? (\r\n                        <CompleteSubmission onEdit={onEdit} details={details} />\r\n                    ) : (\r\n                        <div className=\"wrapper\">\r\n                            <div className=\"progress-bar rhythm\">\r\n                                <h3 className=\"heading heading--h3\">Application Progress</h3>\r\n\r\n                                <ProgressBar progress={progressPercent} />\r\n                                <div className=\"progress-bar__labels\">\r\n                                    <ProgressBarLabel title=\"Profile\" state=\"complete\" />\r\n                                    <ProgressBarLabel title=\"Service History\" state={progress.serviceHistory} sectionRef={serviceRef} />\r\n                                    <ProgressBarLabel title=\"Planned Enrollment\" state={progress.enrollment} sectionRef={enrollmentRef} />\r\n                                    <ProgressBarLabel title=\"College\" state={progress.collegePlans} sectionRef={collegeRef} />\r\n                                    <ProgressBarLabel title=\"Submit\" state={progress.submit} sectionRef={submitRef} />\r\n                                </div>\r\n\r\n                            </div>\r\n\r\n                            <div className=\"divider\" />\r\n\r\n                            {/* Questions */}\r\n                            <div className=\"form-wrapper rhythm\">\r\n                                {/* Input Field - Service History*/}\r\n                                <div className=\"rhythm\" ref={serviceRef}\r\n                                    style={{ pointerEvents: progress.collegeHistory === \"incomplete\" && \"none\", opacity: progress.collegeHistory === \"incomplete\" && \"0.4\", }}>\r\n                                    <h3 className=\"heading heading--h3\">Service History</h3>\r\n\r\n                                    <div container className=\"input-field\">\r\n                                        <h4 className=\"heading heading--h4\">Branch</h4>\r\n                                        <RadioGroup name={FIELDS.NATIONAL_GUARD__BRANCH}\r\n                                            isRequired={true}\r\n                                            listItems={[{ value: \"ArmyNG\", label: \"Army National Guard\" }, { value: \"AirNG\", label: \"Air National Guard\" },]}\r\n                                            row />\r\n                                    </div>\r\n                                    {watch(FIELDS.NATIONAL_GUARD__BRANCH) &&\r\n                                        <div container className=\"input-field\">\r\n                                            <h4 className=\"heading heading--h4\">Assigned Unit</h4>\r\n                                            <FieldRow>\r\n                                                <FieldSlot>\r\n                                                    <DropdownSearch name={FIELDS.NATIONAL_GUARD__UNIT} inputLabel=\"Unit\" placeholder=\"Unit\" listItems={units} />\r\n                                                </FieldSlot>\r\n                                            </FieldRow>\r\n                                        </div>\r\n                                    }\r\n                                </div>\r\n\r\n                                {/* Input Field - Planned Enrollment */}\r\n                                <div className=\"component rhythm\" ref={enrollmentRef}\r\n                                    style={{ pointerEvents: progress.enrollment === \"incomplete\" && \"none\", opacity: progress.enrollment === \"incomplete\" && \"0.4\", }}>\r\n                                    <h3 className=\"heading heading--h3\">Planned Enrollment</h3>\r\n                                    <div className=\"table-wrapper\">\r\n                                        <table className=\"table\">\r\n                                            <thead>\r\n                                                <tr>\r\n                                                    <th>Term</th>\r\n                                                    <th>Anticipated Credit Hours</th>\r\n                                                    <th>&nbsp;</th>\r\n                                                </tr>\r\n                                            </thead>\r\n                                            <tbody>\r\n                                                {listTerms.map(item => {\r\n                                                    const isNotAttendingFieldName = \"IsNotAttending\" + item.name;\r\n                                                    \r\n                                                    return (\r\n                                                        <tr>\r\n                                                            <td>{item.term}<br /><small>Application Deadline: {item.deadline}</small></td>\r\n                                                            <td>\r\n                                                                <NumericDecimal\r\n                                                                    name={item.name}\r\n                                                                    placeholder=\"Credit Hours\"\r\n                                                                    precision={1}\r\n                                                                    value={item.creditHours} // Pass credit hours value as prop\r\n                                                                    onChange={(event) => item.creditHours = event.target.value}\r\n                                                                />\r\n                                                            </td>\r\n                                                            <td>\r\n                                                                <Checkbox\r\n                                                                    name={isNotAttendingFieldName}\r\n                                                                    label=\"Not attending\"\r\n                                                                    value={item.isNotAttending || false} // Pass checkbox value as prop\r\n                                                                    disabled={item.creditHours > 0}\r\n                                                                    onChange={(isChecked) => item.isNotAttending = isChecked}\r\n                                                                />\r\n                                                            </td>\r\n                                                        </tr>\r\n                                                    );\r\n                                                })}\r\n                                            </tbody>\r\n                                        </table>\r\n                                    </div>\r\n                                </div>\r\n\r\n                                <div className=\"college-terms\" ref={collegeRef}>\r\n                                    <div className=\"form-section\">\r\n                                        <div className=\"form-section__header\">\r\n                                            <h2 className=\"heading heading--h3\">College Choice</h2>\r\n                                        </div>\r\n                                        {collegeCompletion?.isDisqualifying === true &&\r\n                                            <div>\r\n                                                <Alert severity=\"error\" className=\"alert alert--error\">\r\n                                                    <p>\r\n                                                        <strong>\r\n                                                            The&nbsp;\r\n                                                            <a href=\"https://oregonstudentaid.gov/grants/oregon-opportunity-grant/list-of-participating-schools\">college you selected</a>\r\n                                                            &nbsp;is not eligible to receive the Oregon National Guard Tuition Assistance\r\n                                                        </strong>\r\n                                                    </p>\r\n                                                </Alert>\r\n                                            </div>\r\n                                        }\r\n                                        <div className=\"wrapper rhythm\">\r\n                                            <CollegeChoiceAnswer answer={allAppSection.getAnswerByField(FIELDS.COLLEGE_CHOICE)} />\r\n\r\n                                            <ClassStanding answer={allAppSection.getAnswerByField(FIELDS.COLLEGE_STANDING)} />\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n\r\n                                <div className=\"grant-action-buttons\" ref={submitRef}>\r\n                                    <Button name=\"Cancel\" label=\"Cancel\" variant=\"text\" onClick={handleCancel} />\r\n                                    <Button loading={saveLoading} name=\"Save\" label=\"Save\" type=\"submit\" onClick={handleSubmit(onSave, onError)} />\r\n                                    <ApplicationSubmitButton loading={submitLoading} sections={{ isComplete: !disableSubmit }} onClick={actualSubmit} app={app} />\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    )}\r\n                </div>\r\n            </PortalView>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\nexport default NationalGuard;\r\n","import { useFormContext } from \"react-hook-form\";\r\nimport { useState, useEffect, useRef } from \"react\";\r\nimport { compositeFieldname, getMimeInstance } from \"../../utils\";\r\nimport { AnswerTypeDocumentProps, DocumentDeliveryTypes } from \"../../store/form/fields\";\r\nimport apiClient from \"../../utils/API\";\r\nimport _get from \"lodash/get\";\r\nimport { FieldRow, FieldSlot } from \"../Forms/FieldSection\";\r\nimport HiddenInput from \"../Utility/HiddenInput\";\r\nimport Button from \"./../../components/Button\";\r\nimport { Delete } from \"@material-ui/icons\";\r\n\r\nconst ScholarshipUploader = ({\r\n  name = \"FundUploads\",\r\n  maxFileSizeInMb = 25,\r\n  allowedFileExtensions = [\"pdf\"],\r\n  isRequired = false,\r\n  ...props\r\n}) => {\r\n  const { watch, errors } = useFormContext({ mode: \"onBlur\" });\r\n\r\n  const hiddenFileInput = useRef();\r\n\r\n  const [uploadError, setUploadError] = useState({\r\n    message: \"\",\r\n  });\r\n  const [file, setFile] = useState(null);\r\n\r\n  const triggerUpload = () => {\r\n    hiddenFileInput.current.click();\r\n  };\r\n\r\n  const allowedMimes = allowedFileExtensions.map((ext) =>\r\n    getMimeInstance().getType(ext)\r\n  );\r\n\r\n  const handleUpload = (event) => {\r\n    if ([...event.target.files].length) {\r\n      const fileUploaded = event.target.files[0];\r\n      const sizeInMb = fileUploaded.size / 1024 / 1024 / 1.048576;\r\n      const mime = fileUploaded.type;\r\n      if (sizeInMb > maxFileSizeInMb) {\r\n        setUploadError({\r\n          message: `Exceeds maximum file size of ${maxFileSizeInMb} Mb`,\r\n        });\r\n      } else if (!allowedMimes.includes(mime)) {\r\n        setUploadError({\r\n          message: `Can only upload files of format: ${allowedFileExtensions.join(\r\n            \", \"\r\n          )}`,\r\n        });\r\n      } else {\r\n        setUploadError({ message: \"\" });\r\n        setFile(fileUploaded);\r\n      }\r\n    }\r\n  };\r\n\r\n  const download = function (filename, blob) {\r\n    if (window.navigator.msSaveOrOpenBlob) {\r\n      window.navigator.msSaveBlob(blob, filename);\r\n    } else {\r\n      var elem = window.document.createElement(\"a\");\r\n      elem.href = window.URL.createObjectURL(blob);\r\n      elem.download = filename;\r\n      document.body.appendChild(elem);\r\n      elem.click();\r\n      document.body.removeChild(elem);\r\n    }\r\n  };\r\n\r\n  const fileId = watch(compositeFieldname(name, AnswerTypeDocumentProps.ID));\r\n  useEffect(() => {\r\n    const questionKey = name.replace(`_${DocumentDeliveryTypes.UPLOAD}`, \"\");\r\n    (async () => {\r\n      if (!fileId) return;\r\n      const blob = await apiClient.getFileFromQuestionKey({\r\n        id: fileId,\r\n        questionKey,\r\n      });\r\n      if (blob.size) {\r\n        const file = new File([blob], `${questionKey}.pdf`);\r\n        setFile(file);\r\n      }\r\n    })();\r\n  }, [fileId]);\r\n\r\n\r\n  const handleDownload = (e) => {\r\n    e.preventDefault();\r\n    download(file.name, file);\r\n  };\r\n\r\n  const handleDelete = (e) => {\r\n    e.preventDefault();\r\n    setFile(null);\r\n  };\r\n\r\n  const verifyFile = (file) => {\r\n    if (isRequired && !file) {\r\n      return false;\r\n    }\r\n    return true;\r\n  };\r\n\r\n  const error = _get(\r\n    errors,\r\n    compositeFieldname(name, AnswerTypeDocumentProps._FILE)\r\n  );\r\n\r\n  return (\r\n    <FieldRow>\r\n      <FieldSlot>\r\n        {error && (\r\n          <p style={{ color: \"red\", marginBottom: \"10px\" }}>\r\n            * File Is Required\r\n          </p>\r\n        )}\r\n        <HiddenInput\r\n          rules={{ validate: (value) => verifyFile(value) }}\r\n          name={compositeFieldname(name, AnswerTypeDocumentProps._FILE)}\r\n          value={file}\r\n        />\r\n      </FieldSlot>\r\n      <FieldSlot>\r\n        <FieldSlot>\r\n          {file && (\r\n            <div style={{ display: \"flex\", alignItems: \"center\" }}>\r\n              <a href=\"#\" onClick={handleDownload}>{file.name}</a>\r\n              <a href=\"#\"><Delete className=\"pointer\" style={{ color: \"rgba(255, 0, 0, 0.5)\" }} onClick={handleDelete} /></a>\r\n            </div>\r\n          )}\r\n          {!file && (\r\n            <div>\r\n              <input\r\n                required={isRequired}\r\n                ref={hiddenFileInput}\r\n                type=\"file\"\r\n                onChange={handleUpload}\r\n                style={{ display: \"none\" }}\r\n              />\r\n              <Button\r\n                variant=\"text\"\r\n                label=\"Upload File\"\r\n                style={{ position: \"relative\", bottom: \"-10px\" }}\r\n                onClick={triggerUpload}\r\n              />\r\n              {uploadError.message && (\r\n                <div\r\n                  style={{\r\n                    color: \"red\",\r\n                    marginTop: \"0.5rem\",\r\n                  }}\r\n                >\r\n                  *{uploadError.message}\r\n                </div>\r\n              )}\r\n            </div>\r\n          )}\r\n        </FieldSlot>\r\n      </FieldSlot>\r\n    </FieldRow>\r\n  );\r\n};\r\n\r\nexport default ScholarshipUploader;\r\n","import React from 'react';\r\nimport { AnswerTypeMemberProps } from '../../store/form/fields';\r\nimport { compositeFieldname } from '../../utils';\r\nimport { FieldSection, FieldRow, FieldSlot } from '../Forms/FieldSection';\r\nimport Input from '../Input';\r\nimport CodeDropdown from '../DataDriven/CodeDropdown';\r\nimport StatePicker, { STATE_RETURN_TYPE } from '../DataDriven/StatePicker';\r\n\r\n\r\nconst MembershipAnswer = ({ question, disabled, answer }) => {\r\n\r\n    const name = question.name;\r\n    const isMemberFormDisabled = disabled;\r\n\r\n    const relationshipPrompt = question.getDisplayProperty(\"RelationshipCode\");\r\n    const namePrompt = question.getDisplayProperty(\"FullName\");\r\n    const statePrompt = question.getDisplayProperty(\"UnlistedStateName\");\r\n    const cityPrompt = question.getDisplayProperty(\"UnlistedCityName\");\r\n    const locationPrompt = question.getDisplayProperty(\"LocationName\");\r\n\r\n    return (\r\n        <FieldSection withDivider={false}>\r\n            {relationshipPrompt &&\r\n                <FieldRow>\r\n                    <FieldSlot md={12}>\r\n                        <CodeDropdown disabled={isMemberFormDisabled}\r\n                            isSoftRequired={true}\r\n                            codeType=\"RELATION\" name={compositeFieldname(name, AnswerTypeMemberProps.RELATION)} label={relationshipPrompt} />\r\n                    </FieldSlot>\r\n                </FieldRow>\r\n            }\r\n            {namePrompt &&\r\n                <FieldRow>\r\n                    <FieldSlot md={12}>\r\n                        {/* Backend treats \"Last Name\" as Full Name */}\r\n                        <Input name={compositeFieldname(name, AnswerTypeMemberProps.FULL_NAME)} inputLabel={namePrompt} placeholder={namePrompt}\r\n                            isSoftRequired={true}\r\n                            disabled={isMemberFormDisabled} variant='outlined' />\r\n                    </FieldSlot>\r\n                </FieldRow>\r\n            }\r\n            {locationPrompt &&\r\n                <FieldRow>\r\n                    <FieldSlot md={12}>\r\n                        <Input name={compositeFieldname(name, AnswerTypeMemberProps.LOCATION_NAME)} inputLabel={locationPrompt} \r\n                            isSoftRequired={true}\r\n                            placeholder={locationPrompt} disabled={isMemberFormDisabled} variant='outlined' />\r\n                    </FieldSlot>\r\n                </FieldRow>\r\n            }\r\n            {statePrompt &&\r\n                <FieldRow>\r\n                    <FieldSlot md={12}>\r\n                        <StatePicker\r\n                            name={compositeFieldname(name, AnswerTypeMemberProps.UNLISTED_STATE_NAME)}\r\n                            returnType={STATE_RETURN_TYPE.ABBREVIATION}\r\n                            label='State'\r\n                            isSoftRequired={true}\r\n                            variant='outlined'\r\n                        />\r\n                    </FieldSlot>\r\n                </FieldRow>\r\n            }\r\n            {cityPrompt &&\r\n                <FieldRow>\r\n                    <FieldSlot md={12}>\r\n                        <Input\r\n                            name={compositeFieldname(name, AnswerTypeMemberProps.UNLISTED_CITY_NAME)}\r\n                            inputLabel={cityPrompt}\r\n                            isSoftRequired={true}\r\n                            placeholder={cityPrompt}\r\n                            disabled={isMemberFormDisabled}\r\n                            variant='outlined'\r\n                        />\r\n                    </FieldSlot>\r\n                </FieldRow>\r\n            }\r\n\r\n        </FieldSection>\r\n    )\r\n}\r\n\r\nexport default MembershipAnswer;","import ProgressBar from \"../progress/ProgressBar\";\r\nimport ProgressBarLabel from \"../progress/ProgressBarLabel\";\r\n\r\nfunction ScholarshipProgressHeader ({program, answers, app, completedSections}) {\r\n    const numberOfAnswers = answers? answers.length : 0;\r\n    const numberOfCompletedSections= completedSections? completedSections.length : 0;\r\n\r\n    const itemizeSections = 100 / numberOfAnswers;\r\n    const isComplete = numberOfAnswers === numberOfCompletedSections;\r\n    const pecentComplete = isComplete? 100 : Math.round((itemizeSections * numberOfCompletedSections));\r\n\r\n    return (\r\n        <div>\r\n            <div className=\"progress-bar rhythm\">\r\n                Note: Progress is calculated upon successful save\r\n                <ProgressBar progress={pecentComplete} />\r\n                <div className=\"progress-bar__labels\">\r\n                    <ProgressBarLabel title={`Additional Required Documents - ${program.name}`} state={isComplete ? \"complete\" : \"incomplete\"}/> \r\n                </div>\r\n            </div>\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default ScholarshipProgressHeader;","import { useState } from \"react\";\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport Button from \"../../components/Button\";\r\nimport PortalView from \"./../../components/Global/PortalView\";\r\nimport { useEffect } from \"react\";\r\nimport apiClient from \"../../utils/API\";\r\nimport Question from \"../../utils/dtos/Question\";\r\nimport { goBack } from \"../../utils\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport { FieldSlot, FieldSection, FieldRow, } from \"../../components/Forms/FieldSection\";\r\nimport SpinnerSection from \"../../components/Utility/SpinnerSection\";\r\nimport { actions } from \"../../store\";\r\nimport striptags from \"striptags\";\r\nimport LargeTextEditor from \"../../components/LargeTextEditor\";\r\nimport Checkbox from \"../../components/Checkbox\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { open } from \"../../store/snack/actions\";\r\nimport ScholarshipUploader from \"../../components/ScholarshipUploader\";\r\nimport { compositeFieldname } from '../../utils';\r\nimport { AnswerTypeDocumentProps, AnswerTypeMemberProps, DocumentDeliveryTypes } from '../../store/form/fields';\r\nimport HiddenInput from '../../components/Utility/HiddenInput';\r\nimport ApplicationInfo from \"../../utils/dtos/ApplicationInfo\";\r\nimport ProgramInfo from \"../../utils/dtos/ProgramInfo\";\r\nimport RadioGroup from \"../../components/RadioGroup\";\r\nimport AnswerSet from \"../../utils/dtos/AnswerSet\";\r\nimport MembershipAnswer from \"../../components/answer/MembershipAnswer\";\r\nimport ScholarshipProgressHeader from \"../../components/application/ScholarshipProgressHeader\";\r\n\r\n/**\r\n * details page for individual scholarship\r\n * \r\n * @returns {Component}\r\n */\r\nfunction Scholarship() {\r\n\r\n    const { code, year } = useParams();\r\n    const activeYear = parseInt(year);\r\n\r\n    const history = useHistory();\r\n    const methods = useForm({\r\n        mode: \"onBlur\",\r\n    });\r\n    const {\r\n        errors,\r\n        formState,\r\n        watch,\r\n        handleSubmit,\r\n    } = methods;\r\n\r\n    const [programData, setProgramData] = useState(null);\r\n    const program = new ProgramInfo(programData);\r\n    const seasonNotes = program.getSeason(activeYear)?.notes ?? [];\r\n    seasonNotes.sort((a, b) => a.Order - b.Order);\r\n    \r\n    const [applicationData, setApplicationData] = useState(null);\r\n    const appInfo = new ApplicationInfo(applicationData);\r\n\r\n    const [questionData, setQuestionData] = useState([]);\r\n    const questions = questionData.map(q => new Question(q));\r\n\r\n    const [answerData, setAnswerData] = useState(null);\r\n    const answers = new AnswerSet(answerData);\r\n\r\n    const [requiredAnswers, setRequiredAnswers] = useState(null);\r\n    const [completedSections, setCompletedSections] = useState(null);\r\n\r\n    function processRequired(){\r\n        let requiredQuestions = questions?.filter(q=> q.isRequired && q.stage?.toLowerCase() ===  \"application\").map(q=>{\r\n            if(q.isRequired){\r\n                return q.name;\r\n            }\r\n        })\r\n        let completedAnswers = answers.getCompletedAnswers();\r\n        let filteredAnswers = answers.getAnswers(requiredQuestions).filter(a => {\r\n            // filter out other forms of delivery options for documents since uploads are only being asked for atm\r\n            if(a.AnswerType?.toLowerCase() === \"document\" && a.DeliveryType?.toLowerCase() !== \"upload\"\r\n            ){\r\n                return null\r\n            }\r\n            else{\r\n                return a\r\n            }\r\n        })\r\n\r\n        let filteredCompletedAnswers = completedAnswers?.filter(a => {\r\n            // match the filtered answers to the completed answers\r\n            if(!filteredAnswers?.find(x => x.QuestionKey === a.QuestionKey)){\r\n                return null\r\n            }\r\n            else{\r\n                return a\r\n            }\r\n        })\r\n\r\n        setRequiredAnswers(filteredAnswers)\r\n        setCompletedSections(filteredCompletedAnswers)\r\n    }\r\n\r\n    useEffect(() => {\r\n        if (appInfo) {\r\n            processRequired();\r\n        }\r\n    }, [questionData,answerData]);\r\n\r\n    const [isQualifiedByMember, setIsQualifiedByMember] = useState(null);\r\n\r\n    /**\r\n     * go back\r\n     */\r\n    const handleCancel = () => {\r\n        goBack({\r\n            history,\r\n            defaultRoute: \"/dashboard\",\r\n        });\r\n    };\r\n\r\n    /**\r\n     * remove scholarship action\r\n     */\r\n    const handleRemove = () => {\r\n        if (!appInfo.isRemovable)\r\n            return;\r\n        (async () => {\r\n\r\n            await apiClient.removeApplication(code, activeYear);\r\n\r\n            //NOTE: technically approximate. We don't know 100% that the unapply succeeded\r\n            setApplicationData({\r\n                ...applicationData,\r\n                IsStarted: false\r\n            });\r\n            dispatch(\r\n                open({\r\n                    message: \"Scholarship removed.\",\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n\r\n        })();\r\n\r\n    }\r\n    \r\n\r\n    const dispatch = useDispatch();\r\n    const [saveLoading, setSaveLoading] = useState(false);\r\n    const onSubmit = async (data) => {\r\n        try {\r\n            setSaveLoading(true);\r\n            if (appInfo.isStarted === false) {\r\n                await apiClient.startApplication(code, activeYear); // Start the application i.e., \"IsStarted\": true\r\n\r\n                //NOTE: technically approximate. We don't _really_ know if IsStarted was succesful\r\n                setApplicationData({\r\n                    ...applicationData,\r\n                    IsStarted: true\r\n                });\r\n            }\r\n            const memberQuestion = getMembershipQuestion();\r\n            if (memberQuestion){\r\n                data[memberQuestion.name].IsQualifiedByMembership = isQualifiedByMember;\r\n            }\r\n            \r\n            const results = await actions.submitForm(data, [], [\"Agreement\"], activeYear);\r\n            dispatch(\r\n                open({\r\n                    message: \"Saved Successfully\",\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n\r\n        } catch (e) {\r\n            console.error(e);\r\n            dispatch(\r\n                open({\r\n                    message: e.message,\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        } finally {\r\n            setSaveLoading(false)\r\n        }\r\n    };\r\n\r\n    const onError = (errors, e) => {\r\n        console.log({\r\n            errors,\r\n            e,\r\n        });\r\n    };\r\n\r\n    function getMembershipQuestion(){\r\n        return questions.find(q => q.type == \"Membership\");\r\n    }\r\n\r\n    const [loading, setLoading] = useState(true);\r\n    /**\r\n     * initialize scholarship state\r\n     */\r\n    useEffect(() => {\r\n        (async () => {\r\n            if(loading === true || saveLoading === true) {\r\n                const [programOverview, applicationData, questions] = await Promise.all([\r\n                    apiClient.getProgram(code),\r\n                    apiClient.getApplication(code, activeYear),\r\n                    apiClient.get(`question/questions/${code}/${activeYear}`)\r\n                ]);\r\n                setProgramData(programOverview);\r\n                setApplicationData(applicationData);\r\n                setQuestionData(questions);\r\n\r\n                if (questions.length == 0) \r\n                    return;\r\n            \r\n                const questionKeys = questions.map(q => q.Name);\r\n                const answers = await actions.fetchBasicFields(questionKeys);\r\n                setAnswerData(answers);\r\n            \r\n                const membershipQuestion = questions.map(q => new Question(q)).find(q => q.type == \"Membership\");\r\n                if (membershipQuestion) {\r\n                    if (membershipQuestion.isRequired)\r\n                        setIsQualifiedByMember(true);\r\n                    else {\r\n                        var isQualifiedByMembership = new AnswerSet(answers).get(membershipQuestion?.name).IsQualifiedByMembership;\r\n                        setIsQualifiedByMember(isQualifiedByMembership);\r\n                    }\r\n                }\r\n                if (loading === true) {\r\n\r\n                    setLoading(false);\r\n                }\r\n            }\r\n        })();\r\n    }, [loading,saveLoading]);\r\n\r\n    const membershipQuestion = getMembershipQuestion();\r\n    const qualifyByMemberField = membershipQuestion ? compositeFieldname(membershipQuestion.name, AnswerTypeMemberProps.QUALIFIED_BY_MEMBER) : null;\r\n             \r\n    const handleQualification = (e) => {    \r\n        setIsQualifiedByMember(e.target.value === \"True\");\r\n    }\r\n\r\n    return (\r\n        <FormProvider {...methods}>\r\n            <PortalView>\r\n                <div name=\"ApplicationsPage\" className=\"Scholarships\">\r\n                    <div className=\"rhythm\">\r\n                        <div className=\"page-intro\">\r\n                            <div className=\"wrapper\">\r\n                                <div className=\"page-intro__layout\">\r\n                                    <div className=\"page-intro__icon\">\r\n                                        <img src=\"/MyApplictionsIcon.svg\" alt=\"Student Portal\" style={{ marginTop: \".25rem\" }} />\r\n                                    </div>\r\n                                    <div className=\"page-intro__content rhythm\">\r\n                                        <h1 className=\"heading heading--h1\">{program.name}</h1>\r\n                                        <a href=\"/profile\">Return to Profile</a>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n\r\n                        {program.isLoading && <SpinnerSection />}\r\n                        {!program.isLoading && (\r\n                            <div className=\"wrapper rhythm\">\r\n                                <div className=\"form-wrapper\">\r\n                                    <h2 className=\"heading heading--h2\">Scholarship</h2>\r\n                                    {requiredAnswers?.length > 0?\r\n                                        <ScholarshipProgressHeader program={program} answers={requiredAnswers} app={appInfo} completedSections={completedSections}/>\r\n                                    :null}\r\n                                    <div className=\"component\">\r\n                                        <>\r\n                                            {seasonNotes.map((note) => (\r\n                                                <FieldRow>\r\n                                                    <FieldSlot>\r\n                                                        <strong>{note.Category}</strong>\r\n                                                    </FieldSlot>\r\n                                                    <FieldSlot>\r\n                                                        <span\r\n                                                            dangerouslySetInnerHTML={{\r\n                                                                __html: note.Description,\r\n                                                            }}\r\n                                                        ></span>\r\n                                                    </FieldSlot>\r\n                                                </FieldRow>\r\n                                            ))}\r\n                                        </>\r\n                                    </div>\r\n                                    <div className=\"component\">\r\n                                        {membershipQuestion?.isEitherOr === true &&\r\n                                            <FieldSection withDivider={false}\r\n                                                title=\"Membership fund qualification\">\r\n                                                <FieldRow>\r\n                                                    <FieldSlot md={12}>\r\n                                                        <RadioGroup\r\n                                                            onChange={handleQualification}\r\n                                                            name={qualifyByMemberField}\r\n                                                            value={isQualifiedByMember === true ? \"True\" : isQualifiedByMember === false ? \"False\" : ''}\r\n                                                            listItems={[\r\n                                                                { value: \"True\", label: \"I am eligible for this scholarship through relationship to a qualifying member\" },\r\n                                                                { value: \"False\", label: \"I am eligible through this scholarship by some other means\", },\r\n                                                            ]}\r\n                                                        />\r\n                                                    </FieldSlot>                                                \r\n                                                </FieldRow>\r\n                                            </FieldSection>\r\n                                        }\r\n\r\n                                        {questions.map((question, index) => {\r\n                                            \r\n                                            // if this is an alternative to a membership question, skip until implied we qualify by other means\r\n                                            if (isQualifiedByMember !== false && question.type != \"Membership\" && question.requirementType == \"EitherOr\")\r\n                                                return null;\r\n\r\n                                            let fieldComponent = null;\r\n                                            if ((question.isRenewalStage && appInfo.isRenewal) || (question.isApplicationStage && !appInfo.isRenewal)) {\r\n                                                const isLastItem = questions.length === index - 1;                                                \r\n                                                \r\n                                                switch (question.type) {\r\n                                                    case \"Text\":\r\n                                                        fieldComponent = (\r\n                                                            <FieldSection\r\n                                                                title={question.title}\r\n                                                                subtitle={question.description}\r\n                                                                withDivider={!isLastItem}\r\n                                                                isSoftRequired={question.isRequired}\r\n                                                            >\r\n                                                                <FieldRow>\r\n                                                                    <FieldSlot md={12}>\r\n                                                                        <LargeTextEditor\r\n                                                                            name={question.name}\r\n                                                                            inputLabel={question.title}\r\n                                                                            placeholder={\"Start writing here...\"}\r\n                                                                            characterLimit={question.maxCharacters}\r\n                                                                        />\r\n                                                                    </FieldSlot>\r\n                                                                </FieldRow>\r\n                                                            </FieldSection>\r\n                                                        );\r\n                                                        break;\r\n                                                    case \"Boolean\":\r\n                                                        fieldComponent = (\r\n                                                            <FieldSection\r\n                                                                title={question.title}\r\n                                                                withDivider={!isLastItem}\r\n                                                                isSoftRequired={question.isRequired}\r\n                                                            >\r\n                                                                <Checkbox name={question.name} label={striptags(question.description)} />{\" \"}\r\n                                                            </FieldSection>\r\n                                                        );\r\n                                                        break;\r\n                                                    case \"Membership\":\r\n                                                        if (isQualifiedByMember)\r\n                                                            fieldComponent = (\r\n                                                                <FieldSection \r\n                                                                    title={question.title} \r\n                                                                    withDivider={!isLastItem}   \r\n                                                                    isSoftRequired={question.isRequired}>\r\n                                                                    <FieldRow>\r\n                                                                        <FieldSlot>\r\n                                                                            <MembershipAnswer question={question} answer={answers.get(question.name)} />\r\n                                                                        </FieldSlot>\r\n                                                                    </FieldRow>\r\n                                                                </FieldSection>\r\n                                                            );\r\n                                                        else\r\n                                                            fieldComponent = <></>\r\n                                                        break;\r\n                                                    case \"Document\":\r\n                                                        const answer = answers.getDocument(question.name, DocumentDeliveryTypes.UPLOAD);\r\n                                                        fieldComponent = (\r\n                                                            <FieldSection title={question.title} withDivider={!isLastItem} subtitle={question.description} isSoftRequired={question.isRequired}>\r\n                                                                <FieldRow>\r\n                                                                    <FieldSlot>\r\n                                                                        <HiddenInput\r\n                                                                            name={compositeFieldname(`${question.name}_${DocumentDeliveryTypes.UPLOAD}`, AnswerTypeDocumentProps.ID)} \r\n                                                                            value={answer?.Id}/>\r\n                                                                        <HiddenInput\r\n                                                                            name={compositeFieldname(`${question.name}_${DocumentDeliveryTypes.UPLOAD}`, \"AnswerType\")} \r\n                                                                            value={question.type}/>\r\n                                                                        <HiddenInput\r\n                                                                            name={compositeFieldname(`${question.name}_${DocumentDeliveryTypes.UPLOAD}`, \"IsScholarshipDocument\")}\r\n                                                                            value={true} />\r\n                                                                        <HiddenInput\r\n                                                                            name={compositeFieldname(`${question.name}_${DocumentDeliveryTypes.UPLOAD}`, AnswerTypeDocumentProps.DELIVERY_TYPE)}\r\n                                                                            value={DocumentDeliveryTypes.UPLOAD} />\r\n                                                                        <HiddenInput\r\n                                                                            name={compositeFieldname(`${question.name}_${DocumentDeliveryTypes.UPLOAD}`, AnswerTypeDocumentProps.IS_SELECTED)}\r\n                                                                            value={true} />\r\n                                                                        <ScholarshipUploader name={`${question.name}_${DocumentDeliveryTypes.UPLOAD}`}></ScholarshipUploader>\r\n                                                                    </FieldSlot>\r\n                                                                </FieldRow>\r\n                                                            </FieldSection>\r\n                                                        );\r\n                                                    default:\r\n                                                        break;\r\n                                                }\r\n                                                return (\r\n                                                    <div style={{ marginTop: \"2rem\" }}>\r\n                                                        {fieldComponent}\r\n                                                    </div>\r\n                                                );\r\n                                            }\r\n                                        })}\r\n                                    </div>\r\n\r\n\r\n                                    <div\r\n                                        container\r\n                                        className=\"grant-action-buttons\"\r\n                                        marginTop=\"1rem\"\r\n                                    >\r\n\r\n                                        <div>                                            \r\n                                            <a href={`/additional-scholarship-info/${activeYear}#section2`} className='button' >Return to list</a>\r\n                                            <Button\r\n                                                loading={saveLoading}\r\n                                                name=\"Save\"\r\n                                                label=\"Save\"\r\n                                                type=\"submit\"\r\n                                                onClick={handleSubmit(onSubmit, onError)}\r\n                                            />\r\n                                            {appInfo.isStarted && appInfo.isRemovable &&\r\n                                                <Button\r\n                                                    loading={saveLoading}\r\n                                                    name=\"Remove\"\r\n                                                    label=\"Remove\"\r\n                                                    onClick={handleRemove}\r\n                                                />\r\n                                            }\r\n                                            <Button\r\n                                                name=\"Cancel\"\r\n                                                label=\"Cancel\"\r\n                                                variant=\"text\"\r\n                                                onClick={handleCancel}\r\n                                            />\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        )}\r\n                    </div>\r\n                </div>\r\n            </PortalView>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\nexport default Scholarship;\r\n","import { actions } from \"./../../store\";\r\nimport { useSelector } from \"react-redux\";\r\nimport React, { useState, useRef, useEffect } from \"react\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport PrintIcon from \"../../components/PrintIcon\";\r\nimport PortalView from \"./../../components/Global/PortalView\";\r\nimport ProgressBar from \"../../components/progress/ProgressBar\";\r\nimport CompleteSubmission from \"../../components/CompleteSubmission\";\r\nimport { FIELDS } from \"../../store/form/fields\";\r\nimport ProgramInfo from \"../../utils/dtos/ProgramInfo\";\r\nimport ApplicationInfo from \"../../utils/dtos/ApplicationInfo\";\r\nimport Award from \"../../utils/dtos/Award\";\r\nimport apiClient from \"../../utils/API\";\r\nimport { useHistory } from \"react-router\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { open } from \"../../store/snack/actions\";\r\nimport _get from \"lodash.get\";\r\nimport ProgressBarLabel from \"../../components/progress/ProgressBarLabel\";\r\nimport EditCollegePlan from \"../additional-scholarship-info/EditCollegePlan\";\r\nimport EditCollegeOfChoice from \"../field-groups/EditCollegeOfChoice\";\r\nimport SectionFormHelper from \"../../utils/helper/SectionHelper\";\r\nimport SectionStateIcon from \"../../components/progress/SectionStateIcon\";\r\nimport ApplicationSubmitButton from \"../../components/Utility/ApplicationSubmitButton\";\r\n\r\n/**\r\n * early learning program code\r\n */\r\nconst PROGRAM_CODE = \"ELP\";\r\n\r\n/**\r\n * early learning application component\r\n */\r\nfunction EarlyLearning() {\r\n    const history = useHistory();\r\n\r\n\r\n    const methods = useForm({\r\n        mode: \"onBlur\",\r\n    });\r\n    const {\r\n        errors,\r\n        formState,\r\n        getValues,\r\n        setValue,\r\n        handleSubmit,\r\n        watch,\r\n    } = methods;\r\n    const authState = useSelector((state) => state.auth);\r\n    const formsState = useSelector((state) => state.form);\r\n\r\n    const [showConfirmation, setShowConfirmation] = useState(false);\r\n   \r\n    const [programData, setProgramData] = useState(null);\r\n    const program = new ProgramInfo(programData);\r\n    const activeYear = program.currentYear;\r\n\r\n    const [awardData, setAwardData] = useState(null);\r\n    const award = new Award(awardData);\r\n    \r\n    const [applicationData, setApplicationData] = useState(null);\r\n    const app = new ApplicationInfo(applicationData);\r\n    const submitRef = useRef(null);\r\n\r\n\r\n    const sectionGroup = new SectionFormHelper(useState(null), PROGRAM_CODE);\r\n\r\n    sectionGroup.title = program.title;\r\n\r\n    const collegeChoice = sectionGroup.create(useState(null), useRef(), [\r\n        FIELDS.COLLEGE_CHOICE,\r\n        FIELDS.COLLEGE_STANDING,\r\n    ], \"College Choice\");\r\n\r\n    const collegePlans = sectionGroup.create(useState(null), useRef(), [\r\n        FIELDS.DEGREES,\r\n        FIELDS.CAREER_GOAL\r\n    ], \"College Plans\");\r\n\r\n\r\n    useEffect(() => {\r\n        (async () => {\r\n            const program = await apiClient.getProgram(PROGRAM_CODE);\r\n            setProgramData(program);\r\n            const activeYear = new ProgramInfo(program).currentYear;\r\n\r\n            const [awards, app, unused, unused2] = await Promise.all([\r\n                apiClient.getApplicationAwardStatus(PROGRAM_CODE, activeYear),\r\n                apiClient.getApplication(PROGRAM_CODE, activeYear),\r\n                sectionGroup.fetchState(activeYear),\r\n            ]);\r\n            setApplicationData(app);\r\n            setAwardData(awards);\r\n        })()\r\n    }, []);\r\n\r\n\r\n    const applicationYear = `${activeYear}-${activeYear + 1}`;\r\n\r\n    const dispatch = useDispatch();\r\n\r\n    const onError = (errors, e) => {\r\n        // console.log(\"ERROR\", errors, e);\r\n    };\r\n\r\n    const [submitLoading, setSubmitLoading] = useState(false);\r\n\r\n\r\n    const actualSubmit = async () => {\r\n        const actualSubmission = async (data, e) => {\r\n           \r\n            await actions.submitForm(data, [], [], activeYear);\r\n            await apiClient.submitApplication(PROGRAM_CODE, activeYear);\r\n            // console.log(data, e);\r\n            setShowConfirmation(true);\r\n        };\r\n\r\n        try {\r\n            setSubmitLoading(true);\r\n            const execSubmission = handleSubmit(actualSubmission, onError);\r\n            await execSubmission();\r\n            dispatch(\r\n                open({\r\n                    message: \"Submitted Successfully\",\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        } catch (e) {\r\n            console.error(e);\r\n            dispatch(\r\n                open({\r\n                    message: e.message,\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        } finally {\r\n            setSubmitLoading(false);\r\n        }\r\n    };\r\n\r\n    const onEdit = () => {\r\n        setShowConfirmation(false);\r\n        window.location.reload(true); /* 3722/SP236: Calling components aren't keeping application state so, reload the page from server. */\r\n    }\r\n\r\n\r\n\r\n    // percent complete, giving a fixed 25% to the profile and 1% to the submit button\r\n    const pecentComplete = sectionGroup.isComplete && app.isSubmitted ? 100 : Math.round(25 + 74 * sectionGroup.percentComplete / 100 + (app.isSubmitted ? 1 : 0));\r\n\r\n    return (\r\n\r\n        <PortalView>\r\n            <div name=\"ApplicationsPage\">\r\n                <div className=\"page-intro\">\r\n                    <div className=\"wrapper\">\r\n                        <div className=\"page-intro__layout\">\r\n                            <div className=\"page-intro__icon\">\r\n                                <img src=\"/MyApplictionsIcon.svg\" alt=\"Applications icon\" style={{ marginTop: \".5rem\" }} />\r\n                            </div>\r\n                            <div className=\"page-intro__content rhythm\">\r\n                                <h1 className=\"heading heading--h1\">\r\n                                    {program.name}\r\n                                    <PrintIcon />\r\n                                </h1>\r\n                                <h2 className=\"heading heading--h2\">{applicationYear}</h2>\r\n                                <a href=\"/dashboard\">Return to Dashboard</a>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n\r\n                {showConfirmation ? (\r\n                    <CompleteSubmission onEdit={onEdit} applicationHelper={sectionGroup} />\r\n                ) : (\r\n\r\n                    <div className=\"wrapper\">\r\n                        <div className=\"application-progress component\">\r\n                            <div className=\"progress-bar rhythm\">\r\n                                <h3 className=\"heading heading--h3\">\r\n                                    Application Progress\r\n                                </h3>\r\n\r\n                                <ProgressBar progress={pecentComplete} />\r\n\r\n                                <div className=\"progress-bar__labels\">\r\n                                    <ProgressBarLabel title=\"Profile\" state=\"complete\" />\r\n                                    {sectionGroup.sections.filter(x => x.title != \"Transcripts\").map(section =>\r\n                                        <ProgressBarLabel title={section.title} state={section.completionState} sectionRef={section.ref} />\r\n                                    )}\r\n                                    <ProgressBarLabel title=\"Submit\" state={app.isSubmitted ? \"complete\" : \"incomplete\"} sectionRef={submitRef} />\r\n                                </div>\r\n                            </div>\r\n                        </div> {/* application progress */}\r\n\r\n                        <div className=\"divider\" />\r\n\r\n                        {/* Questions */}\r\n                    \r\n                        <div className=\"college-choice\" ref={collegeChoice.ref}>\r\n                            <div className=\"form-wrapper rhythm\">\r\n                                <EditCollegeOfChoice section={collegeChoice} year={activeYear} status={<SectionStateIcon section={collegeChoice} />} onChange={() => collegeChoice.updateCompletion()} />\r\n                            </div>\r\n                        </div>\r\n\r\n                        <div className=\"transcripts\" ref={collegePlans.ref}>\r\n                            <div className=\"form-wrapper rhythm\">\r\n                                <EditCollegePlan section={collegePlans} year={activeYear} status={<SectionStateIcon section={collegePlans} />} onChange={() => collegePlans.updateCompletion()} />\r\n                            </div>\r\n                        </div>\r\n\r\n                     \r\n                        <div ref={submitRef}>\r\n                            <div className=\"form-wrapper rhythm\">\r\n                                <div className=\"grant-action-buttons\">\r\n                                    <ApplicationSubmitButton onClick={actualSubmit} app={app} sections={sectionGroup} loading={submitLoading} />\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n\r\n\r\n                    </div>\r\n                )}\r\n            </div>{/* applications-page */}\r\n        </PortalView>\r\n    );\r\n}\r\n\r\nexport default EarlyLearning;\r\n","import { useForm, FormProvider } from \"react-hook-form\";\r\nimport { useState, useEffect } from 'react';\r\nimport { FieldSection } from '../../components/Forms/FieldSection';\r\nimport FormSection from '../../components/FormSection';\r\nimport _get from 'lodash.get';\r\nimport { useDispatch } from 'react-redux';\r\nimport DegreesQuestion from \"../../components/answer/question/DegreesQuestion\";\r\n\r\n/**\r\n * college plans as relevant to renewal applications\r\n * @param {*} param0 \r\n * @returns \r\n */\r\nfunction RenewEditCollegePlan({ onCancel, section, status }) {\r\n       \r\n    const methods = useForm({\r\n        mode: 'onBlur'\r\n    });\r\n    \r\n    const { getValues, handleSubmit} = methods;\r\n\r\n    const [loading, setLoading] = useState(false)\r\n    const dispatch = useDispatch();\r\n\r\n    const onSubmit = async (data) => {\r\n      section.saveAnswers(data, dispatch);\r\n    };\r\n  \r\n    const onError = (errors, e) => {\r\n      // console.log('ERROR',errors, e);\r\n    }\r\n\r\n    useEffect(() => {\r\n      window.addEventListener('beforeunload', alertUser)\r\n      return () => {\r\n        window.removeEventListener('beforeunload', alertUser)\r\n      }\r\n    }, [])\r\n    const alertUser = e => {\r\n      e.preventDefault()\r\n      e.returnValue = ''\r\n    } \r\n\r\n    return (\r\n      <FormProvider {...methods}>\r\n        <form onSubmit={handleSubmit(onSubmit, onError)}>\r\n          <FormSection\r\n            title=\"College Plans\"\r\n            isEditable={true}\r\n            onSaveClick={handleSubmit(onSubmit, onError)}\r\n            onCancelClick={onCancel}\r\n            loading={loading}\r\n            status={status}\r\n          >\r\n            {/* Use field section component to add form section padding to area */}\r\n            <FieldSection title=\"Degree Plan\" isRequired>\r\n                <DegreesQuestion section={section} />\r\n            </FieldSection>\r\n      \r\n          </FormSection>\r\n        </form>\r\n      </FormProvider>\r\n    );\r\n  }\r\n\r\nexport default RenewEditCollegePlan;\r\n","import { useSelector } from \"react-redux\";\r\nimport { useState } from \"react\";\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport Button from \"../../components/Button\";\r\nimport PortalView from \"./../../components/Global/PortalView\";\r\nimport { useEffect } from \"react\";\r\nimport apiClient from \"../../utils/API\";\r\nimport { goBack } from \"../../utils\";\r\nimport Question from \"../../utils/dtos/Question\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport { FieldSlot, FieldSection, FieldRow, } from \"../../components/Forms/FieldSection\";\r\nimport SpinnerSection from \"../../components/Utility/SpinnerSection\";\r\nimport { actions } from \"../../store\";\r\nimport striptags from \"striptags\";\r\nimport LargeTextEditor from \"../../components/LargeTextEditor\";\r\nimport Checkbox from \"../../components/Checkbox\";\r\nimport DecimalAnswer from \"../../components/answer/DecimalAnswer\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { open } from \"../../store/snack/actions\";\r\nimport ScholarshipUploader from \"../../components/ScholarshipUploader\";\r\nimport { compositeFieldname } from '../../utils';\r\nimport { AnswerTypeDocumentProps, DocumentDeliveryTypes, FIELDS } from '../../store/form/fields';\r\nimport HiddenInput from '../../components/Utility/HiddenInput';\r\nimport EditCollegeOfChoice from \"../field-groups/EditCollegeOfChoice\";\r\nimport RenewEditCollegePlan from \"./RenewEditCollegePlan\";\r\nimport ProgramInfo from \"../../utils/dtos/ProgramInfo\";\r\nimport SectionFormHelper from \"../../utils/helper/SectionHelper\";\r\nimport ProgramApplicationInfo from \"../../utils/dtos/ProgramApplicationInfo\";\r\n\r\nfunction Renew() {\r\n    const methods = useForm({ mode: \"onBlur\", });\r\n    const { errors, formState, watch, handleSubmit, getValues } = methods;\r\n\r\n    const history = useHistory();\r\n    const handleCancel = () => {\r\n        goBack({\r\n            history,\r\n            defaultRoute: \"/dashboard\",\r\n        });\r\n    };\r\n    const { code } = useParams();\r\n    const dispatch = useDispatch();\r\n\r\n    const [isLoading, setIsLoading] = useState(true);\r\n    const [saveLoading, setSaveLoading] = useState(false);\r\n    const [programData, setProgramData] = useState(null);\r\n    const [questionData, setQuestionData] = useState([]);\r\n    const [programApplicationData, setProgramApplicationData] = useState(null);\r\n    const programApplicationInfo = new ProgramApplicationInfo(programApplicationData, programData);\r\n    const program = new ProgramInfo(programData);\r\n    const activeYear = program.currentYear;\r\n    const year = activeYear;\r\n\r\n    var sections = new SectionFormHelper(useState(null));\r\n    var collegeChoiceSection = sections.create(useState(null), null, [\r\n        FIELDS.COLLEGE_CHOICE,\r\n        FIELDS.COLLEGE_STANDING,\r\n        FIELDS.COLLEGE_DUAL_ENROLLED\r\n    ]);\r\n    var collegePlansSection = sections.create(useState(null), null, [\r\n        FIELDS.DEGREES,\r\n        FIELDS.UNDERGRAD_GPA,\r\n        FIELDS.GRADUATE_GPA\r\n    ]);\r\n    var scholarshipQuestions = sections.create(useState(null), null, questionData.map(x => x.Name));\r\n\r\n    useEffect(() => {\r\n        (async () => {\r\n            try {\r\n                const programOverview = await apiClient.getProgram(code);\r\n                const program = new ProgramInfo(programOverview);\r\n                const questions = await apiClient.get(`question/questions/${code}/${program.currentYear}`);        \r\n                setProgramData(programOverview);\r\n                setQuestionData(questions);\r\n                \r\n                const programApplication = await apiClient.getApplication(code, program.currentYear);\r\n                setProgramApplicationData(programApplication);\r\n                \r\n                scholarshipQuestions._fieldKeys = questions.map(x => x.Name);\r\n                sections.fetchAnswers(program.currentYear);\r\n\r\n            } catch (err) {\r\n                console.error(err);\r\n            } finally {\r\n                setIsLoading(false);\r\n            }\r\n        })();\r\n    }, []);\r\n\r\n\r\n    /**\r\n     * actual answer submit handler\r\n     * @param {*} data formdata\r\n     */\r\n    const onSubmit = async (data) => {\r\n        try {\r\n\r\n            setSaveLoading(true)\r\n            if (watchNoLetterGrades === true) {\r\n                data[FIELDS.UNDERGRAD_GPA] = \"0.01\"\r\n            }\r\n\r\n            const results = await actions.submitForm(data, [], [\"Agreement\"], activeYear);\r\n            await apiClient.acceptApplicationAward(code, year);\r\n            // console.log(data, e);\r\n            setShowConfirmation(true);\r\n            dispatch(\r\n                open({\r\n                    message: \"Saved Successfully\",\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n\r\n        } catch (e) {\r\n            console.error(e);\r\n            dispatch(\r\n                open({\r\n                    message: e.message,\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        } finally {\r\n            setSaveLoading(false)\r\n        }\r\n    };\r\n\r\n    const onError = (errors, e) => {\r\n        console.log({\r\n            errors,\r\n            e,\r\n        });\r\n        if(errors){\r\n            dispatch(open({\r\n              message: \"Please take a moment to complete the required fields.\",\r\n              severity: \"success\",\r\n            }))\r\n        }\r\n    };\r\n\r\n\r\n\r\n    const watchNoLetterGrades = watch(\"NoLetterGrades\")\r\n   \r\n    const setShowConfirmation = () => {\r\n        history.push(\"/dashboard\");\r\n    };\r\n\r\n    //=====( VALIDATE GPA )\r\n\r\n    const [gpaError, setGpaError] = useState(null);\r\n    const validateGPA = () => {\r\n        if (getValues(FIELDS.GRADUATE_GPA) || getValues(FIELDS.UNDERGRAD_GPA)) {\r\n            setGpaError(null);\r\n            return true;\r\n        } else {\r\n            setGpaError(\r\n                <div style={{ marginTop: \".75rem\", color: \"red\" }}>\r\n                    * One GPA Field Is Required\r\n                </div>\r\n            );\r\n            return false;\r\n        }\r\n    };\r\n\r\n    return (\r\n        <FormProvider {...methods}>\r\n            <PortalView>\r\n                <div name=\"ApplicationsPage\" className=\"Scholarships\">\r\n                    <div className=\"rhythm\">\r\n                        <div className=\"page-intro\">\r\n                            <div className=\"wrapper\">\r\n                                <div className=\"page-intro__layout\">\r\n                                    <div className=\"page-intro__icon\">\r\n                                        <img src=\"/MyApplictionsIcon.svg\" alt=\"Student Portal\" style={{ marginTop: \".25rem\" }} />\r\n                                    </div>\r\n                                    <div className=\"page-intro__content rhythm\">\r\n                                        <h1 className=\"heading heading--h1\">{program.name}</h1>\r\n                                        <a href=\"/dashboard\">Return to Dashboard</a>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n\r\n                        {isLoading && <SpinnerSection />}\r\n                        {!isLoading && (\r\n                            <div className=\"wrapper rhythm\">\r\n\r\n                                <div className=\"form-wrapper\">\r\n                                    <h2 className=\"heading heading--h2\">Scholarship Renewal</h2>\r\n                                    <div className=\"component\">\r\n                                        <>\r\n                                            {program.currentSeason?.notes.map((note) => (\r\n                                                <FieldRow>\r\n                                                    <FieldSlot>\r\n                                                        <strong>{note.Category}</strong>\r\n                                                    </FieldSlot>\r\n                                                    <FieldSlot>\r\n                                                        <span\r\n                                                            dangerouslySetInnerHTML={{\r\n                                                                __html: note.Description,\r\n                                                            }}\r\n                                                        ></span>\r\n                                                    </FieldSlot>\r\n                                                </FieldRow>\r\n                                            ))}\r\n                                        </>\r\n                                    </div>\r\n \r\n                                    <EditCollegeOfChoice year={year} hideDualEnrolled={false} section={collegeChoiceSection} />\r\n\r\n                                    <RenewEditCollegePlan section={collegePlansSection} />\r\n\r\n                                    <HiddenInput name={\"validateGpa\"} rules={{ validate: () => validateGPA() }} />\r\n                                    <FieldSection isSoftRequired={true}\r\n                                    title=\"Cumulative Undergraduate GPA\" withDivider={true}>\r\n                                        <FieldRow>\r\n                                            <FieldSlot>\r\n                                                <DecimalAnswer disabled={watchNoLetterGrades} answer={collegePlansSection.getAnswerByField(FIELDS.UNDERGRAD_GPA)} inputLabel=\"Undergraduate GPA\" />\r\n                                                {gpaError}\r\n                                            </FieldSlot>\r\n                                            <FieldSlot container alignItems=\"flex-end\">\r\n                                                <Checkbox name='NoLetterGrades' label=\"My college did not assign grades.\" />\r\n                                            </FieldSlot>\r\n                                        </FieldRow>\r\n                                    </FieldSection>\r\n                                    <FieldSection isSoftRequired={true}\r\n                                    title=\"Cumulative Graduate GPA\" withDivider={true}>\r\n                                        <FieldRow>\r\n                                            <FieldSlot>\r\n                                                <DecimalAnswer answer={collegePlansSection.getAnswerByField(FIELDS.GRADUATE_GPA)} inputLabel=\"Graduate GPA\" />\r\n                                                {gpaError}\r\n                                            </FieldSlot>\r\n                                        </FieldRow>\r\n                                    </FieldSection>\r\n\r\n                                    <div className=\"component\">\r\n                                        {questionData.map((questionData, index) => {\r\n                                            let question = new Question(questionData);\r\n                                            if (questionData.Stage == 'Renewal') {\r\n                                                let { Name, Type, Title, Description } = questionData;\r\n                                                let fieldComponent = null;\r\n\r\n                                                const isLastItem = questionData.length === index - 1;\r\n\r\n                                                switch (Type) {\r\n                                                    case \"Text\":\r\n                                                        fieldComponent = (\r\n                                                            <FieldSection\r\n                                                                title={Title}\r\n                                                                subtitle={Description}\r\n                                                                withDivider={!isLastItem}\r\n                                                            >\r\n                                                                <FieldRow>\r\n                                                                    <FieldSlot md={12}>\r\n                                                                        <LargeTextEditor\r\n                                                                            name={Name}\r\n                                                                            inputLabel={Title}\r\n                                                                            placeholder={\"Start writing here...\"}\r\n                                                                            wordLimit=\"10000\"\r\n                                                                        />\r\n                                                                    </FieldSlot>\r\n                                                                </FieldRow>\r\n                                                            </FieldSection>\r\n                                                        );\r\n                                                        break;\r\n                                                    case \"Boolean\":\r\n                                                        fieldComponent = (\r\n                                                            <FieldSection\r\n                                                                title={Title}\r\n                                                                withDivider={!isLastItem}\r\n                                                            >\r\n                                                                <Checkbox name={Name} label={striptags(Description)} />{\" \"}\r\n                                                            </FieldSection>\r\n                                                        );\r\n                                                        break;                                                   \r\n                                                    case \"Document\":\r\n                                                        fieldComponent = (\r\n                                                            <FieldSection title={Title} withDivider={!isLastItem} subtitle={Description}>\r\n                                                                <FieldRow>\r\n                                                                    <FieldSlot>\r\n                                                                        <HiddenInput\r\n                                                                            name={compositeFieldname(`${Name}_${DocumentDeliveryTypes.UPLOAD}`, AnswerTypeDocumentProps.ID)} />\r\n                                                                        <HiddenInput\r\n                                                                            name={compositeFieldname(`${Name}_${DocumentDeliveryTypes.UPLOAD}`, \"AnswerType\")} />\r\n                                                                        <HiddenInput\r\n                                                                            name={compositeFieldname(`${Name}_${DocumentDeliveryTypes.UPLOAD}`, \"IsScholarshipDocument\")}\r\n                                                                            defaultValue={true} />\r\n                                                                        <HiddenInput\r\n                                                                            name={compositeFieldname(`${Name}_${DocumentDeliveryTypes.UPLOAD}`, AnswerTypeDocumentProps.DELIVERY_TYPE)}\r\n                                                                            defaultValue={DocumentDeliveryTypes.UPLOAD} />\r\n                                                                        <HiddenInput\r\n                                                                            name={compositeFieldname(`${Name}_${DocumentDeliveryTypes.UPLOAD}`, AnswerTypeDocumentProps.IS_SELECTED)}\r\n                                                                            defaultValue={true} />\r\n                                                                        <ScholarshipUploader name={`${Name}_${DocumentDeliveryTypes.UPLOAD}`}\r\n                                                                            isRequired={question.isRequired}></ScholarshipUploader>\r\n                                                                    </FieldSlot>\r\n                                                                </FieldRow>\r\n                                                            </FieldSection>\r\n                                                        );\r\n                                                    default:\r\n                                                        break;\r\n                                                }\r\n                                                return (\r\n                                                    <div style={{ marginTop: \"2rem\" }}>\r\n                                                        {fieldComponent}\r\n                                                    </div>\r\n                                                );\r\n                                            }\r\n                                        })}\r\n                                    </div>\r\n\r\n                                    <div\r\n                                        container\r\n                                        className=\"grant-action-buttons\"\r\n                                        marginTop=\"1rem\"\r\n                                    >\r\n                                        <div>\r\n                                            { programApplicationInfo.isDeadlinePassed && <div>Deadline has passed.</div> }\r\n                                            <Button\r\n                                                loading={saveLoading}\r\n                                                name=\"Renew\"\r\n                                                label=\"Renew\"\r\n                                                type=\"submit\"\r\n                                                onClick={handleSubmit(onSubmit, onError)}\r\n                                                disabled={programApplicationInfo.isDeadlinePassed}\r\n                                            />\r\n                                            <Button\r\n                                                name=\"Cancel\"\r\n                                                label=\"Cancel\"\r\n                                                variant=\"text\"\r\n                                                onClick={handleCancel}\r\n                                            />\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        )}\r\n                    </div>\r\n                </div>\r\n            </PortalView>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\nexport default Renew;\r\n","import { useState } from \"react\";\r\nimport { FormProvider, useForm } from 'react-hook-form';\r\nimport Button from \"../../components/Button\";\r\nimport Input from \"../../components/Input\";\r\nimport { CustomCheckbox } from '../../components/Checkbox';\r\nimport apiClient from \"../../utils/API\";\r\nimport { goBack } from \"../../utils\";\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\n\r\n/**\r\n     * decline process if this is an offer for an initial award \r\n     * @returns {Component}\r\n     */\r\nfunction DeclineAward({ code, year, onCancel }) {\r\n\r\n    const history = useHistory();\r\n    const methods = useForm({ mode: 'onBlur' });\r\n    const { register, watch, getValues, handleSubmit } = methods;\r\n \r\n    const [isCertified, setCertified] = useState(false);\r\n\r\n    const toggleCertification = () => {\r\n        setCertified(!isCertified);\r\n        //return true;\r\n    }\r\n\r\n\r\n    /**\r\n     * form submit handler\r\n     */\r\n    const onSubmit = async (data) => {      \r\n        const reason = data[\"reason\"];\r\n\r\n        await apiClient.declineApplicationAward(code, year, reason);\r\n        goBack({\r\n            history,\r\n            defaultRoute: \"/dashboard\"\r\n        })\r\n    }\r\n\r\n\r\n    return (\r\n        <FormProvider {...methods}>\r\n            <form>\r\n\r\n                <div className=\"wrapper rhythm\">\r\n\r\n                    <div className=\"form-wrapper\">\r\n                        <h2 className=\"heading heading--h2\">Decline Award</h2>\r\n\r\n                        <div>\r\n                            <label>Reason for declining award (optional)</label>\r\n                            <div style={{ marginBottom: '3em' }}>\r\n                                <Input name=\"reason\" multiline rows={5} fullWidth={true}  />                                \r\n                            </div>\r\n                        </div>\r\n\r\n                        <p>By declining your award, you will allow OSAC the opportunity to offer the award to another applicant.</p>\r\n\r\n                        <ul className=\"list\">\r\n                            <li className=\"li\">I understand that I am declining the award for the {year} academic year.</li>\r\n                            <li className=\"li\">I understand that once declined, the award will be offered to another applicant.</li>\r\n                        </ul>\r\n                        <p style={{ marginTop: '2em;' }}>\r\n                            <label>\r\n                                <CustomCheckbox onClick={toggleCertification} />\r\n                                I have read the above statements and understand and agree to them.\r\n                                <span className=\"required\"> *</span>\r\n                            </label>\r\n\r\n                        </p>\r\n\r\n                        <div className=\"grant-action-buttons\" >\r\n                            <div>\r\n\r\n                                <Button\r\n                                    name=\"Decline\"\r\n                                    label='Decline Award'\r\n                                    disabled={!isCertified}\r\n                                    onClick={handleSubmit(onSubmit)}\r\n                                />\r\n\r\n                                {onCancel &&\r\n                                    <Button\r\n                                        name=\"Cancel\"\r\n                                        label=\"Cancel\"\r\n                                        variant=\"text\"\r\n                                        onClick={onCancel}\r\n                                    />\r\n                                }\r\n\r\n\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n\r\n\r\n                </div>\r\n            </form>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\nexport default DeclineAward;","import { useState } from \"react\";\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport Button from \"../../components/Button\";\r\nimport PortalView from \"./../../components/Global/PortalView\";\r\nimport { useEffect } from \"react\";\r\nimport apiClient from \"../../utils/API\";\r\nimport { goBack } from \"../../utils\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport SpinnerSection from \"../../components/Utility/SpinnerSection\";\r\nimport ProgramInfo from \"../../utils/dtos/ProgramInfo\";\r\nimport ApplicationInfo from \"../../utils/dtos/ApplicationInfo\";\r\nimport DeclineAward from \"./DeclineAward\";\r\n\r\n/**\r\n * page to prompt user to decline and award offer.\r\n * \r\n * Note: both renewals and initial awards (inc. Grants where applicable) are both being offered here on one page, to make it impossible to \"cross the streams\"\r\n * between the two kinds of offers.\r\n * @returns {Component}\r\n */\r\nfunction Decline() {\r\n    const methods = useForm({\r\n        mode: \"onBlur\",\r\n    });\r\n\r\n    const { code, year } = useParams();\r\n    const [isLoading, setLoading] = useState(true);\r\n    const [programData, setProgramData] = useState(null);\r\n    const [applicationData, setApplicationData] = useState(null);\r\n\r\n    const program = new ProgramInfo(programData);\r\n    const application = new ApplicationInfo(applicationData);\r\n\r\n\r\n    const history = useHistory();\r\n    const handleCancel = () => {\r\n        goBack({\r\n            history,\r\n            defaultRoute: \"/dashboard\",\r\n        });\r\n    };\r\n\r\n    // Decline the award & go backto dashboard.\r\n    const handleDeclineAward = async () => {\r\n        await apiClient.declineApplicationAward(code, year);\r\n        goBack({\r\n            history,\r\n            defaultRoute: \"/dashboard\"\r\n        })\r\n    }\r\n\r\n    useEffect(() => {\r\n        (async () => {\r\n            try {\r\n                const programOverview = await apiClient.getProgram(code);\r\n                const app = await apiClient.getApplication(code, year);\r\n\r\n                setProgramData(programOverview);\r\n                setApplicationData(app);\r\n\r\n            } catch (err) {\r\n                console.error(err);\r\n            } finally {\r\n                setLoading(false);\r\n            }\r\n        })();\r\n    }, []);\r\n\r\n    /**\r\n     * decline process if this is a RENEWAL application\r\n     * \r\n     * @returns {Component}\r\n     */\r\n    function DeclineRenewal() {\r\n\r\n        return (\r\n            <div className=\"wrapper rhythm\">\r\n\r\n                <div className=\"form-wrapper\">\r\n                    <h2 className=\"heading heading--h2\">Decline Renewal</h2>\r\n\r\n                    Confirm that you wish to decline the renewal for this fund.  Once you decline the funds will be awarded to another recipient and will not be available to you.\r\n\r\n                    <div\r\n                        container\r\n                        className=\"grant-action-buttons\"\r\n                        marginTop=\"1rem\"\r\n                    >\r\n\r\n                        <div>\r\n                            <Button\r\n                                name=\"Decline\"\r\n                                label='Decline Renewal'\r\n                                onClick={handleDeclineAward}\r\n                            />\r\n                            <Button\r\n                                name=\"Cancel\"\r\n                                label=\"Cancel\"\r\n                                variant=\"text\"\r\n                                onClick={handleCancel}\r\n                            />\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n\r\n\r\n\r\n    return (\r\n        <FormProvider {...methods}>\r\n            <PortalView>\r\n                <div name=\"ApplicationsPage\" className=\"Scholarships\">\r\n                    <div className=\"rhythm\">\r\n                        <div className=\"page-intro\">\r\n                            <div className=\"wrapper\">\r\n                                <div className=\"page-intro__layout\">\r\n                                    <div className=\"page-intro__icon\">\r\n                                        <img src=\"/MyApplictionsIcon.svg\" alt=\"Student Portal\" style={{ marginTop: \".25rem\" }} />\r\n                                    </div>\r\n                                    <div className=\"page-intro__content rhythm\">\r\n                                        <h1 className=\"heading heading--h1\">{program.name}</h1>\r\n                                        <a href=\"/profile\">Return to Profile</a>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n\r\n                        {(() => {\r\n                            if (isLoading)\r\n                                return <SpinnerSection />\r\n                            else if (application.isRenewal && application.declineableRenewalStatuses.includes(application.reviewStatus))\r\n                                return <DeclineRenewal />\r\n                            else if (!application.isAwardOffer)\r\n                                return <h3 className=\"heading heading--h3\">This award has not been offered and cannot be declined</h3>\r\n\r\n                            return <DeclineAward onCancel={handleCancel} code={code} year={year} />\r\n                        })()\r\n                        }\r\n\r\n                    </div>\r\n                </div>\r\n            </PortalView>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\nexport default Decline;\r\n","import { useState, useEffect } from \"react\";\r\nimport { FormProvider, useForm } from 'react-hook-form';\r\nimport { useDispatch } from \"react-redux\";\r\nimport Button from \"../../components/Button\";\r\nimport Input from \"../../components/Input\";\r\nimport apiClient from \"../../utils/API\";\r\nimport { open } from \"../../store/snack/actions\";\r\nimport { goBack } from \"../../utils\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport PortalView from \"../../components/Global/PortalView\";\r\nimport ProgramInfo from \"../../utils/dtos/ProgramInfo\";\r\nimport Award from \"../../utils/dtos/Award\";\r\n\r\n\r\n/**\r\n     * decline process if this is an offer for an initial award \r\n     * @returns {Component}\r\n     */\r\nfunction ThankTheDonor() {\r\n\r\n    const { code, year } = useParams();\r\n    const notificationLink = `/offer/${code}/${year}`;\r\n    const dispatch = useDispatch();\r\n    const history = useHistory();\r\n\r\n    const methods = useForm({ mode: \"onBlur\", });\r\n    const { watch, handleSubmit } = methods;\r\n    const [programData, setProgramData] = useState(null);\r\n    const [awardsData, setAwardsData] = useState(null);\r\n    const [isMessageSent, setMessageSent] = useState(false);\r\n\r\n    const program = new ProgramInfo(programData);\r\n    const award = new Award(awardsData);\r\n\r\n    useEffect(() => {\r\n        (async () => {\r\n            const [program, awards] = await Promise.all([\r\n                apiClient.getProgram(code),\r\n                apiClient.getApplicationAwardStatus(code, year),\r\n            ]);\r\n\r\n            setProgramData(program);\r\n            setAwardsData(awards);\r\n        })();\r\n    }, []);\r\n\r\n\r\n    /**\r\n     * form submit handler\r\n     */\r\n    const onSubmit = async (data) => {\r\n        const message = data[\"message\"];\r\n\r\n        try {\r\n            await apiClient.post('/award/send', { programCode: code, year, message });\r\n            setMessageSent(true);\r\n\r\n            dispatch(\r\n                open({\r\n                    message: \"Message sent\",\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n\r\n        } catch (e) {\r\n            dispatch(\r\n                open({\r\n                    message: e.message,\r\n                    severity: \"success\",\r\n                })\r\n            );\r\n        }\r\n    }\r\n\r\n    const onCancel = () => {\r\n        goBack({\r\n            history,\r\n            defaultRoute: notificationLink\r\n        });\r\n    }\r\n\r\n\r\n    return (\r\n        <FormProvider {...methods}>\r\n            <form>\r\n                <PortalView>\r\n                    <div name=\"ApplicationsPage\" className=\"Scholarships\">\r\n                        <div className=\"rhythm\">\r\n                            <div className=\"page-intro\">\r\n                                <div className=\"wrapper\">\r\n                                    <div className=\"page-intro__layout\">\r\n                                        <div className=\"page-intro__icon\">\r\n                                            <img src=\"/dashboard.svg\" alt=\"Student Portal\" style={{ marginTop: \".25rem\" }} />\r\n                                        </div>\r\n                                        <div className=\"page-intro__content rhythm\">\r\n                                            <h1 className=\"heading heading--h1\">\r\n                                                {program.name}\r\n                                                &nbsp; &mdash; &nbsp;\r\n                                                ${award.authorizedAmount?.toFixed(2)}\r\n                                            </h1>\r\n                                            <a href={notificationLink}>Return to Award</a>\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <div className=\"wrapper rhythm\">\r\n\r\n                                <div className=\"form-wrapper\">                                    \r\n                                    <div style={{ marginBottom: '3em' }}>\r\n                                        <Input name=\"message\" multiline rows={10} fullWidth={true} isRequired={true} disabled={isMessageSent}\r\n                                            placeholder=\"Send a thank you to your scholarship donor. Your message will be forwarded to the donor and the fund manager.\"\r\n                                            inputLabel={<span className=\"heading heading--h3\">Send the Donor a Thank You Note</span>} />\r\n                                    </div>\r\n\r\n                                    {!isMessageSent &&\r\n                                        <div className=\"grant-action-buttons\" >\r\n                                            <div>\r\n\r\n                                                <Button\r\n                                                    name=\"Send\"\r\n                                                    label='Send Thank You'\r\n                                                    onClick={handleSubmit(onSubmit)}\r\n                                                />\r\n\r\n                                                <Button\r\n                                                    name=\"Cancel\"\r\n                                                    label=\"Cancel\"\r\n                                                    variant=\"text\"\r\n                                                    onClick={onCancel}\r\n                                                />\r\n\r\n                                            </div>\r\n                                        </div>\r\n                                    }\r\n                                </div>\r\n\r\n\r\n                            </div>\r\n\r\n                        </div>\r\n                    </div>\r\n                </PortalView>\r\n\r\n            </form>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\nexport default ThankTheDonor;","import { Snackbar } from \"@material-ui/core\";\r\nimport MuiAlert from \"@material-ui/lab/Alert\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { close } from \"../store/snack/actions\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\n\r\nfunction Alert(props) {\r\n  return <MuiAlert elevation={6} variant=\"filled\" {...props} />;\r\n}\r\n\r\nconst SapSnackbar = () => {\r\n  const snack = useSelector((state) => state.snack);\r\n  const dispatch = useDispatch();\r\n\r\n  const handleClose = () => {\r\n    dispatch(close());\r\n  };\r\n\r\n  return (\r\n    <div>\r\n      <Snackbar\r\n        anchorOrigin={{\r\n          vertical: snack.vertical,\r\n          horizontal: snack.horizontal,\r\n        }}\r\n        open={snack.open}\r\n        onClose={handleClose}\r\n        message={snack.message}\r\n        autoHideDuration={4000}\r\n        action={\r\n          <IconButton\r\n            size=\"small\"\r\n            aria-label=\"close\"\r\n            color=\"inherit\"\r\n            onClick={handleClose}\r\n          >\r\n            <CloseIcon fontSize=\"small\" />\r\n          </IconButton>\r\n        }\r\n      ></Snackbar>\r\n    </div>\r\n  );\r\n};\r\nexport default SapSnackbar;\r\n","import { useState } from \"react\";\r\nimport { useForm, FormProvider } from \"react-hook-form\";\r\nimport Button from \"../../components/Button\";\r\nimport { CustomCheckbox } from '../../components/Checkbox';\r\nimport PortalView from \"../../components/Global/PortalView\";\r\nimport { useEffect } from \"react\";\r\nimport apiClient from \"../../utils/API\";\r\nimport { goBack } from \"../../utils\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport SpinnerSection from \"../../components/Utility/SpinnerSection\";\r\nimport ProgramInfo from \"../../utils/dtos/ProgramInfo\";\r\nimport ApplicationInfo from \"../../utils/dtos/ApplicationInfo\";\r\nimport DeclineAward from \"../decline/DeclineAward\";\r\nimport AwardSummary from \"../../components/award/AwardSummary\";\r\n\r\n/**\r\n * award acceptance page\r\n * @returns {Component}\r\n */\r\nfunction Offer() {\r\n    const methods = useForm({ mode: \"onBlur\", });\r\n\r\n    const { code, year } = useParams();\r\n    const [isLoading, setLoading] = useState(true);\r\n    const [programData, setProgramData] = useState(null);\r\n    const [applicationData, setApplicationData] = useState(null);\r\n    const [awardsData, setAwardsData] = useState(null);\r\n    const [donorData, setDonorData] = useState(null);\r\n    const isOcf = donorData?.DonorCode === 'OCF';\r\n\r\n    const program = new ProgramInfo(programData);\r\n    const application = new ApplicationInfo(applicationData);\r\n\r\n    const awardContactEmail = program.primaryEmail;\r\n\r\n\r\n    useEffect(() => {\r\n        (async () => {\r\n            try {\r\n                const [program, app, awards, donor] = await Promise.all([\r\n                    apiClient.getProgram(code),\r\n                    apiClient.getApplication(code, year),\r\n                    apiClient.getApplicationAwardStatus(code, year),\r\n                    apiClient.getDonor(code)\r\n                ]);\r\n\r\n                setProgramData(program);\r\n                setApplicationData(app);\r\n                setAwardsData(awards);\r\n                setDonorData(donor);\r\n\r\n            } catch (err) {\r\n                console.error(err);\r\n            } finally {\r\n                setLoading(false);\r\n            }\r\n        })();\r\n    }, []);\r\n\r\n    const history = useHistory();\r\n    const handleCancel = () => {\r\n        goBack({\r\n            history,\r\n            defaultRoute: \"/dashboard\",\r\n        });\r\n    };\r\n\r\n    // Decline the award & go backto dashboard.\r\n    const handleAcceptAward = async () => {\r\n        setSelectedAction(\"Accept\");\r\n    }\r\n\r\n    const handleCertifyAcceptance = async () => {\r\n        await apiClient.acceptApplicationAward(code, year);\r\n        goBack({\r\n            history,\r\n            defaultRoute: \"/dashboard\"\r\n        })\r\n    }\r\n\r\n    const handleDeclineAward = async () => {\r\n        setSelectedAction(\"Decline\");\r\n    }\r\n\r\n    const [selectedAction, setSelectedAction] = useState(null);\r\n    const handleDeferAward = async () => {\r\n\r\n        setSelectedAction(\"Defer\");\r\n    }\r\n\r\n    /**\r\n     * link for contacting awards team by email\r\n     * @returns {Component}\r\n     */\r\n    function AwardContactLink() {\r\n        const awardContactLink = \"mailto:\" + awardContactEmail;\r\n\r\n        return <a href={awardContactLink}>{awardContactEmail}</a>\r\n    }\r\n\r\n\r\n\r\n    /**\r\n     * certifications and process for accepting an initial scholarship award\r\n     * \r\n     * @returns {Component}\r\n     */\r\n    function AcceptScholarship() {\r\n\r\n        const [isCertified, setCertified] = useState(false);\r\n\r\n        const toggleCertification = () => {\r\n            setCertified(!isCertified);\r\n        }\r\n\r\n        return (\r\n            <div className=\"wrapper rhythm\">\r\n\r\n                <div className=\"form-wrapper\">\r\n                    <h2 className=\"heading heading--h2\">Award Announcement</h2>\r\n\r\n                    <AwardSummary program={programData} awards={awardsData} application={applicationData} />\r\n                   \r\n                    {donorData?.ThankYouContact &&\r\n                        <div>\r\n                            <h3 className=\"heading heading--h3\">Send Your Thank You Letter: </h3>\r\n                            <div style={{ marginLeft: '2em' }}>\r\n                                <div style={{ display: 'inline-block', verticalAlign: 'top' }} >\r\n                                    <a href={`/thankyou/${code}/${year}`}>Via Email</a>\r\n                                </div>\r\n                                <div style={{ display: 'inline-block', verticalAlign: 'middle', margin: '0 1em' }}>\r\n                                    ...or to...\r\n                                </div>\r\n                                <div style={{ display: 'inline-block', verticalAlign: 'top' }}>\r\n                                    <div>{program.name}</div>\r\n                                    <div>Care of: {donorData?.Name}</div>\r\n                                    <div>{donorData.ThankYouContact.Address1}</div>\r\n                                    <div>{donorData.ThankYouContact.Address2}</div>\r\n                                    <div>\r\n                                        {donorData.ThankYouContact.City}, &nbsp;\r\n                                        {donorData.ThankYouContact.State} &nbsp;\r\n                                        {donorData.ThankYouContact.Zip} &nbsp;\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    }\r\n\r\n                    <div>\r\n                        <h3 className=\"heading heading--h3\">Scholarship Acceptance</h3>\r\n                        <ul className=\"list\">\r\n                            <li className=\"li\">Failure to accept this award may delay or terminate your award and delay awarding\r\n                                an alternate recipient.</li>\r\n                            <li className=\"li\">If you are not sure about accepting or cannot accept the award, contact OSAC as\r\n                                soon as possible at <AwardContactLink />.\r\n                            </li>\r\n                        </ul>\r\n\r\n                        <h3 className=\"heading heading--h3\">Enrollment</h3>\r\n                        <ul className=\"list\">\r\n                            <li className=\"li\">If you transfer schools or become dual enrolled during the academic year, notify\r\n                                OSAC early to allow time to process the change. School changes may result\r\n                                in adjusted or cancelled award amounts.\r\n\r\n                            </li>\r\n                            <li className=\"li\">\r\n                                If you are considering a leave of absence, contact OSAC at\r\n                                &nbsp;<AwardContactLink />&nbsp;\r\n                                to determine if that will jeopardize your scholarship eligibility.\r\n                            </li>\r\n                        </ul>\r\n\r\n                        <h3 className=\"heading heading--h3\">Scholarship Disbursement</h3>\r\n                        <ul className=\"list\">\r\n                            <li className=\"li\">OSAC sends funds to your school financial aid office prior to the beginning of each\r\n                                term/semester. If you do not attend school for a term(s), you will not receive that\r\n                                portion of your award.</li>\r\n                            <li className=\"li\">If your award is less than $1,000, it will be a one-time disbursement to your school fall term.</li>\r\n                            <li className=\"li\">You must maintain the required enrollment status (see Conditions of Award above) and satisfactory academic progress to receive disbursements\r\n                                throughout the year.&nbsp; </li>\r\n                            <li className=\"li\">Scholarships must be used for educational expenses as defined by your school.&nbsp;\r\n                                These include tuition and fees, room and board, books, transportation, and education-related\r\n                                personal costs.</li>\r\n                        </ul>\r\n\r\n                        {isOcf &&\r\n                            <>\r\n                                <h3 className=\"heading heading--h3\">Invitation from The Oregon Community Foundation</h3>\r\n                                <ul className=\"list\">\r\n                                    <li className=\"li\">The Oregon Community Foundation (OCF) is among the nation’s largest community foundations\r\n                                        and sponsors more than 200 private donor scholarship programs administered by OSAC.\r\n                                        OCF is dedicated to improving access to higher education for Oregon students.</li>\r\n                                    <li className=\"li\">If you are a recipient of an OCF scholarship, you may be contacted by OCF staff, donors, or selection committee members for the\r\n                                        purposes of networking and helping to expand educational opportunities.</li>\r\n                                    <li className=\"li\">You will have the option to accept or decline the opportunity to participate; this\r\n                                        will not affect your scholarship award.</li>\r\n                                </ul>\r\n                                <p>\r\n                                    <a href=\"http://www.oregoncf.org/grants-scholarships/scholarships\">Learn more</a>&nbsp;\r\n                                    about the stories behind The Oregon Community Foundation’s (OCF) scholarship program.\r\n                                </p>\r\n                            </>\r\n                        }\r\n                    </div>\r\n\r\n                    {!application.isAwarded &&\r\n                        <>\r\n                            <div className=\"grant-action-buttons\" >\r\n                                <Button\r\n                                    name=\"Accept\"\r\n                                    label='Accept'\r\n                                    onClick={handleAcceptAward}\r\n                                />\r\n                                <Button\r\n                                    name=\"Decline\"\r\n                                    label='Decline'\r\n                                    onClick={handleDeclineAward}\r\n                                />\r\n\r\n                                <Button\r\n                                    name=\"Defer\"\r\n                                    label='Defer'\r\n                                    onClick={handleDeferAward}\r\n                                />\r\n                                <Button\r\n                                    name=\"Cancel\"\r\n                                    label=\"Cancel\"\r\n                                    variant=\"text\"\r\n                                    onClick={handleCancel}\r\n                                />\r\n                            </div>\r\n\r\n                            {selectedAction === \"Defer\" &&\r\n                                <p>\r\n                                    If you are not attending school this year but will in the future and want to apply for a deferral,\r\n                                    contact OSAC at <AwardContactLink />\r\n                                </p>\r\n                            }\r\n                            {selectedAction === \"Accept\" &&\r\n                                <>\r\n                                    <ul className=\"list\">\r\n                                        <li className=\"li\">I verify that my current college choice for </li>\r\n                                        <li className=\"li\">I have printed out a copy of the award announcement page that lists the Conditions of the Award (if not, click on the 'Cancel' button to return to the award announcement page). Also, I have printed out a copy of this web page</li>\r\n                                        <li className=\"li\">I have read the Conditions of the Award, and I am in compliance with all of the\r\n                                            Conditions of the Award.</li>\r\n                                        <li className=\"li\">I understand\r\n                                            if I transfer schools or become dual enrolled during the academic year, I must notify\r\n                                            OSAC early to allow time to process the change. If I change schools, OSAC\r\n                                            may adjust or cancel the amount of my award.</li>\r\n                                        <li className=\"li\">I understand if I am considering a leave of absence,\r\n                                            I must check with OSAC to determine if my\r\n                                            leave of absence will jeopardize my award eligibility.</li>\r\n                                        <li className=\"li\">I understand that\r\n                                            OSAC sends funds to my school's financial aid office prior to the beginning of each term/semester. If I do not attend school for a term(s), I will not receive that portion of my award.</li>\r\n                                        <li className=\"li\">I must maintain the required enrollment status (see Conditions of Award) and satisfactory\r\n                                            academic progress, as defined by my school, to receive disbursements throughout\r\n                                            the year.</li>\r\n                                        <li className=\"li\">I understand that awards must be used for educational expenses as defined by my school.\r\n                                            These expenses include tuition and fees, room and board, books, transportation,\r\n                                            and education-related personal costs.</li>\r\n                                    </ul>\r\n                                    <p >\r\n                                        <label>\r\n                                            <CustomCheckbox name=\"certifiation\" onChange={toggleCertification} value={isCertified} />\r\n                                            I have read the above statements and understand and agree to them.\r\n                                            <span className=\"required\"> *</span>\r\n                                        </label>\r\n\r\n                                    </p>\r\n                                    <div className=\"grant-action-buttons\" >\r\n                                        <Button name=\"certify\" label=\"Certify Award Acceptance\" variant=\"text\" disabled={!isCertified} onClick={handleCertifyAcceptance} />\r\n                                    </div>\r\n\r\n\r\n                                </>\r\n                            }\r\n                            {selectedAction === \"Decline\" &&\r\n                                <DeclineAward code={code} year={year} />\r\n                            }\r\n                        </>\r\n                    }\r\n\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n\r\n    return (\r\n        <FormProvider {...methods}>\r\n            <PortalView>\r\n                <div name=\"ApplicationsPage\" className=\"Scholarships\">\r\n                    <div className=\"rhythm\">\r\n                        <div className=\"page-intro\">\r\n                            <div className=\"wrapper\">\r\n                                <div className=\"page-intro__layout\">\r\n                                    <div className=\"page-intro__icon\">\r\n                                        <img src=\"/dashboard.svg\" alt=\"Student Portal\" style={{ marginTop: \".25rem\" }} />\r\n                                    </div>\r\n                                    <div className=\"page-intro__content rhythm\">\r\n                                        <h1 className=\"heading heading--h1\">{program.name}</h1>\r\n                                        <a href=\"/dashboard\">Return to Dashboard</a>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n\r\n                        {isLoading && <SpinnerSection />}\r\n                        {!isLoading && <AcceptScholarship />}\r\n\r\n                    </div>\r\n                </div>\r\n            </PortalView>\r\n        </FormProvider>\r\n    );\r\n}\r\n\r\nexport default Offer;\r\n","\r\nimport React, { useEffect, Fragment } from 'react';\r\nimport ReactDOM from \"react-dom\";\r\nimport reportWebVitals from \"./reportWebVitals\";\r\nimport { Provider } from \"react-redux\";\r\nimport { BrowserRouter as Router, Switch } from \"react-router-dom\";\r\nimport { Route } from \"react-router-dom\";\r\nimport store from \"./store\";\r\nimport { LogoutWarning } from './components/Utility/LogoutWarning';\r\nimport \"./index.css\";\r\n\r\n// import view components\r\nimport ProtectedRoute from \"./components/Utility/ProtectedRoute\";\r\nimport Dashboard from \"./views/dashboard\";\r\nimport Awards from \"./views/awards\";\r\nimport Applications from \"./views/applications\";\r\nimport Feedback from \"./views/feedback\";\r\nimport Glossary from \"./views/glossary\";\r\nimport History from \"./views/history\";\r\nimport Messages from \"./views/messages\";\r\nimport Profile from \"./views/profile\";\r\nimport Registration from \"./views/registration\";\r\nimport Placeholder from \"./views/placeholder\";\r\nimport StudentPortalLanding from \"./views/login\";\r\nimport AdditionalScholarshipInfo from \"./views/additional-scholarship-info\";\r\nimport OregonPromise from \"./views/oregon-promise\";\r\nimport Chafee from \"./views/chafee\";\r\nimport OTSG from \"./views/otsg\";\r\nimport OTSP from \"./views/otsp\";\r\nimport ChildCare from \"./views/child-care-grant\";\r\nimport NationalGuard from \"./views/national-guard\";\r\nimport Scholarship from \"./views/scholarship\";\r\nimport EarlyLearning from \"./views/early-learning\";\r\nimport Renew from \"./views/renew\";\r\nimport Decline from \"./views/decline\";\r\nimport ThankTheDonor from \"./views/thankyou\";\r\nimport SapSnackbar from \"./components/SapSnackbar\";\r\nimport { withRouter, useHistory } from 'react-router-dom';\r\nimport ReactGA from 'react-ga4';\r\nimport Offer from './views/offer';\r\n\r\nconst analyticsKey = process.env.REACT_APP_GOOGLE_ANALYTICS_KEY;\r\nif (analyticsKey) {\r\n    ReactGA.initialize(analyticsKey, {\r\n        gaOptions: {\r\n          siteSpeedSampleRate: 100\r\n        }\r\n      });\r\n      ReactGA.send({\r\n        hitType: \"pageview\",\r\n        page: window.location.pathname + window.location.search,\r\n      });\r\n}\r\n\r\n\r\nfunction ScrollToTop({ children }) {\r\n  const history = useHistory();\r\n  useEffect(() => {\r\n    const unlisten = history.listen(() => {\r\n      window.scrollTo(0, 0);\r\n    });\r\n    return () => {\r\n      unlisten();\r\n    }\r\n  }, [history]);\r\n\r\n  return <Fragment>{children}</Fragment>;\r\n}\r\n\r\nexport default withRouter(ScrollToTop);\r\n\r\nReactDOM.render(\r\n  <React.StrictMode>\r\n    <Provider store={store}>\r\n      <SapSnackbar />\r\n      <LogoutWarning/>\r\n      <Router>\r\n        <ScrollToTop>\r\n        <Switch>\r\n          <ProtectedRoute path=\"/dashboard\" component={Dashboard} scrollTop={true} />\r\n          <ProtectedRoute path=\"/awards\" component={Awards} scrollTop={true} />\r\n          <ProtectedRoute path=\"/feedback\" component={Feedback} scrollTop={true}  />\r\n          <ProtectedRoute path=\"/glossary\" component={Glossary} scrollTop={true}  />\r\n          <ProtectedRoute path=\"/history\" component={History} scrollTop={true}  />\r\n          <ProtectedRoute path=\"/messages\" component={Messages} scrollTop={true}  />\r\n          <ProtectedRoute path=\"/profile\" component={Profile} scrollTop={true}  />\r\n          <ProtectedRoute path=\"/registration\" component={Registration} scrollTop={true}  />\r\n          <ProtectedRoute path=\"/additional-scholarship-info/:year\" component={AdditionalScholarshipInfo} />\r\n          <ProtectedRoute path=\"/oregon-promise\" component={OregonPromise} />\r\n          <ProtectedRoute path=\"/chafee/:year\" component={Chafee} />\r\n          <ProtectedRoute path=\"/otsg/:year\" component={OTSG} />\r\n          <ProtectedRoute path=\"/otsp/:year\" component={OTSP} />\r\n          <ProtectedRoute path=\"/child-care/:year\" component={ChildCare} />\r\n          <ProtectedRoute path=\"/national-guard/:year\" component={NationalGuard} />\r\n          <ProtectedRoute path=\"/early-learning/:year\" component={EarlyLearning} />\r\n          <ProtectedRoute path=\"/placeholder\" component={Placeholder} />\r\n          <ProtectedRoute path=\"/scholarship/:code/:year\" component={Scholarship} />\r\n          <ProtectedRoute path=\"/renew/:code/:year\" component={Renew} />\r\n          <ProtectedRoute path=\"/decline/:code/:year\" component={Decline} />\r\n          <ProtectedRoute path=\"/offer/:code/:year\" component={Offer} />\r\n          <ProtectedRoute path=\"/thankyou/:code/:year\" component={ThankTheDonor} />\r\n          <Route path=\"/\" component={StudentPortalLanding} />\r\n        </Switch>\r\n        </ScrollToTop>\r\n      </Router>\r\n    </Provider>\r\n  </React.StrictMode>,\r\n  document.getElementById(\"root\")\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(// console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals();\r\n","import axios from \"axios\";\r\nimport path from \"path\";\r\nimport { getCurrentYear, getLatestActiveYear } from \".\";\r\nimport auth from \"../auth\";\r\nimport striptags from \"striptags\";\r\nimport moment from \"moment\";\r\nimport maxBy from 'lodash/maxBy'\r\nimport {FIELDS} from \"../store/form/fields\";\r\nimport FormSerializer from \"../store/form/serializer\";\r\n\r\nconst cookie = ``;\r\n\r\nif (cookie) {\r\n  document.cookie = cookie;\r\n}\r\n\r\nconst PAGINATION_LIMIT_DEFAULT = 10;\r\n\r\nclass APIClient {\r\n  constructor(host, preffix) {\r\n    this.host = new URL(host);\r\n    this.preffix = preffix;\r\n  }\r\n\r\n  static get Methods() {\r\n    return {\r\n      GET: \"GET\",\r\n      POST: \"POST\",\r\n      PUT: \"PUT\",\r\n      DELETE: \"DELETE\",\r\n    };\r\n  }\r\n\r\n  static clientFactory() {\r\n    return new APIClient(\r\n      process.env.REACT_APP_API_HOST,\r\n      process.env.REACT_APP_API_PREFFIX\r\n    );\r\n  }\r\n\r\n  request = async (endpoint, params, method, isBlob = false) => {\r\n    if (this.preffix) {\r\n      endpoint = path.join(this.preffix, endpoint);\r\n    }\r\n\r\n    const url = new URL(endpoint, this.host);\r\n    const { searchParams } = url;\r\n\r\n    let options;\r\n\r\n    method = method || APIClient.Methods.GET;\r\n\r\n    options = {\r\n      method,\r\n      headers: {\r\n        Authorization: `Bearer ${auth.getIdToken()}`,\r\n      },\r\n      responseType: isBlob ? \"blob\" : \"json\",\r\n    };\r\n\r\n    // // console.log(auth.getIdToken());\r\n\r\n    if (method === APIClient.Methods.GET && params) {\r\n      Object.entries(params).forEach(([key, value]) => {\r\n        if (Array.isArray(value)) {\r\n          value.forEach((ithValue) => searchParams.append(key, ithValue));\r\n        } else {\r\n          searchParams.append(key, value);\r\n        }\r\n      });\r\n    } else if (\r\n      method === APIClient.Methods.POST ||\r\n      method === APIClient.Methods.PUT ||\r\n      method === APIClient.Methods.DELETE\r\n    ) {\r\n      options.data = params;\r\n    }\r\n\r\n    options.url = url.toString();\r\n\r\n    try {\r\n      const response = await axios(options);\r\n      return response.data;\r\n    } catch (err) {\r\n      if (err?.response?.status === 401) {\r\n        await auth.logout();\r\n      }\r\n      throw err;\r\n    }\r\n  };\r\n\r\n  get = async (endpoint, params, isBlob) => {\r\n    return this.request(endpoint, params, APIClient.Methods.GET, isBlob);\r\n  };\r\n\r\n  delete = async (endpoint, params) => {\r\n    return this.request(endpoint, params, APIClient.Methods.DELETE);\r\n  };\r\n\r\n  put = async (endpoint, params) => {\r\n    return this.request(endpoint, params, APIClient.Methods.PUT);\r\n  };\r\n\r\n  post = async (endpoint, params) => {\r\n    return this.request(endpoint, params, APIClient.Methods.POST);\r\n  };\r\n\r\n  acceptApplicationAward = async (programCode, year ) => {\r\n    return apiClient.put(`/award/accept`, {\r\n      ProgramCode: programCode,\r\n      Year: year\r\n    });\r\n  };\r\n\r\n  declineApplicationAward = async (\r\n    programCode,\r\n    year,\r\n    reason\r\n  ) => {\r\n    return apiClient.delete(`/award/decline`, {\r\n      ProgramCode: programCode,\r\n      Year: year,\r\n      Reason: reason\r\n    });\r\n  };\r\n\r\n  removeApplication = async (\r\n    programCode,\r\n    year\r\n  ) => {\r\n    return apiClient.delete(`/application`, {\r\n      ProgramCode: programCode,\r\n      Year: year\r\n    });\r\n  };\r\n\r\n  /*\r\n   TODO: !Figure out a work around for null instances to replace getCurrentYear()!\r\n          Did not touch because it can cause issues. Maybe use getLatestActiveYear(PROGRAM_CODE)\r\n          and then pass program code in api call... Or save active years to redux for easy access\r\n          and prevent unnecessary API calls.\r\n  */\r\n  submitApplication = async (\r\n    programCode,\r\n    year = getCurrentYear(), // <----- TODO: See previous comment\r\n  ) => {\r\n    return apiClient.put(`/application/submit`, {\r\n      ProgramCode: programCode,\r\n      Year: year\r\n    });\r\n  };\r\n\r\n  startApplication = async (\r\n    programCode,\r\n    year\r\n  ) => {\r\n    return apiClient.post(`/application`, {\r\n      ProgramCode: programCode,\r\n      Year: year\r\n    });\r\n  };\r\n\r\n  getAccount = () => {\r\n    return apiClient.get(\"/account\");\r\n  };\r\n\r\n\r\n  /**\r\n   * get status of a specific application\r\n   * @deprecated see getApplication to get past array results\r\n   * @param {String} programCode \r\n   * @param {Number} year \r\n   * @returns {*}\r\n   */\r\n  getApplicationStatus = async (\r\n    programCode,\r\n    year\r\n  ) => {\r\n    return apiClient.get(\r\n      `/application?lookup.programCode=${programCode}&lookup.year=${year}`\r\n    );\r\n  };\r\n  /**\r\n   * get status of specific application\r\n   * @param {String} programCode \r\n   * @param {Number} year \r\n   * @returns {Object} dto describing recent application status\r\n   */\r\n  getApplication = async (programCode, year) => {\r\n    const result = await apiClient.get(\r\n      `/application?lookup.programCode=${programCode}&lookup.year=${year}`\r\n    );\r\n    if (result.length == 0)\r\n      return null;\r\n    return result[0];\r\n  };\r\n\r\n  getApplicationAwardStatus = async (\r\n    programCode,\r\n    year\r\n  ) => {\r\n    return apiClient.get(\r\n      `/award?lookup.programCode=${programCode}&lookup.year=${year}`\r\n    );\r\n  };\r\n\r\n  getFileFromQuestionKey = async ({\r\n    questionKey,\r\n    id,\r\n    year,\r\n  }) => {\r\n    const opts = {\r\n      \"lookup.questionKey\": questionKey,\r\n      \"lookup.id\": id,\r\n    }\r\n\r\n    if (year) {\r\n      opts['lookup.year'] = year\r\n    }\r\n\r\n    return apiClient.get(\r\n      `/file`,\r\n      opts,\r\n      true\r\n    );\r\n  };\r\n\r\n\r\n  attachFileToQuestionKey = async ({\r\n    file,\r\n    questionKey,\r\n    id,\r\n    year\r\n  }) => {\r\n    let endpoint = `/file`;\r\n    if (this.preffix) {\r\n      endpoint = path.join(this.preffix, endpoint);\r\n    }\r\n\r\n    const url = new URL(endpoint, this.host);\r\n    const { searchParams } = url;\r\n\r\n    const formData = new FormData();\r\n    formData.append(\"file\", file);\r\n    searchParams.append(\"lookup.questionKey\", questionKey);\r\n    searchParams.append(\"lookup.id\", id);\r\n\r\n    if (year) {\r\n      searchParams.append(\"lookup.year\", year)\r\n    }\r\n\r\n    return axios({\r\n      method: \"post\",\r\n      url: url.toString(),\r\n      data: formData,\r\n      headers: {\r\n        \"Content-Type\": \"multipart/form-data\",\r\n        Authorization: `Bearer ${auth.getIdToken()}`,\r\n      },\r\n    }).then(({ data }) => data);\r\n  };\r\n\r\n  getAccount = () => {\r\n      return apiClient.get(\"/account\");\r\n  }\r\n\r\n  verifyAccount = (params) => {\r\n      return apiClient.post(\"/account/verification\", params)\r\n  }\r\n\r\n\r\n  /**\r\n   * fetch the program description\r\n   * @param {String} code\r\n   * @returns {*} raw object describing program. See ProgramInfo\r\n   */\r\n  getProgram = (code) => {\r\n    return apiClient.get(`/program/${code}`);\r\n  }\r\n\r\n  /**\r\n   * get available options for the given question\r\n   * \r\n   * @param {string} questionKey \r\n   * @param {number} year \r\n   * @returns \r\n   */\r\n  getOptions = (questionKey, year) =>{\r\n    return apiClient.get('/answer/options', {\r\n        questionKey: questionKey,\r\n        year: year\r\n    });\r\n  }\r\n  \r\n  /**\r\n   * get avalable options for given question as dropdown-compatible list values\r\n   * \r\n   * @param {string} questionKey \r\n   * @param {number} year \r\n   * @returns \r\n   */\r\n  getOptionsAsListItems = async (questionKey, year) => {\r\n    var options = await this.getOptions(questionKey, year);\r\n    return options.map((option) => {\r\n        const selectItem = {\r\n            label: option.Name,\r\n            value: option.Value,\r\n        };\r\n        if (option.Notes){\r\n            for (let note of option.Notes) {\r\n                selectItem[note.Category] = note.Value;\r\n            }\r\n        }\r\n        return selectItem;\r\n    });\r\n  }\r\n\r\n  /**\r\n   * fetch info on the donor providing for this program\r\n   * @param {*} code \r\n   * @returns {*} raw object desribing the program donor\r\n   */\r\n  getDonor = (code) => {\r\n    return apiClient.get(`donor/program/${code}`);\r\n  }\r\n  /**\r\n   * fetch the description of a specific program season, calendar and all\r\n   * @param {String} code\r\n   * @param {Numeric} year\r\n   * @returns {*} raw object describing season. See ProgramSeason\r\n   */\r\n  getSeason = (code, year) => {\r\n    return apiClient.get(`/program/season/${code}/${year}`)\r\n  }\r\n\r\n  getHighSchool = (code) => {\r\n      return apiClient.get(`/high-school/${code}`);\r\n  }\r\n\r\n  getCollege = (code) => {\r\n      return apiClient.get(`/college/${code}`);\r\n  }\r\n\r\n  getCity = (id) => {\r\n    return apiClient.get(`/city/${id}`);\r\n  }\r\n\r\n  /**\r\n   * get descriptive text for code. \r\n   * \r\n   * Remember some code descriptions contain HTML\r\n   * @param {string} codeType \r\n   * @param {string} code \r\n   * @returns \r\n   */\r\n  getTextCode = (codeType, code) => {\r\n    return apiClient.get(`/code?code=${code}&codeType=${codeType}`);\r\n  }\r\n\r\n\r\n  getProfileStatus = async () => {\r\n\r\n    // Basic Info\r\n    const fieldKeys = [\r\n      FIELDS.FIRST_NAME,\r\n      FIELDS.LAST_NAME,\r\n      FIELDS.BIRTHDATE,\r\n      FIELDS.GENDER__MALE,\r\n      FIELDS.GENDER__FEMALE,\r\n      FIELDS.GENDER__NON_BINARY,\r\n      FIELDS.GENDER__OTHER,\r\n      FIELDS.GENDER__TRANSMAN,\r\n      FIELDS.GENDER__TRANSWOMAN,\r\n      FIELDS.GENDER__NA,\r\n      FIELDS.PRONOUNS__FEMALE,\r\n      FIELDS.PRONOUNS__MALE,\r\n      FIELDS.PRONOUNS__NEUTRAL,\r\n      FIELDS.PRONOUNS__OTHER,\r\n      FIELDS.CERTIFY_IDENTITY,\r\n\r\n      // Contact Info\r\n      FIELDS.HOME_PHONE,\r\n      FIELDS.PERMANENT_ADDRESS,\r\n\r\n      // About Me Info\r\n      FIELDS.SSN,\r\n      FIELDS.HISPANIC,\r\n      FIELDS.CORRECTIONAL_FACILITY_HS,\r\n      FIELDS.IS_NATIONAL_GUARD_MEMBER,\r\n      FIELDS.HAS_DEPENDENT_CHILDREN,\r\n      FIELDS.OTSG__ENROLLED_TRIBE,\r\n      FIELDS.ETHNICITY__AM_INDIAN,\r\n      FIELDS.ETHNICITY__ASIAN,\r\n      FIELDS.ETHNICITY__BLACK,\r\n      FIELDS.ETHNICITY__HAWAIIAN_PI,\r\n      FIELDS.ETHNICITY__WHITE,\r\n      FIELDS.ETHNICITY__NA,\r\n      FIELDS.TEST_APPLICATION,\r\n      FIELDS.FOSTER_CARE,      \r\n\r\n      // Highschool Info\r\n      FIELDS.HIGHSCHOOL_TYPE,\r\n      FIELDS.HIGHSCHOOL,\r\n      FIELDS.HIGHSCHOOL_GRAD_DATE,\r\n      FIELDS.CORRECTIONAL_FACILITY_CC,\r\n      FIELDS.HIGHSCHOOL_GPA,\r\n      FIELDS.GED_SCORE,\r\n\r\n      // Account Info\r\n      FIELDS.PRIVACY_AGREEMENT,\r\n      FIELDS.PUBLICITY_RELEASE,\r\n    ];\r\n\r\n      const data = {\r\n        \"lookup.questionKeys\": fieldKeys.map((fieldKey) =>\r\n          FormSerializer.getQuestionKey(fieldKey)\r\n        ),\r\n      }\r\n      \r\n      const result = await apiClient.get(\"/answer/iscomplete\", data);\r\n      return result;\r\n  }\r\n\r\n  /**\r\n   * are the following fields complete to the satisfaction of the top-tier programs or not.\r\n   * @param {Array<String>} fieldKeys \r\n   * @returns {Boolean}\r\n   */\r\n  checkForComplete = async (fieldKeys) => {\r\n    const data = {\r\n      \"lookup.questionKeys\": fieldKeys.map((fieldKey) =>\r\n        FormSerializer.getQuestionKey(fieldKey)\r\n      ),\r\n    }\r\n    return await apiClient.get(\"/answer/iscomplete\", data);\r\n  }\r\n  /**\r\n   * get details of completion status for the given fields\r\n   * @param {String} programCode \r\n   * @param {Numeric} year\r\n   * @param {Array<String>} fieldKeys \r\n   * @returns {Array} completion report for the given program/fields\r\n   */\r\n  getCompletionReport = async (programCode, year, fieldKeys) => {\r\n    const scope = {\r\n      programCodes: [programCode],\r\n      year: year,\r\n      questionKeys: fieldKeys.map((fieldKey) => FormSerializer.getQuestionKey(fieldKey)\r\n      ),\r\n    }\r\n    return await apiClient.get(\"/answer/completion\", scope);\r\n  }\r\n\r\n  getGedCountyList = async () => {\r\n    return await apiClient.get('/high-school/high-schools/GED')\r\n  }\r\n\r\n  checkForAppliedScholarships = async  () => {\r\n    let results = await this.get('/application/search?isActive=true&parentCode=SCH');\r\n    console.log('checkforapplied results', results)\r\n    let started = []\r\n    for(let item in results) {\r\n      console.log('item', results[item].Source)\r\n      if(results[item].Source == 'Apply' || results[item].Source == 'Scoop' || results[item].Source == 'Auto') {\r\n        started.push(results[item])\r\n      }\r\n    }\r\n    console.log('checkhasscholarships started', started)\r\n    return started\r\n  }\r\n\r\n  /**\r\n   * @deprecated comes with a pretty high performance hit\r\n   * @param {*} filteringOptions \r\n   * @param {*} tab \r\n   * @param {*} year \r\n   * @returns \r\n   */\r\n  getScholarships = async (filteringOptions = {}, tab, year) => {\r\n\r\n    filteringOptions[\"parentProgram\"] = \"SCH\";\r\n    filteringOptions[\"isActive\"] = true;\r\n\r\n    if (!filteringOptions[\"phrases\"]) {\r\n      delete filteringOptions[\"phrases\"];\r\n    }\r\n\r\n    let url = '/program/search'\r\n    switch (tab) {\r\n      case 0:\r\n      case 1:\r\n        url = `/application/search`\r\n        filteringOptions[\"parentCode\"] = \"SCH\"\r\n        delete filteringOptions[\"parentProgram\"]\r\n        break;\r\n      case 2:\r\n        url = '/recommendations/programs'\r\n        break;\r\n      case 3:\r\n        filteringOptions['isMembershipVerified'] = true;\r\n        break\r\n      case 4:\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n\r\n    if (year)\r\n      filteringOptions['lookup.year'] = year;\r\n    else\r\n     { // If year is not passed, get the Active Year for the Scholarship program.       \r\n      const yearRetrieved = await getLatestActiveYear('SCH');\r\n      filteringOptions['lookup.year'] = yearRetrieved;\r\n    }\r\n\r\n    // pages are 0-indexed in API\r\n    if (typeof filteringOptions[\"currentPage\"] === \"number\") {\r\n      filteringOptions[\"currentPage\"] -= 1;\r\n    }\r\n    const response = await this.get(url, filteringOptions);\r\n    let programs = response.PageOfPrograms\r\n\r\n    console.log('scholarship raw search results', response)\r\n\r\n    switch (tab) {\r\n      case 0:\r\n      case 1:\r\n      case 2:\r\n        programs = response\r\n        break;\r\n      case 3:\r\n        break;\r\n      case 4:\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n    if (tab === 0 || tab === 1) {\r\n\r\n      const programRequests = [];\r\n\r\n      // #3881/SP-324: Scholarship Renewal Process: Renewal application with pending status (should not appear to student)\r\n      let actualPrograms =programs; // API end point is returning all records, including PEND. \r\n      console.log(\"actual programs: \", actualPrograms.length);\r\n    \r\n      // Filter the records with \"PEND\" ReviewStatus. \r\n      let filteredPrograms = actualPrograms.filter(actualProgram => actualProgram?.ReviewStatus !== 'PEND');      \r\n      console.log(\"filtered programs: \", filteredPrograms.length);\r\n\r\n      programs = filteredPrograms;\r\n\r\n      for(let i = 0; i < programs.length; i++) {\r\n\r\n        const program = programs[i];\r\n\r\n        programRequests.push(this.get(`/program/${program.ProgramCode}`))\r\n      }\r\n      const results = await Promise.all(programRequests)\r\n      programs = results.map((program,index) => {\r\n        return {\r\n          ...program,\r\n          ...results[index]\r\n        }\r\n      })\r\n    }\r\n\r\n    const scholarships = await Promise.all( programs.map(async(scholarship, index) => {\r\n      const activeSeasons = scholarship?.ActiveSeasons;\r\n      const recentSeason = maxBy(activeSeasons, \"Year\");\r\n      const resolvedYear = recentSeason?.Year || year;\r\n\r\n      let activeSeason = (scholarship?.ActiveSeasons || []).find(\r\n        ({ Year }) => Year === resolvedYear\r\n      );\r\n\r\n      // #3701 Bug fix: Set the flag to 'Matched to Your Profile'.  \r\n      const schProgram = await apiClient.get(\"application\", {programCode: scholarship.Code, year: resolvedYear});\r\n      const isMatched = schProgram[0].IsRecommended; \r\n      \r\n      /* \r\n       #3701 Bug fix: Set the flag, to display 'Additional information needed' message & 'Documents Required for This Scholarship' icon. \r\n       isDocsReq === true : scholarship  program needs additional information/docs and student submitted all information.\r\n       isDocsReq === false : scholarship  program needs additional information/docs and student did NOT submitted all information.\r\n       isDocsReq !== null :  scholarship  program does not need any additional information from student.\r\n       */\r\n      const isComplete = await apiClient.get(\"application/iscomplete\", {programCode: scholarship.Code, stage: 'Application', year: resolvedYear});\r\n      \r\n\r\n      let deadline = \"\";\r\n      let listRequirements = [];\r\n\r\n      if (activeSeason) {\r\n        listRequirements = activeSeason.Notes.map(({ Description }) => ({\r\n          value: striptags(Description),\r\n        }));\r\n        deadline = activeSeason?.Calendar?.find(({ Code }) => Code === \"END\") || scholarship.DeadlineT;\r\n        if (deadline) {\r\n          //TODO (alejandro): Change date parsing format & timezone as PST\r\n          deadline = moment(deadline.Date).format(\"MMMM Qo YYYY\");\r\n        }\r\n      }\r\n      return {\r\n        // @TODO: for some perplexing reason, this is all hardcoded\r\n        Name: scholarship.Name,\r\n        Code: scholarship.Code,\r\n        membershipRequired: scholarship.IsMembershipVerified,\r\n        // hard coded fields\r\n        Description: scholarship.Description,\r\n        progress: 0, // ??? WHY?\r\n        deadline,\r\n        //dates: { start: \"2021\", end: \"2022\" },\r\n        terms: \"Fall, Winter, Spring\",\r\n        dateReceived: \"5/14/21\",\r\n        appReceived: true,\r\n        appSubmitted: true,\r\n        tentativeApproval: true,\r\n        awardAmount: 284,\r\n        listRequirements,\r\n        selected: true,\r\n        matched: isMatched,\r\n        docsRequired: isComplete,\r\n        isComplete: isComplete,\r\n        year: recentSeason?.Year || year,\r\n      };\r\n    }));\r\n    // console.log(\"Innocent Scholarships\", scholarships)\r\n    // console.log(\"get scholarships response TotalCount\", response?.TotalCount)\r\n    const totalPages = Math.ceil(\r\n      Number(response.TotalCount) / PAGINATION_LIMIT_DEFAULT\r\n    );\r\n    // console.log(\"get scholarships response totalPages\", totalPages)\r\n    return { scholarships, totalPages };\r\n  };\r\n}\r\n\r\nconst apiClient = APIClient.clientFactory();\r\n\r\nexport default apiClient;\r\n","import { useMediaQuery } from 'react-responsive';\r\nimport mime from 'mime';\r\nimport moment from 'moment';\r\nimport _get from 'lodash.get';\r\nimport { STATUS } from '../components/AppStatusButtons';\r\nimport apiClient from './API';\r\nimport store from './../store'\r\nimport { CODES } from '../components/Utility/ProgramCodes';\r\nimport sumBy from 'lodash/sumBy'\r\nimport maxBy from 'lodash/maxBy'\r\nimport striptags from \"striptags\";\r\nimport ProgramInfo from './dtos/ProgramInfo';\r\n\r\nexport const goBack = ({ history, defaultRoute }) => {\r\n    if (history.location.state && history.location.state.from) {\r\n        history.push(history.location.state.from)\r\n    } else {\r\n        history.push(defaultRoute || \"/dashboard\")\r\n    }\r\n}\r\n\r\n/**\r\n * interpret value as some kind of boolean info and return as actual boolean, forces out nulls\r\n * @param {*} val \r\n * @returns {Boolean}\r\n */\r\nexport const truthy = (val) => {\r\n    if (val == 'True' || val == true) {\r\n        return true\r\n    }\r\n    return false\r\n}\r\n\r\n/**\r\n * interpret value as some kind of boolean info and return as actual boolean, repsects null-state\r\n * @param {*} val \r\n * @returns {Boolean}\r\n */\r\nexport const toBoolean = (val) => {\r\n    if (val === 'True' || val === true) {\r\n        return true;\r\n    }\r\n    if (val === 'False' || val === false) {\r\n        return false;\r\n    }\r\n    return null;\r\n}\r\n\r\n/**\r\n * interpret value as some kind of boolean info and return as serialized boolean, forces out nulls\r\n * @param {*} val \r\n * @returns {String} serialized boolean descriptor (API friendly)\r\n */\r\nexport const stringy = (val) => {\r\n    if (val == 'True' || val == true) {\r\n        return 'True';\r\n    }\r\n    return 'False';\r\n}\r\n/**\r\n * interpret value as some kind of boolean info and return as serialized boolean, respects null state\r\n * @param {*} val \r\n * @returns {String}\r\n */\r\nexport const toBooleanString = (val) => {\r\n    if (val === 'True' || val === true) {\r\n        return \"True\";\r\n    }\r\n    if (val === 'False' || val === false) {\r\n        return \"False\";\r\n    }\r\n    return null;\r\n}\r\n\r\nexport const IsTabletOrMobile = () => {\r\n    return useMediaQuery({ query: '(max-width: 1224px)' });\r\n}\r\n\r\nexport const getMimeInstance = () => {\r\n    // in case we need to add custom type mappings.\r\n    return mime;\r\n}\r\n\r\n/**\r\n * BAD INFORMATION!!! DO NOT CALL. API.getActiveYear has more accurate info if current\r\n * calls do not provide what you need\r\n * @deprecated\r\n * @returns {Number}\r\n */\r\nexport const getCurrentYear = () => {\r\n    return Number(moment().format('YYYY'));\r\n}\r\n\r\nexport const capitalize = (string) => {\r\n    return (string || '').charAt(0).toUpperCase() + (string || '').slice(1);\r\n}\r\n\r\nexport const capitalizeAll = (string) => {\r\n    return (string || '').split(' ').map(s => capitalize(s)).join(' ');\r\n}\r\n\r\nexport const compositeFieldname = (parentFieldKey, property) => {\r\n    return `${parentFieldKey}.${property}`;\r\n}\r\n\r\nexport const fieldValueTemplateRender = (template = '', values) => {\r\n    const regex = /{{\\s?([A-Za-z0-9_\\.\\[\\]]+)\\s?}}/ig;\r\n    function replacer(match, group) {\r\n        if (typeof group === 'string' && group) {\r\n            group = group.trim();\r\n        }\r\n        return _get(values, group, '')\r\n    }\r\n    return template?.replace(regex, replacer);\r\n}\r\n\r\n// i.e OTHER_NAMES[0].prop.prop -> OTHER_NAMES\r\nexport const getRepeatableFieldRootName = (fieldName) => {\r\n    return (fieldName || '').split('[')[0];\r\n}\r\n\r\nexport const getRepeatableFieldIndex = (fieldName) => {\r\n    const fieldResidue = (fieldName || '').split('[');\r\n    const isRepeatableFieldName = fieldResidue.length > 1;\r\n    return isRepeatableFieldName ? fieldResidue[1].split(']')[0] : null;\r\n}\r\n\r\nexport const getQueryStrings = () => {\r\n    const urlSearchParams = new URLSearchParams(window.location.search);\r\n    const params = Object.fromEntries(urlSearchParams.entries());\r\n    return params;\r\n}\r\n\r\nexport const getReduxField = (fieldKey, initialReduxFormState) => {\r\n    const reduxFormState = initialReduxFormState || store.getState().form;\r\n    return _get(reduxFormState, `fields.${fieldKey}.value`)\r\n};\r\n\r\n/**\r\n * merge the program and application info into a single object with some display-worthy summaries\r\n * \r\n * @param {*} program Program DTO from API\r\n * @param {*} application Application DTO from API\r\n * @returns {*}\r\n */\r\nexport const combineProgramStatus = (program, application) => {\r\n\r\n    const { IsStarted, IsSubmitted, Deadline, IsRecommended, ReviewInstructions, ReviewStatus } = application;\r\n    let status = STATUS.ELIGIBLE;\r\n    let errorMessage = null;\r\n\r\n    if (IsStarted) {\r\n        status = STATUS.IN_PROGRESS\r\n    }\r\n    if (IsSubmitted) {\r\n        status = STATUS.SUBMITTED;\r\n    }\r\n    const isPrivateScholarship = program.ParentProgramCode === 'SCH' || program.Code === 'SCH';\r\n    if ((IsRecommended === null || IsRecommended === false) &&  !isPrivateScholarship && !IsStarted) {\r\n        status = STATUS.INELIGIBLE;\r\n    }\r\n\r\n    const programInfo = new ProgramInfo(program);    \r\n    const listRequirements = programInfo.getSeason(application.Year)?.notes.map(({ Description }) => ({ value: striptags(Description), }));\r\n\r\n    return {\r\n        ...program,\r\n        status,\r\n        programStatusResult: application,\r\n        Source: application.Source,\r\n        matched: application.IsRecommended,\r\n        docsRequired: null,\r\n        isComplete: null,\r\n        year: application.Year,\r\n        membershipRequired: program.IsMembershipVerified,\r\n        isScholarship: program.ParentProgramCode === 'SCH',\r\n        statusState: {\r\n            IsStarted,\r\n            IsSubmitted,\r\n            Deadline,\r\n            IsRecommended,\r\n            ReviewInstructions,\r\n            ReviewStatus\r\n        },\r\n        awardState: {          \r\n            awardStatus: application.AwardSummaryStatus,\r\n            isAwarded: (application.AwardSummaryStatus === 'Authorized' || application.AwardSummaryStatus === 'Hold'),\r\n            terms: [],\r\n            totalAmountAwarded: null,\r\n            semesterYearDescriptor: null,\r\n            programAwardResults: null\r\n        },\r\n        listRequirements: listRequirements,\r\n        errorMessage,\r\n    }\r\n}\r\n\r\n/**\r\n * given a set of already-enriched applications\r\n * @param {Array<*>} applicationList already enriched programs\r\n * @param {*} program raw program DTO\r\n * @param {*} stubApp if app is not available, do we know any properties that should appear in the app\r\n * @returns {*} application-enriched program\r\n */\r\nexport function combineWithLocalApp(combinedPrograms, program, stubApp = {}) {\r\n    const app = combinedPrograms.find(a => a.Code == program.Code);\r\n    if (app)\r\n        return app; //already enriched\r\n\r\n    const fullStubApp = {\r\n        IsRecommended: stubApp?.IsRecommended ?? null,\r\n        IsStarted: false,\r\n        IsSubmitted: false,\r\n        ReviewInstructions: null,\r\n        ReviewStatus: null,\r\n        Deadline: null, //do we need SCH deadline passed here\r\n        Year: stubApp?.Year,\r\n    };\r\n    return combineProgramStatus(program, fullStubApp);\r\n}\r\n\r\n/**\r\n * load associated additional doc info for programs\r\n * @param {*} programList \r\n * @param {Number} year specific year if program info won't provide a resliable, unique year we can use\r\n */\r\nexport const enrichProgramsWithDocInfo = async (programList, year = null) => {\r\n\r\n    const addOnQuestions = async (program) => {\r\n        const info = new ProgramInfo(program);\r\n        const activeYear = year ?? info.currentYear\r\n        const questions = await apiClient.get(`question/questions/${info.code}/${activeYear}`);\r\n        program.docsRequired = null;\r\n        program.isComplete = null;\r\n        if (questions.length > 0) {\r\n            const stage = program.Source === \"Renew\" ? \"Renewal\" : \"Application\";\r\n            const isComplete = await apiClient.get(\"application/iscomplete\", { programCode: info.code, stage: stage, year: activeYear });\r\n            program.docsRequired = questions.some(q=> q.RequirementType.toLowerCase() === \"required\");\r\n            program.isComplete = isComplete;\r\n        }\r\n        program.questions = questions;\r\n\r\n        return program;\r\n    }\r\n    const docAwareProgramList = await Promise.all(programList.map(p => addOnQuestions(p)));\r\n    return docAwareProgramList;\r\n}\r\n\r\nexport const enrichProgramStatus = (programList, codeProp = 'Code') => {\r\n    return programList.map(program => {\r\n        let actualCode = program[codeProp]\r\n        if (program[codeProp] == undefined) {\r\n            actualCode = program['code']\r\n        }\r\n        return apiClient.getApplicationStatus(actualCode, program.year).then(async programStatusResultArray => {\r\n\r\n            if (!Array.isArray(programStatusResultArray) || !programStatusResultArray.length) {\r\n                console.log('get app status first condition true')\r\n                return {\r\n                    ...program,\r\n                    status: STATUS.ELIGIBLE\r\n                }\r\n            }\r\n            console.log('get app status first condition NOT true')\r\n            const programStatusResult = programStatusResultArray[0];\r\n            return combineProgramStatus(program, programStatusResult);\r\n        })\r\n            .catch(() => program);\r\n    });\r\n}\r\n\r\n/**\r\n * create a RevTech-style \"details\" for use with older components that are enriched with awards\r\n * @param {*} program \r\n * @param {*} awards \r\n */\r\nexport const combineWithLocalAwards = (program, awards) => {\r\n    let year;\r\n    let totalAmountAwarded = 0;\r\n    let terms = [];\r\n    let semesterYearDescriptor = ''; // i.e Fall, Winter, Spring 2022\r\n    awards.forEach(programAwardResult => {\r\n        const { Term, AuthorizedAmount, Year } = programAwardResult;\r\n        totalAmountAwarded += AuthorizedAmount;\r\n        year = Year;\r\n        terms.push(Term);\r\n    })\r\n\r\n    semesterYearDescriptor = `${terms.join(',')} ${year}`;\r\n\r\n\r\n    const totalAuthAmount = sumBy(awards, 'AuthorizedAmount');\r\n    const totalDisbAmount = sumBy(awards, 'DisbursedAmount');\r\n    const totalAmount = totalAuthAmount + totalDisbAmount\r\n    const isAwarded = totalAmount > 0;\r\n\r\n\r\n    return {\r\n        ...program,\r\n        awardState: {\r\n            ...program.awardState,\r\n            isAwarded,\r\n            terms,\r\n            totalAmountAwarded,\r\n            semesterYearDescriptor,\r\n            programAwardResults: awards\r\n        }\r\n    }\r\n}\r\n\r\nexport const enrichProgramAwardStatus = (programList, codeProp = 'Code') => {\r\n    return programList.map(program => {\r\n        // console.log('program', program)\r\n        let actualCode = program[codeProp]\r\n        if (program[codeProp] == undefined) {\r\n            actualCode = program['code']\r\n        }\r\n        return apiClient.getApplicationAwardStatus(actualCode, program.year)\r\n            .then(programAwardResults => combineWithLocalAwards(program, programAwardResults))\r\n            .catch(() => program);\r\n    });\r\n}\r\n\r\nfunction isGrant(code) {\r\n    const grants = [\r\n        CODES.OREGON_PROMISE,\r\n        CODES.CHAFEE,\r\n        CODES.NATIONAL_GUARD,\r\n        CODES.CHILD_CARE,\r\n        CODES.OTSG\r\n    ]\r\n    return grants.some(g => g === code);\r\n}\r\n\r\nexport const returnSentence = (string, index) => {\r\n    let result = string.replace(/\\b(\\w\\.\\w\\.|\\d+(?:\\.\\d+){1,2}\\.?)|([.?!])\\s+(?=[A-Za-z])/g, function (m, g1, g2) {\r\n        return g1 ? g1 : g2 + \"\\r\"\r\n    });\r\n    let arr = result.split(\"\\r\")\r\n    // return all but first sentence for accordion details\r\n    if (index !== '*') {\r\n        return arr[index]\r\n    }\r\n    arr.shift()\r\n    return arr.join(' ')\r\n}\r\n\r\n/**\r\n * DO NOT call unless you ONLY want the year. If you want ANY other program info, use getProgram instead\r\n * @deprecated\r\n * @param {String} code \r\n * @returns {Number}\r\n */\r\nexport const getLatestActiveYear = async (code) => {\r\n    if (!code) {\r\n        return null\r\n    }\r\n\r\n    try {\r\n        const result = await apiClient.getProgram(code)\r\n        const activeSeasons = result.ActiveSeasons\r\n\r\n        if (!activeSeasons) return null\r\n\r\n        const year = maxBy(activeSeasons, \"Year\").Year\r\n\r\n        if (year) {\r\n            console.log('returning year', year)\r\n            return year\r\n        }\r\n\r\n        return null\r\n\r\n    } catch (e) {\r\n        console.error(e);\r\n        return null\r\n    }\r\n}\r\n\r\n","import moment from 'moment';\r\n\r\n/**\r\n * interpret a program season DTO\r\n */\r\nexport class ProgramSeason {\r\n\r\n    /**\r\n     * costructor\r\n     * @param {*} data ProgramSeasonDto\r\n     */\r\n    constructor(data) {\r\n        this._data = data;\r\n    }\r\n\r\n    /**\r\n     * is this info ready for use?\r\n     * @returns {Boolean}\r\n     */\r\n    get isLoaded(){\r\n        return this._data != null;\r\n    }\r\n\r\n    /**\r\n     * awarding year this season refers to\r\n     */\r\n    get year() {\r\n        return this._data.Year;\r\n    }\r\n\r\n    /**\r\n     * is this season's application currently available/active in any capacity\r\n     */\r\n    get isAvailable(){\r\n        return this._data.IsAvailable;\r\n    }\r\n\r\n    /**\r\n     * all notes defined for this program\r\n     * @returns {Array<*>}\r\n     */\r\n    get notes(){\r\n        return this._data.Notes ?? []; //we might have a summary description, on which no notes are included\r\n    }\r\n\r\n    /**\r\n     * get a specific event\r\n     * @param {String} eventCode\r\n     * @param {String} term\r\n     * @returns {ProgramEvent}\r\n     */\r\n    getEvent(eventCode, term = 'None') {\r\n        if (this._data == null)\r\n            return null;\r\n        if  (this._data.Calendar == null)\r\n            return null;\r\n\r\n        const compareCode = eventCode.toUpperCase();\r\n        \r\n        for (const calendarEvent of this._data.Calendar) {\r\n            var calendarEventCode = calendarEvent.Code.toUpperCase();\r\n            if (calendarEventCode !== compareCode \r\n                && !(calendarEventCode == \"END\" && compareCode === \"ENDDATE\")\r\n                && !(calendarEventCode == \"ENDDATE\" && compareCode === \"END\")\r\n                )\r\n                continue;\r\n            if (calendarEvent.Term.toUpperCase() !== term.toUpperCase())\r\n                continue;\r\n\r\n            return new ProgramEvent(calendarEvent, this.year);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * convenience method to just quickly get a display-friendly date for a given event\r\n     * @param {String} eventCode \r\n     * @param {String} term \r\n     * @param {String} format \r\n     * @returns {String}\r\n     */\r\n    getDate(eventCode, term = 'None', format = \"MMMM Do, YYYY h:mm a\"){\r\n        const evnt =  this.getEvent(eventCode, term);\r\n        if (evnt == null)\r\n            return null;\r\n            \r\n        return moment(evnt._data.Date).format(format);\r\n    }\r\n    /**\r\n     * get a special program configuration option\r\n     * @param {String} configurationCode \r\n     * @returns {*} usually a string or int\r\n     */\r\n    getConfiguration(configurationCode){\r\n        let tmp = this._data.Configurations;\r\n        for (const i in tmp) {\r\n            if(tmp[i].Name == configurationCode) {\r\n                return tmp[i].Value;\r\n            }           \r\n        }\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * every program should at least have a start event\r\n     * @returns {ProgramEvent}\r\n     */\r\n    get startEvent() {\r\n        // look for new-style variable date before old legacy date. \r\n        // TODO: clean these up in the API\r\n        return this.getEvent('StartDate', 'None') || this.getEvent('START');\r\n    }\r\n\r\n    /**\r\n     * every program should at least have an end event\r\n     * TODO: should i look for a specific one if many are given?? Or should i leave that up to context?\r\n     * @returns {ProgramEvent}\r\n     */\r\n    get endEvent() {\r\n        return this.getEvent('END');\r\n    }\r\n\r\n    /**\r\n     * has this program started (convenience method)\r\n     * @returns {Boolean}\r\n     */\r\n    get isStarted() {\r\n        if (this.startEvent == null)\r\n            return false;\r\n\r\n        return this.startEvent.isPassed;\r\n    }\r\n\r\n    /**\r\n     * convenience method to just quickly get a display-friendly date for a given event\r\n     * @param {String} eventCode \r\n     * @param {String} term \r\n     * @param {String} format \r\n     * @returns {String}\r\n     */\r\n      getDate(eventCode, term = 'None', format = \"MMMM Do, YYYY h:mm a\"){\r\n        const evnt =  this.getEvent(eventCode, term);\r\n        if (evnt == null)\r\n            return null;\r\n            \r\n        return moment(evnt._data.Date).format(format);\r\n    }\r\n\r\n\r\n    getDeadline(term = 'None'){\r\n        return this.getEvent('END', term);\r\n    }\r\n    /**\r\n     * \r\n     * @param {string} term \r\n     * @returns {string}\r\n     */\r\n    getDeadlineDisplay(term = 'None'){\r\n        if (!this.isLoaded) //not ready yet\r\n            return {\r\n                term: term,\r\n                deadline: null,\r\n            };\r\n\r\n        var programEvent = this.getDeadline(term);\r\n        if (!programEvent)\r\n            return {\r\n                term: term,\r\n                deadline: null,\r\n            };\r\n\r\n        return {\r\n            term: term + \" \" + programEvent.year,\r\n            deadline: programEvent.displayDate\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * events that apply to a given program \r\n */\r\n class ProgramEvent {\r\n\r\n    /**\r\n     * constructor\r\n     * @param {*} data raw dto provided by API describing one specific event \r\n     * @param {Numeric} year what year did this event come from? help qualify for display purposes\r\n     */\r\n    constructor(data, year){\r\n        this._data = data;\r\n        this._year = year;\r\n    }\r\n    \r\n    /**\r\n     * standard text-formatted date\r\n     * @returns {String}\r\n     */\r\n    get displayDate(){\r\n        return moment(this._data.Date).format('MMM Do, YYYY');\r\n    }\r\n    /**\r\n     * actual date\r\n     * @returns {Date}\r\n     */\r\n    get date(){\r\n        return new Date(this._data.Date);\r\n    }\r\n\r\n    /**\r\n     * term, if any\r\n     */\r\n    get term(){\r\n        return this._data.Term;\r\n    }\r\n\r\n    /**\r\n     * year with term offset\r\n     */\r\n    get year(){        \r\n        const compareTerm = this.term.toUpperCase();\r\n        if (compareTerm == 'FALL' || compareTerm == 'NONE' || compareTerm == 'SUMMER' || !compareTerm)        \r\n            return this._year;        \r\n\r\n        return this._year + 1;\r\n    }\r\n\r\n    /**\r\n     * has this date passed\r\n     * @returns {Boolean}\r\n     */\r\n    get isPassed() {\r\n        var now = Date.now();        \r\n        return this.date <= now;\r\n    }\r\n\r\n\r\n}\r\n\r\nexport default ProgramSeason;","export const open = ({ message, severity }) => async (dispatch) => {\r\n  // console.log(\"Called\");\r\n  dispatch({\r\n    type: \"open\",\r\n    payload: {\r\n      message,\r\n      severity,\r\n    },\r\n  });\r\n};\r\n\r\nexport const close = () => async (dispatch) => {\r\n  dispatch({\r\n    type: \"close\",\r\n  });\r\n};\r\n","import React from 'react';\r\n\r\nfunction BasicButton({label, description, ...props}) {\r\n  \r\n  return (\r\n    <button className=\"button\" label={label} aria-label={description} {...props}>{label}</button>\r\n  );\r\n}\r\n\r\nexport default BasicButton;","import React from \"react\";\r\nimport Button from \"./BasicButton\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst TextButton = (props) => <Button variant=\"text\" {...props} />;\r\nconst SolidButton = (props) => <Button {...props} />;\r\nconst OutlinedButton = (props) => <Button variant=\"outlined\" {...props} />;\r\nconst WhiteButton = (props) => <Button {...props} />;\r\n\r\nconst ButtonVariants = {\r\n  SOLID: \"solid\",\r\n  OUTLINE: \"outline\",\r\n  TEXT: \"text\",\r\n  WHITE: \"white\",\r\n};\r\n\r\nconst OSACButton = ({ variant = ButtonVariants.SOLID, ...props }) => {\r\n  switch (variant) {\r\n    case ButtonVariants.OUTLINE:\r\n      return <OutlinedButton {...props} />;\r\n    case ButtonVariants.SOLID:\r\n      return <SolidButton {...props} />;\r\n    case ButtonVariants.TEXT:\r\n      return <TextButton {...props} />;\r\n    case ButtonVariants.WHITE:\r\n      return <WhiteButton {...props} />;\r\n    default:\r\n      throw new Error(\r\n        `Invalid OSAC Button variant provided: ${variant}. Is not one of: ${Object.values(\r\n          ButtonVariants\r\n        ).join(\", \")}`\r\n      );\r\n  }\r\n};\r\n\r\nOSACButton.propTypes = {\r\n  variant: PropTypes.oneOf(Object.values(ButtonVariants)),\r\n};\r\n\r\nexport default OSACButton;\r\n","import { FIELDS, REPEATABLE_FIELDS } from './fields';\r\n\r\nconst initialFormState = {\r\n  isLoading: false,\r\n  year: null,\r\n  profileComplete: false,\r\n  fields: {},\r\n  deletedRepeatableFieldIds: {\r\n    ...REPEATABLE_FIELDS.reduce((dict,repeatableFieldKey) => {\r\n      dict[repeatableFieldKey] = [];\r\n      return dict;\r\n    },[])\r\n  }\r\n}\r\n\r\nexport { initialFormState };\r\n","import auth from \"../../auth\";\r\nimport { getCurrentYear } from \"../../utils\";\r\nimport apiClient from \"../../utils/API\";\r\nimport {\r\n  AnswerTypeAddressProps,\r\n  AddressFieldType,\r\n  AnswerTypeNameProps,\r\n  DateFieldType,\r\n  FIELDS,\r\n  AnswerTypeContactProps,\r\n  ContactFieldType,\r\n  CollegeFieldType,\r\n  AnswerTypeCollegeProps,\r\n  QuestionKeyMapping,\r\n  BooleanFieldType,\r\n  REPEATABLE_FIELDS,\r\n  AnswerTypeTranscriptProps,\r\n  TranscriptFieldType,\r\n  AnswerTypeDocumentProps,\r\n  DocumentFieldType\r\n} from \"./fields\";\r\nimport FormSerializer from \"./serializer\";\r\nimport moment from \"moment\";\r\nimport xss from \"xss\";\r\nimport _get from \"lodash.get\";\r\nimport store from \"..\";\r\n\r\nexport const FormActionTypes = {\r\n  UPDATE_FIELD: \"UPDATE_FIELD\",\r\n  SET_FIELD_LOADING_STATE: \"SET_FIELD_LOADING_STATE\",\r\n  BULK_UPDATE_FIELDS: \"BULK_UPDATE_FIELDS\",\r\n  ADD_DELETED_REPEATABLE_FIELD_ID: \"ADD_DELETED_REPEATABLE_FIELD_ID\",\r\n  PURGE_DELETED_REPEATABLE_FIELD_IDS: \"PURGE_DELETED_REPEATABLE_FIELD_IDS\",\r\n};\r\n\r\nconst applyXss = (val) => {\r\n  if (typeof val === \"object\" && val) {\r\n    return Object.entries(val).reduce((acc, [key, value]) => {\r\n      acc[key] = value;\r\n      console.log({\r\n        key,\r\n        value,\r\n        xssValue: xss(value),\r\n      });\r\n      return acc;\r\n    }, {});\r\n  } else {\r\n    return xss(val);\r\n  }\r\n};\r\n\r\nexport const setFieldLoadingState = (isLoading) => async (dispatch) => {\r\n  dispatch({\r\n    type: FormActionTypes.SET_FIELD_LOADING_STATE,\r\n    isLoading,\r\n  });\r\n};\r\n\r\nexport const updateField = ({ name, value }) => async (dispatch) => {\r\n  dispatch({\r\n    type: FormActionTypes.UPDATE_FIELD,\r\n    field: {\r\n      name,\r\n      value,\r\n    },\r\n  });\r\n};\r\n\r\nexport const addDeletedRepeatableFieldId = ({ name, id }) => async (\r\n  dispatch\r\n) => {\r\n  dispatch({\r\n    type: FormActionTypes.ADD_DELETED_REPEATABLE_FIELD_ID,\r\n    name,\r\n    id,\r\n  });\r\n};\r\n\r\nexport const purgeDeletedRepeatableFieldIds = () => async (dispatch) => {\r\n  dispatch({\r\n    type: FormActionTypes.PURGE_DELETED_REPEATABLE_FIELD_IDS,\r\n  });\r\n};\r\n\r\nexport const deleteRepeatableFields = async () => {\r\n  const state = store.getState();\r\n  const deletedDict = Object.entries(state.form.deletedRepeatableFieldIds);\r\n\r\n  let promises = [];\r\n  for (let i = 0; i < deletedDict.length; i++) {\r\n    const [fieldKey, deletedIdArray] = deletedDict[i];\r\n    for (let j = 0; j < deletedIdArray.length; j++) {\r\n      const id = deletedIdArray[j];\r\n      const answer = {\r\n        ...FormSerializer.buildBaseAnswer(fieldKey),\r\n        Id: id,\r\n      };\r\n      console.log('delete request data in deleteRepeatableFields:', answer)\r\n      promises.push(apiClient.delete(`/answer`, answer));\r\n    }\r\n  }\r\n  await Promise.all(promises);\r\n};\r\n\r\nexport const fetchBasicFields = (fieldKeys, year = null) => async (dispatch) => {\r\n  dispatch({\r\n    type: FormActionTypes.SET_FIELD_LOADING_STATE,\r\n    isLoading: true,\r\n  });\r\n\r\n  console.log('fetch basic fields year passed in:' + year)\r\n\r\n  let data = {\r\n    \"lookup.questionKeys\": fieldKeys.map((fieldKey) =>\r\n      FormSerializer.getQuestionKey(fieldKey)\r\n    ),\r\n    \"lookup.Year\" : year\r\n  }\r\n  if(!year) {\r\n    data = {\r\n      \"lookup.questionKeys\": fieldKeys.map((fieldKey) =>\r\n        FormSerializer.getQuestionKey(fieldKey)\r\n      ),\r\n    }\r\n  }\r\n\r\n  let answers = await apiClient.get(\"/answer\", data);\r\n\r\n  const reduxFields = FormSerializer.parseBulkAnswers(answers);\r\n\r\n  // if activity fields, map PresentActivity value to activity\r\n  for (let field in reduxFields) {\r\n    if( field === FIELDS.ACTIVITY_SCHOOL || \r\n        field === FIELDS.ACTIVITY_WORK || \r\n        field === FIELDS.ACTIVITY_VOLUNTEER){\r\n\r\n      reduxFields[field].map((activity)=>{\r\n        if(activity.StopDate.value)\r\n        {\r\n          activity.PresentActivity = false\r\n        }\r\n        else{\r\n          activity.PresentActivity = true\r\n        }\r\n      })\r\n    }\r\n  }\r\n\r\n  let pastColleges = reduxFields[FIELDS.PAST_COLLEGE]\r\n  if (pastColleges && pastColleges.length > 0) {\r\n    const currentColleges = pastColleges.filter(pc => pc.StopTerm?.value === null)\r\n    pastColleges = pastColleges.filter(pc => pc.StopTerm?.value !== null);\r\n\r\n    if (currentColleges && currentColleges.length > 0) {\r\n      reduxFields[FIELDS.CURRENT_COLLEGE] = currentColleges;\r\n      reduxFields[FIELDS.PAST_COLLEGE] = pastColleges;\r\n    }\r\n  }\r\n\r\n  dispatch({\r\n    type: FormActionTypes.BULK_UPDATE_FIELDS,\r\n    fields: reduxFields,\r\n  });\r\n\r\n  dispatch({\r\n    type: FormActionTypes.SET_FIELD_LOADING_STATE,\r\n    isLoading: false,\r\n  });\r\n  return answers;\r\n  // console.log('answers retrieved: ', answers);\r\n};\r\n\r\nconst ifFileExistsAttachToQuestionKey = async (\r\n  answer,\r\n  reactHookFormValueDict\r\n) => {\r\n  const file =\r\n    reactHookFormValueDict &&\r\n    reactHookFormValueDict[AnswerTypeTranscriptProps._FILE];\r\n  const id = answer[AnswerTypeTranscriptProps.ID];\r\n\r\n  if ((answer.AnswerType === TranscriptFieldType.AnswerType || answer.AnswerType === DocumentFieldType.AnswerType) && file) {\r\n    await apiClient.attachFileToQuestionKey({\r\n      id,\r\n      file,\r\n      questionKey: answer.QuestionKey,\r\n      year: answer.Year,\r\n    });\r\n  }\r\n};\r\n\r\nconst updateBasicFields = async (\r\n  fieldValueDict,\r\n  projection = [],\r\n  exclusions = [],\r\n  year = undefined\r\n) => {\r\n  // console.log('XXXXXXXXXXXXXX updateBasicFields called')\r\n  // console.log(\"Data\", fieldValueDict);\r\n  // console.log(\"Excluding the following keys\", exclusions);\r\n  // console.log(\"Manully defined year\", year)\r\n  const results = []\r\n\r\n  // temp - only send the following fields keys\r\n  let answers;\r\n  if (projection.length) {\r\n    let answers = [];\r\n    projection.forEach((_fieldKey) => {\r\n      // console.log(\"field key: \",_fieldKey);\r\n      if (Object.keys(fieldValueDict).includes(_fieldKey)) {\r\n        const [, value] = Object.entries(fieldValueDict).find(\r\n          ([fieldKey, _]) => fieldKey === _fieldKey\r\n        );\r\n        // console.log(\"field val: \",value);\r\n        const answer = FormSerializer.serializeBasicFieldForUpdate(\r\n          _fieldKey,\r\n          value,\r\n          { year }\r\n        );\r\n        if (answer) {\r\n          ifFileExistsAttachToQuestionKey(answer, value);\r\n          answers.push(answer);\r\n        }\r\n      }\r\n    });\r\n    // console.log(\"answers posted: \",answers);\r\n    results.push(await apiClient.put(\"/answer\", answers));\r\n\r\n  }\r\n\r\n  let updatedRepetableFieldIds = {};\r\n\r\n  // Interate throught react hook form values and submit fields for updating in bulk PUT nedpoint\r\n  answers = Object.entries(fieldValueDict).reduce(\r\n    (_answers_, [fieldKey, value]) => {\r\n      // if we don't want to submit a certain set of fields, skip appending them to bulk PUT\r\n      if (exclusions.includes(fieldKey)) return _answers_;\r\n\r\n      // if value is an array this is a repetable field\r\n      if (Array.isArray(value)) {\r\n        for (let index = 0; index < value.length; index++) {\r\n          const repetableField = value[index];\r\n          if (!repetableField) continue;\r\n          const id = repetableField?.Id;\r\n          // if repeatable field has id we will append it to the bulk PUT endpoint to update it's value(s)\r\n          const hasId = typeof id === \"number\";\r\n          // console.log(\"Has id?\", repetableField)\r\n\r\n          if (hasId) {\r\n            // add to map so that we don't delete this answer in the repeatable fields deletion block\r\n            if (hasId) updatedRepetableFieldIds[id] = 1;\r\n              //console.log(`Field ${fieldKey}.${index} submitted for updating`, {id,});\r\n              //console.log('repeatable field val:' ,repetableField)\r\n            const answer = FormSerializer.serializeBasicFieldForUpdate(\r\n              fieldKey,\r\n              repetableField,\r\n              { id }\r\n            );\r\n            ifFileExistsAttachToQuestionKey(answer, repetableField);\r\n            _answers_.push(answer);\r\n          }\r\n        }\r\n      } else {\r\n        const answer = FormSerializer.serializeBasicFieldForUpdate(\r\n          fieldKey,\r\n          value,\r\n          { year }\r\n        );\r\n        // console.log('individual answer:', answer)\r\n        if (answer) {\r\n          // check if answer is transcript, if so, attach file to question key\r\n          ifFileExistsAttachToQuestionKey(answer, value);\r\n          _answers_.push(answer);\r\n        }\r\n      }\r\n\r\n      return _answers_;\r\n    },\r\n    []\r\n  );\r\n  if (answers.length) {\r\n    const result = await apiClient.put(\"/answer\", answers);\r\n    results.push(result);\r\n  }\r\n\r\n  let promises = [];\r\n\r\n  // POST individual new (without id) repeatable field entities for creation on API\r\n  for (let i = 0; i < REPEATABLE_FIELDS.length; i++) {\r\n    const repeatableFieldKey = REPEATABLE_FIELDS[i];\r\n    const reduxFieldValues = fieldValueDict[repeatableFieldKey];\r\n\r\n    if (!reduxFieldValues) continue;\r\n\r\n    for (let j = 0; j < reduxFieldValues.length; j++) {\r\n      const reduxFieldValue = reduxFieldValues[j];\r\n      if (!reduxFieldValue) continue;\r\n      const id = reduxFieldValue.Id;\r\n      const hasId = typeof id === \"number\";\r\n      if (!hasId) {\r\n        const answer = FormSerializer.serializeBasicFieldForUpdate(\r\n          repeatableFieldKey,\r\n          reduxFieldValue,\r\n          { year }\r\n        );\r\n        switch (repeatableFieldKey) {\r\n          case FIELDS.OTHER_NAMES:\r\n            promises.push(apiClient.post(`/answer/other-name`, answer));\r\n            break;\r\n          case FIELDS.ACTIVITY_WORK:\r\n          case FIELDS.ACTIVITY_VOLUNTEER:\r\n          case FIELDS.ACTIVITY_SCHOOL:\r\n            // await activity promises or else activities will save randomly\r\n            promises.push(await apiClient.post(`/answer/activity`, answer));\r\n            break;\r\n          case FIELDS.PAST_COLLEGE:\r\n          case FIELDS.CURRENT_COLLEGE:\r\n            if (typeof(answer.AttendedStop) !== 'string') {\r\n              answer.AttendedStop = null;\r\n            }\r\n            //console.log('school post data', answer)\r\n            promises.push(apiClient.post(`/answer/school`, answer));\r\n            break;\r\n          case FIELDS.DEGREES:\r\n            promises.push(apiClient.post(`/answer/degree`, answer));\r\n            break;\r\n          case FIELDS.AGE_CHILD:\r\n            promises.push(apiClient.post(`/answer/text`, answer));\r\n            break;\r\n          case FIELDS.CHILDREN:\r\n            promises.push(apiClient.post(`/answer/child`, answer));\r\n            break;\r\n          default:\r\n            break;\r\n        }\r\n      }\r\n    }\r\n  }\r\n  await Promise.all(promises);\r\n\r\n  //DELETE individual repeatable fields that have not been re-submitted for updating\r\n  const state = store.getState();\r\n  const deletedDict = Object.entries(state.form.deletedRepeatableFieldIds);\r\n\r\n  promises = [];\r\n\r\n  for (let i = 0; i < deletedDict.length; i++) {\r\n    const [fieldKey, deletedIdArray] = deletedDict[i];\r\n    for (let j = 0; j < deletedIdArray.length; j++) {\r\n      const id = deletedIdArray[j];\r\n      // if the id has been re-used for a new field, don't delete the entity\r\n      if (updatedRepetableFieldIds[id]) continue;\r\n      const answer = {\r\n        ...FormSerializer.buildBaseAnswer(fieldKey),\r\n        Id: id,\r\n        Year: year\r\n      };\r\n      console.log('delete request data in updateBasicFields:', answer)\r\n      promises.push(apiClient.delete(`/answer`, answer));\r\n    }\r\n  }\r\n  await Promise.all(promises);\r\n\r\n  return results;\r\n};\r\n\r\nexport const submitForm = (fieldValueDict, ...args) => async (dispatch) => {\r\n  // will handle updating every field type: basic, and composite fields\r\n  return await updateBasicFields(fieldValueDict, ...args);\r\n};\r\n\r\nexport const bulkUpdateFields = (fields) => async (dispatch) => {\r\n  dispatch({\r\n    type: FormActionTypes.BULK_UPDATE_FIELDS,\r\n    fields,\r\n  });\r\n};\r\n","const initialSnackState = {\r\n  open: false,\r\n  message: null,\r\n  severity: \"success\",\r\n  horizontal: \"center\",\r\n  vertical: \"bottom\",\r\n};\r\n\r\nexport { initialSnackState };\r\n","import { combineReducers } from \"redux\";\r\n//import { routerReducer } from 'react-router-redux'\r\nimport { authReducer } from \"./auth/reducers\";\r\nimport { formReducer } from \"./form/reducers\";\r\nimport { snackReducer } from \"./snack/reducers\";\r\n// Keys will correspond to folder name within store\r\n\r\nexport default combineReducers({\r\n  auth: authReducer,\r\n  form: formReducer,\r\n  snack: snackReducer,\r\n  //  routing: routerReducer,\r\n});\r\n","import { initialUserState } from './state';\r\nimport { AuthActionTypes } from './actions'\r\n  \r\nexport const authReducer = (state = initialUserState, action) => {\r\n    switch (action.type) {\r\n      \r\n      case AuthActionTypes.LOGIN:\r\n        // Oddly, idToken passes as undefined when logging in and somehow ends up in local storage as undefined but parseable\r\n        localStorage.setItem('idToken',action.idToken);\r\n\r\n        return {\r\n          ...state,\r\n          isLoggedIn: true,\r\n          idToken: action.idToken\r\n        }\r\n\r\n      case AuthActionTypes.LOGOUT:\r\n\r\n        localStorage.removeItem('idToken');\r\n        return {\r\n          ...state,\r\n          isLoggedIn: false,\r\n          idToken: '',\r\n        }\r\n\r\n      case AuthActionTypes.SET_MIGRATION:\r\n        const { status } = action\r\n        // console.log(\"Set Migration called\", status)\r\n        return {\r\n          ...state,\r\n          migration: status\r\n        }\r\n\r\n      default:\r\n        return {...state};\r\n    }\r\n};","import { initialFormState } from './state';\r\nimport { FormActionTypes } from './actions';\r\nimport { REPEATABLE_FIELDS } from './fields';\r\n\r\nexport const formReducer = (state = initialFormState, action) => {\r\n  switch (action.type) {\r\n    case FormActionTypes.SET_FIELD_LOADING_STATE:\r\n      const { isLoading } = action;\r\n      return {\r\n        ...state,\r\n        isLoading\r\n      }\r\n    case FormActionTypes.PURGE_DELETED_REPEATABLE_FIELD_IDS:\r\n      return {\r\n        ...state,\r\n        deletedRepeatableFieldIds: {\r\n          ...REPEATABLE_FIELDS.reduce((dict,repeatableFieldKey)=>{\r\n            dict[repeatableFieldKey] = []\r\n            return dict;\r\n          },{})\r\n        }\r\n      }\r\n    case FormActionTypes.ADD_DELETED_REPEATABLE_FIELD_ID:\r\n      return (()=>{\r\n        const { name , id } = action;\r\n        if(name && id && Array.isArray(state.deletedRepeatableFieldIds[name]) && !state.deletedRepeatableFieldIds[name].includes(id)){\r\n          return {\r\n            ...state,\r\n            deletedRepeatableFieldIds: {\r\n              ...state.deletedRepeatableFieldIds,\r\n              [name]: [...state.deletedRepeatableFieldIds[name], id]\r\n            }\r\n          }\r\n        }\r\n        else {\r\n          return state;\r\n        }\r\n      })();\r\n    case FormActionTypes.UPDATE_FIELD:\r\n      return (()=>{\r\n        const field = action.field;\r\n        const { name, value } = field;\r\n        // console.log(\"NAME\", name)\r\n        if (name) {\r\n          return {\r\n            ...state,\r\n            fields: {\r\n              ...state.fields,\r\n              [name]: {\r\n                ...state.fields[name],\r\n                value\r\n              }\r\n            }\r\n          };\r\n        }\r\n        else {\r\n          return state;\r\n        }\r\n      })();\r\n    case FormActionTypes.BULK_UPDATE_FIELDS:\r\n      const fields = action.fields;\r\n      return { \r\n        ...state,\r\n        fields\r\n       }\r\n\r\n    default:\r\n      return { ...state };\r\n  }\r\n};\r\n\r\n","import { initialSnackState } from \"./state\";\r\n\r\nexport const snackReducer = (state = initialSnackState, action) => {\r\n  switch (action.type) {\r\n    case \"open\":\r\n      const { message, severity } = action.payload;\r\n      return {\r\n        ...state,\r\n        message,\r\n        severity,\r\n        open: true,\r\n      };\r\n    case \"close\": {\r\n      return {\r\n        ...state,\r\n        open: false,\r\n      };\r\n    }\r\n    default:\r\n      return {\r\n        ...state,\r\n      };\r\n  }\r\n};\r\n","import { createStore, compose, applyMiddleware } from 'redux';\r\n//import { routerMiddleware } from 'react-router-redux'\r\nimport rootReducer from './reducers';\r\nimport { bindActionCreators } from 'redux';\r\nimport * as unbindedActions from '../store/actions';\r\nimport thunkMiddleware from 'redux-thunk';\r\n\r\n\r\n// TODO(Alejandro): Factor out to env var\r\nconst PRODUCTION = true;\r\n\r\n//----Development\r\nconst composeEnhancers = (window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose);\r\n//---------\r\nconst store = createStore(\r\n  rootReducer,\r\n  composeEnhancers(\r\n    applyMiddleware(\r\n        thunkMiddleware,\r\n    )\r\n  )\r\n);\r\n\r\n// export binded (with dispatch) actions\r\nexport const actions = bindActionCreators(unbindedActions, store.dispatch);\r\n\r\nexport default store;\r\n\r\n","import { ProgramSeason } from \"./ProgramSeason\";\r\n\r\n/**\r\n * description of a funding program being offered to student. Interprets program info as provided by Program API\r\n */\r\nclass ProgramInfo {\r\n\r\n    /**\r\n     * constructor\r\n     * @param {*} data the raw DTO provided by the Programs API\r\n     */\r\n    constructor(data){\r\n        this.updateDto(data);  \r\n    }\r\n\r\n    /**\r\n     * is this info ready for use?\r\n     * @returns {Boolean}\r\n     */\r\n    get isLoaded(){\r\n        return this._data != null;\r\n    }\r\n\r\n    get name(){\r\n        return this._data?.Name;\r\n    }\r\n    get code(){\r\n        return this._data?.Code;\r\n    }\r\n    \r\n    get description(){\r\n        return this._data?.Description\r\n    }\r\n\r\n    get primaryEmail(){\r\n        return this._data?.PrimaryEmailContact;\r\n    }\r\n    /**\r\n     * if we've just received the latest program dto, go ahead and update it!\r\n     * @param {*} data \r\n     */\r\n    updateDto(data){\r\n        this._data = data;\r\n    }\r\n   \r\n    /**\r\n     * most recent available  year\r\n     * @returns {Number}\r\n     * @deprecated year must be specified by context. could be multiple currently available years\r\n     */\r\n    get currentYear(){\r\n        return this.currentSeason?.year;\r\n    }\r\n\r\n    /**\r\n     * get most recently available season. Others may also be currently available.\r\n     * @returns {ProgramSeason}\r\n     */\r\n    get recentSeason(){\r\n        if (!this._data) return null;\r\n        if (!this._data.ActiveSeasons) return null; //probably just a stub data in there to start\r\n        if (this._data.ActiveSeasons.length == 0) return null; //configuration error on OSAC's side\r\n\r\n        const seasonsInOrder = this._data.ActiveSeasons.sort((a,b) => b.Year - a.Year);\r\n        const mostRecentSeason = seasonsInOrder[0];\r\n        return new ProgramSeason(mostRecentSeason);\r\n    }\r\n\r\n    /**\r\n     * get all available seasons\r\n     * @returns {Array<ProgramSeason>}\r\n     */\r\n    get seasons(){\r\n        if (!this._data) return new Array();\r\n        if (!this._data.ActiveSeasons) return new Array(); //probably just a stub data in there to start\r\n      \r\n        return this._data.ActiveSeasons.map(x => new ProgramSeason(x))\r\n    }\r\n\r\n    /**\r\n     * get the season for the specified year, if it happens to already be part of the program definition.\r\n     * \r\n     * If season is not already loaded into program info -- likely because it is not currently available -- you will need to fetch it directly from apiClient.getSeason\r\n     * @param {Number} year \r\n     * @returns {ProgramSeason}\r\n     */\r\n    getSeason(year){\r\n        return this.seasons.find(x => x.year === year);\r\n    }\r\n    \r\n    /**\r\n     * running on the assumption, for now, that there is a single, current season active at any one time\r\n     * @returns {ProgramSeason}\r\n     * @deprecated could be multiple seasons currently\r\n     */\r\n    get currentSeason(){\r\n        return this.recentSeason;\r\n    }\r\n\r\n    /**\r\n     * convenience method to get current start event \r\n     * @returns {ProgramEvent}\r\n     * @deprecated could be multiple seasons currently, specify season first\r\n     */\r\n    get startEvent(){\r\n        return this.currentSeason?.getEvent('StartDate') ?? this.currentSeason?.getEvent('START') ;\r\n    }\r\n\r\n    /**\r\n     * convenience method to get current start status\r\n     * @returns {Boolean}\r\n     */\r\n    get isStarted(){\r\n        if (this.startEvent == null) return false;\r\n\r\n        return this.startEvent.isPassed;\r\n    }\r\n    \r\n}\r\n\r\n\r\nexport default ProgramInfo;","\r\n/**\r\n * all the \"top-tier\" programs of algorithmic interest\r\n */\r\nexport const CODES = {\r\n  SCHOLARSHIPS: 'SCH',\r\n  OREGON_PROMISE: 'ORP',\r\n  CHAFEE: 'CH',\r\n  CHILD_CARE: 'CC',\r\n  NATIONAL_GUARD: 'ONGSTA',\r\n  FAFSA: 'FAFSA',\r\n  OTSG: 'OTSG',\r\n  ELP: 'ELP',\r\n  OTSP: 'OTSP'\r\n};\r\n\r\n/**\r\n * Ideally we should be pulling the exact text of these names from the program definitions in the API. Staff may have need to fine tune these\r\n * @deprecated use api to fetch display properties for programs\r\n */\r\nexport const NAMES = {\r\n  OREGON_PROMISE: 'Oregon Promise Grant',\r\n  CHAFEE: 'Chafee Education & Training Grant',\r\n  CHILD_CARE: 'Student Child Care Grant',\r\n  NATIONAL_GUARD: 'Oregon National Guard Grant',\r\n  OTSG: 'Oregon Tribal Student Grant',\r\n  OTSP: 'Oregon Teacher Scholars Program',\r\n};\r\n","import { getCurrentYear } from \"../../utils\";\r\nimport {\r\n    FIELDS,\r\n    REPEATABLE_FIELDS,\r\n    AnswerTypeAddressProps,\r\n    AddressFieldType,\r\n    AnswerTypeNameProps,\r\n    DateFieldType,\r\n    AnswerTypeContactProps,\r\n    ContactFieldType,\r\n    CollegeFieldType,\r\n    AnswerTypeCollegeProps,\r\n    IntegerFieldType,\r\n    QuestionKeyMapping,\r\n    BooleanFieldType,\r\n    NameFieldType,\r\n    ActivityFieldType,\r\n    AnswerTypeActivityProps,\r\n    ActivityTypeCodes,\r\n    TranscriptTypeCodes,\r\n    TranscriptFieldType,\r\n    AnswerTypeTranscriptProps,\r\n    TranscriptDeliveryTypes,\r\n    HighSchoolFieldType,\r\n    MembershipFieldType,\r\n    DocumentFieldType,\r\n    AnswerTypeDocumentProps,\r\n    DocumentDeliveryTypes,\r\n    TextFieldType\r\n\r\n} from \"./fields\";\r\n\r\nimport auth from './../../auth';\r\nimport xss from 'xss';\r\nimport moment from \"moment\";\r\n\r\nconst projectCompositeFieldValues = (obj) => {\r\n    return Object.entries(obj).reduce((newObj, [key, value]) => {\r\n\r\n        // console.log(`${key}=${value}`)\r\n        if (key.startsWith('_')) {\r\n            // if key starts with _ it is a private field not to be sent to API\r\n            return newObj;\r\n        }\r\n        let newValue = value;\r\n        if (typeof newValue === 'object') {\r\n            // serialize searchable dropdown data structure of { value, label } -> value\r\n            newValue = value?.value;\r\n        }\r\n        if (key === AnswerTypeContactProps.PHONE) {\r\n            newValue = (newValue || '').replace(/[\\(,\\)-\\s]/ig, '')\r\n        }\r\n        newObj[key] = newValue;\r\n        return newObj;\r\n    }, {})\r\n}\r\n\r\nexport default class FormSerializer {\r\n\r\n    static getQuestionKey(fieldKey) {\r\n        return QuestionKeyMapping[fieldKey]?.QuestionKey || fieldKey;\r\n    }\r\n\r\n    static getQuestionKeyLowerCase(fieldKey) {\r\n        return FormSerializer.getQuestionKey(fieldKey).toLowerCase();\r\n    }\r\n\r\n    static parseBulkAnswers(answers) {\r\n        return answers.reduce((fieldDict, answerBody) => {\r\n\r\n            const answerType = answerBody?.AnswerType;\r\n            let fieldKey;\r\n            // some cases of non-unique mappings between field <-> question key\r\n            if (answerType === ActivityFieldType.AnswerType) {\r\n                switch (answerBody[AnswerTypeActivityProps.TYPE]) {\r\n                    case ActivityTypeCodes.SCHOOL:\r\n                        fieldKey = FIELDS.ACTIVITY_SCHOOL\r\n                        break;\r\n                    case ActivityTypeCodes.WORK:\r\n                        fieldKey = FIELDS.ACTIVITY_WORK\r\n                        break;\r\n                    case ActivityTypeCodes.VOLUNTEER:\r\n                        fieldKey = FIELDS.ACTIVITY_VOLUNTEER\r\n                        break;\r\n                    default:\r\n                        break;\r\n                }\r\n            }\r\n            else if (answerType === TranscriptFieldType.AnswerType) {\r\n                // console.log('parsebulkanswers tx field type start')\r\n                let qk = answerBody?.QuestionKey.toLowerCase();\r\n                // console.log('parsebulkanswers tx field type delivery mode', answerBody[AnswerTypeTranscriptProps.DELIVERY_TYPE])\r\n                switch (answerBody[AnswerTypeTranscriptProps.DELIVERY_TYPE]) {\r\n                    case TranscriptDeliveryTypes.MAIL:\r\n                        switch (qk) {\r\n                            case FormSerializer.getQuestionKeyLowerCase(FIELDS.FALL_HS_TRANSCRIPTS_MAIL):\r\n                                fieldKey = FIELDS.FALL_HS_TRANSCRIPTS_MAIL;\r\n                                break;\r\n                            case FormSerializer.getQuestionKeyLowerCase(FIELDS.FALL_COLLEGE_TRANSCRIPTS_MAIL):\r\n                                fieldKey = FIELDS.FALL_COLLEGE_TRANSCRIPTS_MAIL;\r\n                                break;\r\n                            case FormSerializer.getQuestionKeyLowerCase(FIELDS.FALL_COLLEGE_TRANSCRIPTS_DURING_HS_MAIL):\r\n                                fieldKey = FIELDS.FALL_COLLEGE_TRANSCRIPTS_DURING_HS_MAIL;\r\n                                break;\r\n                            case FormSerializer.getQuestionKeyLowerCase(FIELDS.FALL_COLLEGE_TRANSCRIPTS_PRIOR_MAIL):\r\n                                fieldKey = FIELDS.FALL_COLLEGE_TRANSCRIPTS_PRIOR_MAIL;\r\n                                break;\r\n                            case FormSerializer.getQuestionKeyLowerCase(FIELDS.FALL_COLLEGE_TRANSCRIPTS_RECENT_MAIL):\r\n                                fieldKey = FIELDS.FALL_COLLEGE_TRANSCRIPTS_RECENT_MAIL;\r\n                                break;\r\n                            case FormSerializer.getQuestionKeyLowerCase(FIELDS.PROOF_GPA__MAIL):\r\n                                fieldKey = FIELDS.PROOF_GPA__MAIL;\r\n                                break;\r\n                            case FormSerializer.getQuestionKeyLowerCase(FIELDS.SPRING_COLLEGE_TRANSCRIPTS_MAIL):\r\n                                fieldKey = FIELDS.SPRING_COLLEGE_TRANSCRIPTS_MAIL;\r\n                                break;\r\n                            case FormSerializer.getQuestionKeyLowerCase(FIELDS.SPRING_HS_TRANSCRIPTS_MAIL):\r\n                                fieldKey = FIELDS.SPRING_HS_TRANSCRIPTS_MAIL;\r\n                                break;\r\n                            default:\r\n                                break;\r\n                        }\r\n                        break;\r\n                    case TranscriptDeliveryTypes.REGISTRAR:\r\n                        switch (qk) {\r\n                            case FormSerializer.getQuestionKeyLowerCase(FIELDS.FALL_HS_TRANSCRIPTS_REGISTRAR):\r\n                                fieldKey = FIELDS.FALL_HS_TRANSCRIPTS_REGISTRAR\r\n                                break;                     \r\n                            case FormSerializer.getQuestionKeyLowerCase(FIELDS.PROOF_GPA__REGISTRAR):\r\n                                fieldKey = FIELDS.PROOF_GPA__REGISTRAR;\r\n                                break;\r\n                            default:\r\n                                break;\r\n                        }\r\n                        break;\r\n                    case TranscriptDeliveryTypes.UPLOAD:\r\n                        switch (qk) {\r\n                            case FormSerializer.getQuestionKeyLowerCase(FIELDS.FALL_HS_TRANSCRIPTS_DIGITAL):\r\n                                fieldKey = FIELDS.FALL_HS_TRANSCRIPTS_DIGITAL\r\n                                break;\r\n                            case FormSerializer.getQuestionKeyLowerCase(FIELDS.FALL_COLLEGE_TRANSCRIPTS_DIGITAL):\r\n                                fieldKey = FIELDS.FALL_COLLEGE_TRANSCRIPTS_DIGITAL;\r\n                                break;\r\n                            case FormSerializer.getQuestionKeyLowerCase(FIELDS.FALL_COLLEGE_TRANSCRIPTS_DURING_HS_DIGITAL):\r\n                                fieldKey = FIELDS.FALL_COLLEGE_TRANSCRIPTS_DURING_HS_DIGITAL;\r\n                                break;\r\n                            case FormSerializer.getQuestionKeyLowerCase(FIELDS.FALL_COLLEGE_TRANSCRIPTS_PRIOR_DIGITAL):\r\n                                fieldKey = FIELDS.FALL_COLLEGE_TRANSCRIPTS_PRIOR_DIGITAL;\r\n                                break;\r\n                            case FormSerializer.getQuestionKeyLowerCase(FIELDS.FALL_COLLEGE_TRANSCRIPTS_RECENT_DIGITAL):\r\n                                fieldKey = FIELDS.FALL_COLLEGE_TRANSCRIPTS_RECENT_DIGITAL;\r\n                                break;\r\n                            case FormSerializer.getQuestionKeyLowerCase(FIELDS.PROOF_GPA__UPLOAD):\r\n                                fieldKey = FIELDS.PROOF_GPA__UPLOAD;\r\n                                break;\r\n                            case FormSerializer.getQuestionKeyLowerCase(FIELDS.SPRING_HS_TRANSCRIPTS_DIGITAL):\r\n                                fieldKey = FIELDS.SPRING_HS_TRANSCRIPTS_DIGITAL\r\n                                break;\r\n                            case FormSerializer.getQuestionKeyLowerCase(FIELDS.SPRING_COLLEGE_TRANSCRIPTS_DIGITAL):\r\n                                fieldKey = FIELDS.SPRING_COLLEGE_TRANSCRIPTS_DIGITAL;\r\n                                break;\r\n                            default:\r\n                                break;\r\n                        }\r\n                        break;\r\n                    default:\r\n                        break;\r\n                }\r\n            }\r\n            else if (answerType === DocumentFieldType.AnswerType) {\r\n                let qk = answerBody?.QuestionKey.toLowerCase();\r\n                switch (answerBody[AnswerTypeDocumentProps.DELIVERY_TYPE]) {\r\n                    case DocumentDeliveryTypes.MAIL:\r\n                        switch (qk) {\r\n                            case FormSerializer.getQuestionKeyLowerCase(FIELDS.CHILD_CARE_EXPENSES_MAIL):\r\n                                fieldKey = FIELDS.CHILD_CARE_EXPENSES_MAIL;\r\n                                break;\r\n                            default:\r\n                                fieldKey = answerBody?.QuestionKey + \"_\" + DocumentDeliveryTypes.MAIL;\r\n                                break;\r\n                        }\r\n                        break;\r\n                    case DocumentDeliveryTypes.UPLOAD:\r\n                        switch (qk) {\r\n                            case FormSerializer.getQuestionKeyLowerCase(FIELDS.CHILD_CARE_EXPENSES_DIGITAL):\r\n                                fieldKey = FIELDS.CHILD_CARE_EXPENSES_DIGITAL\r\n                                break;\r\n                            default:\r\n                                fieldKey = answerBody?.QuestionKey + \"_\" + DocumentDeliveryTypes.UPLOAD;\r\n                                break;\r\n                        }\r\n                        break;\r\n                    default:\r\n                        break;\r\n                }\r\n            }\r\n            else {\r\n                fieldKey = FormSerializer.getFieldKey(answerBody?.QuestionKey);\r\n            }\r\n\r\n            // If we cannot map to field key from question key this indicates the question key might not be hardcoded, which is the case for scholarship question keys, so the field key becomes equivalent to question key in this case\r\n            if (!fieldKey) {\r\n                fieldKey = answerBody?.QuestionKey;\r\n                // console.log(fieldKey)\r\n            }\r\n\r\n            let value = answerBody?.Response;\r\n\r\n            // todo add proper format for parsing\r\n            if ([FIELDS.BIRTHDATE].includes(fieldKey)) {\r\n                value = moment(value).format('YYYY-MM-DD');\r\n            }\r\n\r\n            // console.log('parse bulk answers for '. fieldKey)\r\n            if (FormSerializer.getAnswerType(fieldKey) === BooleanFieldType.AnswerType) {\r\n                if (typeof value === 'string') {\r\n                    value = value === \"False\" ? false : true;\r\n                }\r\n                // disabled else field because radio buttons need null values to be empty\r\n                // else {\r\n                //     value = !!value;\r\n                // }\r\n            }\r\n\r\n            if ([FIELDS.OTHER_NAMES, \r\n                 FIELDS.ACTIVITY_VOLUNTEER, \r\n                 FIELDS.ACTIVITY_WORK, \r\n                 FIELDS.ACTIVITY_SCHOOL, \r\n                 FIELDS.DEGREES, \r\n                 FIELDS.PAST_COLLEGE, \r\n                 FIELDS.AGE_CHILD, \r\n                 FIELDS.CHILDREN, \r\n                 FIELDS.FALL_COLLEGE_TRANSCRIPTS_DIGITAL, \r\n                 FIELDS.FALL_COLLEGE_TRANSCRIPTS_MAIL, \r\n                 FIELDS.FALL_COLLEGE_TRANSCRIPTS_DURING_HS_DIGITAL, \r\n                 FIELDS.FALL_COLLEGE_TRANSCRIPTS_DURING_HS_MAIL, \r\n                 FIELDS.FALL_COLLEGE_TRANSCRIPTS_RECENT_DIGITAL, \r\n                 FIELDS.FALL_COLLEGE_TRANSCRIPTS_RECENT_MAIL, \r\n                 FIELDS.FALL_COLLEGE_TRANSCRIPTS_PRIOR_DIGITAL, \r\n                 FIELDS.FALL_COLLEGE_TRANSCRIPTS_PRIOR_MAIL, \r\n                 FIELDS.CHILD_CARE_EXPENSES_DIGITAL, \r\n                 FIELDS.CHILD_CARE_EXPENSES_MAIL, \r\n                 FIELDS.SPRING_COLLEGE_TRANSCRIPTS_DIGITAL, \r\n                 FIELDS.SPRING_COLLEGE_TRANSCRIPTS_MAIL\r\n                ].includes(fieldKey)) {\r\n                const id = answerBody?.Id;\r\n                if (!Array.isArray(fieldDict[fieldKey])) {\r\n                    fieldDict[fieldKey] = [];\r\n                }\r\n                let answer = { id };\r\n                Object.entries(answerBody).forEach(([compositePropKey, propValue]) => {\r\n                    if ([ContactFieldType.Props.CITY, ContactFieldType.Props.STATE, ContactFieldType.Props.COUNTY].includes(compositePropKey)) {\r\n                        propValue = Number(propValue)\r\n                    }\r\n                    answer[compositePropKey] = {\r\n                        value: propValue\r\n                    }\r\n                });\r\n                fieldDict[fieldKey].push(answer)\r\n            }\r\n            // parse non-repeatable composite fields\r\n            else if ([\r\n                CollegeFieldType.AnswerType,\r\n                ContactFieldType.AnswerType,\r\n                MembershipFieldType.AnswerType,\r\n                TranscriptFieldType.AnswerType,\r\n                AddressFieldType.AnswerType,\r\n                HighSchoolFieldType.AnswerType,\r\n                DocumentFieldType.AnswerType\r\n            ].includes(answerType)) {\r\n                if (!fieldDict[fieldKey]) {\r\n                    fieldDict[fieldKey] = {};\r\n                }\r\n                Object.entries(answerBody).forEach(([propKey, propValue]) => {\r\n                    fieldDict[fieldKey][propKey] = {\r\n                        value: propValue\r\n                    }\r\n                });\r\n            }\r\n            else {\r\n                fieldDict[fieldKey] = {\r\n                    value\r\n                }\r\n            }\r\n\r\n            return fieldDict;\r\n\r\n        }, {});\r\n    }\r\n\r\n    static getFieldKey(questionKey) {\r\n        // todo(Alejandro): create service worker to create dictionary mapping on app lifecycle start\r\n        const result = Object.entries(QuestionKeyMapping)\r\n            .find(([fieldKey, questionBody]) => (questionBody?.QuestionKey || '').toLowerCase() === (questionKey || '').toLowerCase());\r\n        if (result) {\r\n            const [fieldKey] = result;\r\n            return fieldKey;\r\n        }\r\n    }\r\n\r\n    static getAnswerType(fieldKey) {\r\n        const question = QuestionKeyMapping[fieldKey];\r\n        return question?.AnswerType;\r\n    }\r\n\r\n    static buildBaseAnswer = (fieldKey) => {\r\n        const question = QuestionKeyMapping[fieldKey];\r\n        if (!question) return {};\r\n        const AnswerType = question?.AnswerType;\r\n        const QuestionKey = question?.QuestionKey;\r\n\r\n        return {         \r\n            AnswerType,\r\n            QuestionKey,\r\n        };\r\n    }\r\n\r\n    static isFieldComposite(fieldKey) {\r\n        const isComposite = !!QuestionKeyMapping[fieldKey]?.Props;\r\n        return isComposite;\r\n    }\r\n\r\n    static isDropdownDto(obj) {\r\n        return typeof obj === 'object' && obj && obj.label && (typeof obj.value === 'number' || obj.value);\r\n    }\r\n\r\n    static serializeBasicFieldForUpdate(fieldKey, value, { id, year } = { id: undefined }) {\r\n\r\n        //console.log('serialize basic field start')\r\n\r\n        let question = QuestionKeyMapping[fieldKey];\r\n\r\n        //console.log('serialize basic field queston', question)\r\n\r\n        // if no question key mapping found, this is the case for scholarships - then fieldKey = questionKey\r\n        if (!question) {\r\n            if (typeof value === 'string') {\r\n                question = {\r\n                    AnswerType: \"Text\",\r\n                    QuestionKey: fieldKey,\r\n                }\r\n            }\r\n            // #4161: Limiting the #4139 fix scope to fund certifications only.            \r\n            if (typeof value === 'boolean' && fieldKey.startsWith('FundEssays/') ) {\r\n                question = {\r\n                    AnswerType: \"Boolean\",\r\n                    QuestionKey: fieldKey,\r\n                }\r\n            }\r\n            // only composite field submitted in scholarships is Membership \r\n            else if (typeof value === 'object' && value) {\r\n                question = {\r\n                    AnswerType: \"Membership\",\r\n                    QuestionKey: fieldKey\r\n                }\r\n            }\r\n        }\r\n\r\n        if (!question) {\r\n            console.warn(`Unsupported field key ${fieldKey}, cannot submit field to API. Likely has no Question Key mapping assigned.`);\r\n            return;\r\n        }\r\n\r\n        const AnswerType = question?.AnswerType;\r\n        let QuestionKey = question?.QuestionKey;\r\n\r\n        // console.log('=============== serialize form type and question value');\r\n        // console.log(AnswerType)\r\n        // console.log(QuestionKey)\r\n\r\n        if (value && value.IsScholarshipDocument === true) {\r\n           QuestionKey = QuestionKey.replace(`_${value.DeliveryType}`, \"\")\r\n        }\r\n\r\n        \r\n        //console.log('serialize fields for update for  ' + QuestionKey + ' / ' +  AnswerType + ' / ' + value)\r\n        if (AnswerType === BooleanFieldType.AnswerType && (typeof value === 'boolean' || value === null)) {\r\n            //console.log('bool type bool val')        \r\n            value = value == true ? true : value == false ? false : question.IsNullable ? null : false;\r\n        }\r\n        if (AnswerType === BooleanFieldType.AnswerType && (typeof value === 'string' || value === null)) {\r\n            //console.log('bool type text val')\r\n            value = value == 'True' ? true : value == 'False'? false : question.IsNullable ? null : false;\r\n        }\r\n        if (AnswerType === TextFieldType.AnswerType && typeof value === 'boolean') {\r\n            //console.log('text type bool val')\r\n            value = value === false ? \"False\" : \"True\";\r\n        }\r\n        if (AnswerType === IntegerFieldType.AnswerType) {\r\n            //console.log('integer field type for ' + QuestionKey)\r\n            value = parseInt(value);\r\n            // // console.log('value: ' + value)\r\n        }\r\n        if (QuestionKey === QuestionKeyMapping[FIELDS.SSN].QuestionKey) {\r\n            value = (value || '').split('-').join('');\r\n        }\r\n        if ([FIELDS.HOME_PHONE, FIELDS.ALTERNATE_PHONE, FIELDS.CHILD_CARE_PROVIDER__PHONE, FIELDS.CHILD_CARE_PROVIDER2__PHONE].includes(fieldKey)) {\r\n            value = (value || '').replace(/[\\(,\\)-\\s]/ig, '')\r\n        }\r\n        let additionalQuestionProps = {\r\n            Response: value,\r\n            Id: id,\r\n            Year: year\r\n        };\r\n\r\n        if (typeof value === 'object' && value && !FormSerializer.isDropdownDto(value)) {\r\n            //console.log('object value', value)\r\n            // composite fields\r\n            additionalQuestionProps = {\r\n                Id: id,\r\n                ...projectCompositeFieldValues(value)\r\n            }\r\n        }\r\n        else if (FormSerializer.isDropdownDto(value)) {\r\n            // searchable dropdown single value\r\n            additionalQuestionProps = {\r\n                Response: value?.value\r\n            }\r\n        }\r\n        const baseAnswer = {           \r\n            AnswerType,\r\n            QuestionKey,\r\n            Year: year,\r\n        };\r\n        const answer = {\r\n            ...baseAnswer,\r\n            ...additionalQuestionProps\r\n        };\r\n        //console.log(`Serializing ${fieldKey} for update...`, value, answer);\r\n        return answer;\r\n    }\r\n\r\n    static parseReduxFieldValue() { }\r\n\r\n}\r\n","\r\n/**\r\n * wrapper for API-provided program application DTO\r\n */\r\nclass ApplicationInfo {\r\n\r\n    /**\r\n     * \r\n     * @param {*} data raw ApplicationDto from API\r\n     */\r\n    constructor(data) {\r\n        this._data = data;\r\n    }\r\n\r\n    get programCode(){\r\n        return this._data?.ProgramCode;\r\n    }\r\n\r\n    get year(){\r\n        return this._data?.Year;\r\n    }\r\n\r\n    get isStarted(){\r\n        return this._data?.IsStarted;\r\n    }\r\n\r\n    /**\r\n     * is data still loading\r\n     * @returns {Boolean}\r\n     */\r\n    get isLoading(){\r\n        if (!this._data)\r\n            return true;\r\n        return false;\r\n    }\r\n    /**\r\n     * actual student deadline\r\n     * @returns {Date}\r\n     */\r\n    get deadline() {\r\n        if (this._data == null)\r\n            return null;\r\n\r\n        return Date.parse(this._data.Deadline);\r\n    }\r\n\r\n    get source(){\r\n        return this._data?.Source;\r\n    }\r\n\r\n    /**\r\n     * convenience method to check for passed deadlines\r\n     * @returns {Boolean}\r\n     */\r\n    get isDeadlinePassed(){\r\n        return this.deadline < Date.now();\r\n    }\r\n        \r\n    /**\r\n     * \r\n     */\r\n    get isSubmitted(){\r\n        return this._data?.IsSubmitted === true;\r\n    }\r\n\r\n    get isRenewal(){\r\n        return this.source === 'Renew';\r\n    }\r\n\r\n    get awardStatus(){\r\n        return this._data?.AwardSummaryStatus;   \r\n    }\r\n\r\n    get reviewStatus(){\r\n        return this._data?.ReviewStatus;   \r\n    }\r\n\r\n    get reviewMessage(){\r\n        return this._data?.ReviewStatusDescription;\r\n    }\r\n\r\n    get reviewInstructions(){\r\n        return this._data?.ReviewInstructions;\r\n    }\r\n   \r\n    get declineableRenewalStatuses(){\r\n        let statuses = ['RNWEMSENT', 'HVFYFNDS', 'RNW'];\r\n        return statuses;   \r\n    }\r\n\r\n    get isAwardOffer(){\r\n        return this.awardStatus === 'Offer';        \r\n    }\r\n\r\n    get isAwarded() {\r\n        return this.awardStatus === 'Authorized' || this.awardStatus === 'Hold'; \r\n    }\r\n\r\n    /**\r\n     * can student unapply from the fund\r\n     */\r\n    get isRemovable() {\r\n        return this.source === 'Apply' && this.awardStatus === 'None'; \r\n    }\r\n\r\n}\r\n\r\nexport default ApplicationInfo;","import * as msal from \"@azure/msal-browser\";\r\nimport store, { actions } from \"./store\";\r\n\r\nconst {\r\n  REACT_APP_B2C_REGISTRATION_LOGIN_FLOW_NAME: B2C_REGISTRATION_LOGIN_FLOW_NAME,\r\n  REACT_APP_B2C_TENANT: B2C_TENANT,\r\n  REACT_APP_B2C_CLIENT_ID: B2C_CLIENT_ID,\r\n  REACT_APP_B2C_CHANGE_EMAIL_FLOW_NAME: B2C_CHANGE_EMAIL_FLOW_NAME,\r\n  REACT_APP_B2C_PASSWORD_CHANGE_FLOW_NAME: B2C_PASSWORD_CHANGE_FLOW_NAME,\r\n} = process.env;\r\n\r\nconst policies = {\r\n  names: {\r\n    signUpSignIn: B2C_REGISTRATION_LOGIN_FLOW_NAME,\r\n    //editProfile: \"B2C_1_edit_profile_v2\"\r\n    changeEmail: B2C_CHANGE_EMAIL_FLOW_NAME,\r\n    changePassword: B2C_PASSWORD_CHANGE_FLOW_NAME,\r\n  },\r\n  authorities: {\r\n    signUpSignIn: {\r\n      authority: `https://${B2C_TENANT}.b2clogin.com/${B2C_TENANT}.onmicrosoft.com/${B2C_REGISTRATION_LOGIN_FLOW_NAME}`,\r\n    },\r\n    changeEmail: {\r\n      authority: `https://${B2C_TENANT}.b2clogin.com/${B2C_TENANT}.onmicrosoft.com/${B2C_CHANGE_EMAIL_FLOW_NAME}`,\r\n    },\r\n    changePassword: {\r\n      authority: `https://${B2C_TENANT}.b2clogin.com/${B2C_TENANT}.onmicrosoft.com/${B2C_PASSWORD_CHANGE_FLOW_NAME}`,\r\n    },\r\n    /*editProfile: {\r\n            authority: \"https://fabrikamb2c.b2clogin.com/fabrikamb2c.onmicrosoft.com/B2C_1_edit_profile_v2\"\r\n        }*/\r\n  },\r\n  authorityDomain: `${B2C_TENANT}.b2clogin.com`,\r\n};\r\n\r\n/**\r\n * Configuration object to be passed to MSAL instance on creation.\r\n * For a full list of MSAL.js configuration parameters, visit:\r\n * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/configuration.md\r\n * For more details on using MSAL.js with Azure AD B2C, visit:\r\n * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/working-with-b2c.md\r\n */\r\nconst baseMsalConfig = {\r\n  auth: {\r\n    clientId: B2C_CLIENT_ID, // This is the ONLY mandatory field; everything else is optional.\r\n    // Choose sign-up/sign-in user-flow as your default.\r\n    knownAuthorities: [policies.authorityDomain], // You must identify your tenant's domain as a known authority.\r\n    //redirectUri: \"http://localhost:6420\", // You must register this URI on Azure Portal/App Registration. Defaults to \"window.location.href\".\r\n  },\r\n  cache: {\r\n    cacheLocation: \"localStorage\", // Configures cache location. \"sessionStorage\" is more secure, but \"localStorage\" gives you SSO between tabs.\r\n    storeAuthStateInCookie: false, // If you wish to store cache items in cookies as well as browser cache, set this to \"true\".\r\n  },\r\n  system: {\r\n    loggerOptions: {\r\n      loggerCallback: (level, message, containsPii) => {\r\n        if (containsPii) {\r\n          return;\r\n        }\r\n        switch (level) {\r\n          case msal.LogLevel.Error:\r\n            // console.error(message);\r\n            return;\r\n          case msal.LogLevel.Info:\r\n            // console.info(message);\r\n            return;\r\n          case msal.LogLevel.Verbose:\r\n            // console.debug(message);\r\n            return;\r\n          case msal.LogLevel.Warning:\r\n            // console.warn(message);\r\n            return;\r\n        }\r\n      },\r\n    },\r\n  },\r\n};\r\n\r\nconst msalConfig = {\r\n  ...baseMsalConfig,\r\n  auth: {\r\n    ...baseMsalConfig.auth,\r\n    authority: policies.authorities.signUpSignIn.authority,\r\n    postLogoutRedirectUri: window.location.origin,\r\n  },\r\n};\r\n\r\nconst msalConfigChangeEmail = {\r\n  ...baseMsalConfig,\r\n  auth: {\r\n    ...baseMsalConfig.auth,\r\n    authority: policies.authorities.changeEmail.authority,\r\n    redirectUri: window.location.origin,\r\n  },\r\n};\r\n\r\nconst msalConfigChangePassword = {\r\n  ...baseMsalConfig,\r\n  auth: {\r\n    ...baseMsalConfig.auth,\r\n    authority: policies.authorities.changePassword.authority,\r\n    redirectUri: window.location.origin,\r\n  },\r\n};\r\n\r\n/**\r\n * Scopes you add here will be prompted for user consent during sign-in.\r\n * By default, MSAL.js will add OIDC scopes (openid, profile, email) to any login request.\r\n * For more information about OIDC scopes, visit:\r\n * https://docs.microsoft.com/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes\r\n */\r\nconst loginRequest = {\r\n  scopes: [\"openid\", \"profile\"],\r\n};\r\n\r\n/**\r\n * Scopes you add here will be used to request a token from Azure AD B2C to be used for accessing a protected resource.\r\n * To learn more about how to work with scopes and resources, see:\r\n * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/resources-and-scopes.md\r\n */\r\nconst tokenRequest = {\r\n  scopes: [], // e.g. [\"https://fabrikamb2c.onmicrosoft.com/helloapi/demo.read\"]\r\n  forceRefresh: false, // Set this to \"true\" to skip a cached token and go to the server to get a new token\r\n};\r\n\r\nconst msalInstance = new msal.PublicClientApplication(msalConfig);\r\nconst msalInstanceChangeEmail = new msal.PublicClientApplication(\r\n  msalConfigChangeEmail\r\n);\r\nconst msalInstanceChangePassword = new msal.PublicClientApplication(\r\n  msalConfigChangePassword\r\n);\r\n\r\nmsalInstance\r\n  .handleRedirectPromise()\r\n  .then((tokenResponse) => {\r\n    // console.log('handleRedirectPromise',{ tokenResponse });\r\n    if (tokenResponse) {\r\n      actions.login();\r\n    }\r\n    // Check if the tokenResponse is null\r\n    // If the tokenResponse !== null, then you are coming back from a successful authentication redirect.\r\n    // If the tokenResponse === null, you are not coming back from an auth redirect.\r\n  })\r\n  .catch((error) => {\r\n    // console.log({error})\r\n    console.error(error);\r\n    // handle error, either in the library or coming back from the server\r\n  });\r\n\r\nconst getToken = () => {\r\n  return msalInstance\r\n    .acquireTokenSilent(tokenRequest)\r\n    .then((response) => {\r\n      // In case the response from B2C server has an empty accessToken field\r\n      // throw an error to initiate token acquisition\r\n      if (!response.accessToken || response.accessToken === \"\") {\r\n        throw new msal.InteractionRequiredAuthError();\r\n      } else {\r\n        // console.log(\"access_token acquired at: \" + new Date().toString());\r\n        //const accessToken = response.accessToken;\r\n      }\r\n    })\r\n    .catch((error) => {\r\n      // console.log(\"Silent token acquisition fails. Acquiring token using popup. \\n\", error);\r\n      if (error instanceof msal.InteractionRequiredAuthError) {\r\n        // fallback to interaction when silent call fails\r\n        return msalInstance.acquireTokenRedirect(tokenRequest);\r\n      } else {\r\n        // console.log(error);\r\n      }\r\n    });\r\n};\r\n\r\nconst login = async () => {\r\n  console.log('login request', loginRequest)\r\n  const res = await msalInstance.loginRedirect(loginRequest);\r\n  console.log(res);\r\n  return res;\r\n};\r\n\r\nconst logout = () => {\r\n  actions.logout();\r\n  return msalInstance.logoutRedirect(loginRequest);\r\n};\r\n\r\nconst changeEmail = () => {\r\n  return msalInstanceChangeEmail.loginRedirect(loginRequest);\r\n};\r\n\r\nconst changePassword = () => {\r\n  return msalInstanceChangePassword.loginRedirect(loginRequest);\r\n};\r\n\r\nconst getIdToken = () => {\r\n  let idToken;\r\n  Object.entries(localStorage).forEach(([key, value]) => {\r\n    try {\r\n      const credentials = JSON.parse(value);\r\n      if (credentials.credentialType.toLowerCase() === \"idtoken\") {\r\n        idToken = credentials.secret;\r\n      }\r\n    } catch (err) {}\r\n  });\r\n  return idToken;\r\n};\r\n\r\nconst decodeToken = (idToken) => {\r\n  let decodedToken;\r\n  const payloads = (idToken || \"\").split(\".\");\r\n  if (!payloads.length || !payloads[1]) {\r\n    return null;\r\n  }\r\n  try {\r\n    decodedToken = JSON.parse(Buffer.from(payloads[1], \"base64\").toString());\r\n  } catch (err) {\r\n    // suppress, just return undefined if cannot decode\r\n  }\r\n  return decodedToken;\r\n};\r\nconst getUsername = () => {\r\n  const idToken = getIdToken();\r\n  const decodedToken = decodeToken(idToken);\r\n  if (typeof decodedToken === \"object\" && decodedToken) {\r\n    return decodedToken.oid;\r\n  }\r\n};\r\n\r\nconst getTokenExpiration = () => {\r\n  const idToken = getIdToken();\r\n  const decodedToken = decodeToken(idToken);\r\n  if (typeof decodedToken === \"object\" && decodedToken) {\r\n    //const timeEx = new Date(decodedToken.exp*1000);\r\n    return decodedToken.exp*1000;\r\n  }\r\n};\r\n\r\nconst getUserEmail = () => {\r\n  const idToken = getIdToken();\r\n  const decodedToken = decodeToken(idToken);\r\n  if (\r\n    typeof decodedToken === \"object\" &&\r\n    decodedToken &&\r\n    Array.isArray(decodedToken.emails) &&\r\n    decodedToken.emails.length\r\n  ) {\r\n    return decodedToken.emails[0];\r\n  }\r\n};\r\n\r\nconst isAuthenticated = () => {\r\n  return !!getIdToken();\r\n};\r\n\r\nexport default {\r\n  login,\r\n  logout,\r\n  isAuthenticated,\r\n  getUsername,\r\n  getIdToken,\r\n  getUserEmail,\r\n  changeEmail,\r\n  changePassword,\r\n  getTokenExpiration,\r\n};\r\n","import CircularProgress from '@material-ui/core/CircularProgress';\r\n\r\n\r\nexport default ({ size }) => <CircularProgress size={ size }/>","import StarRoundedIcon from '@material-ui/icons/StarRounded';\r\nimport CheckIcon from '@material-ui/icons/Check';\r\nimport WarningIcon from '@material-ui/icons/Warning';\r\nimport SpinnerSection from './Utility/SpinnerSection';\r\nimport apiClient from '../utils/API';\r\nimport ProgramInfo from '../utils/dtos/ProgramInfo';\r\nimport ApplicationInfo from '../utils/dtos/ApplicationInfo';\r\nimport { CODES } from './Utility/ProgramCodes';\r\nimport { open } from \"../store/snack/actions\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport moment from 'moment';\r\nimport Button from './Button';\r\nimport { useHistory } from 'react-router-dom/cjs/react-router-dom.min';\r\n\r\nexport const STATUS = {\r\n    READY: 'ready',\r\n    IN_PROGRESS: 'inProgress',\r\n    INELIGIBLE: 'ineligible',\r\n    ELIGIBLE: 'eligible',\r\n    AWARDED: 'awarded',\r\n    SUBMITTED: 'submitted',\r\n    QUALIFIED: 'Qual',\r\n    QUALIFIED_PREF: 'QualPref'\r\n};\r\n\r\nexport const APP_SOURCE = {\r\n    RENEW: 'Renew',\r\n    APPLY: 'Apply',\r\n    AUTO: 'Auto',\r\n    SCOOP: 'Scoop'\r\n}\r\n\r\n\r\n/**\r\n * \r\n * @param {*} param0 \r\n * @returns \r\n */\r\nfunction LinkButton({ href, label }) {\r\n\r\n    return (\r\n        <a href={href} className=\"button\">{label}</a>\r\n    );\r\n}\r\n\r\n\r\n/**\r\n * determine next actions and overal status to display for ANY proram that might be fed into this\r\n * \r\n * @param {*} param0 \r\n * @returns {Component}\r\n */\r\nfunction StatusButtons({ onAccept, status, Name, Code, awardState, onClick, errorMessage, toggleExpand, year, statusState, isScholarship = false, count = 0, isSCHTab=false, ...details }) {   \r\n    const programInfo = isScholarship ? null : new ProgramInfo(details); //TODO: use common data object for grants and scholarships so we can interpret them the same\r\n    const currentSeason = programInfo?.getSeason(year);\r\n\r\n    const appInfo = new ApplicationInfo(details?.programStatusResult);\r\n\r\n    const history = useHistory();\r\n    const dispatch = useDispatch()\r\n\r\n    function getPath() {\r\n        switch (Code) {\r\n            case CODES.OREGON_PROMISE:\r\n                return '/oregon-promise';\r\n            case CODES.CHAFEE:\r\n                return `/chafee/${year}`;\r\n            case CODES.CHILD_CARE:\r\n                return `/child-care/${year}`;\r\n            case CODES.NATIONAL_GUARD:\r\n                return `/national-guard/${year}`;\r\n            case CODES.OTSG:\r\n                return `/otsg/${year}`;\r\n            case CODES.ELP:\r\n                return `/early-learning/${year}`;\r\n            case CODES.OTSP:\r\n                return `/otsp/${year}`;\r\n            default:\r\n                return `/scholarship/${Code}/${year}`;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * links that look like buttons\r\n     * @param {*} param0 \r\n     * @returns {Component}\r\n     */\r\n    function AppButton({ label }) {        \r\n        const link = getPath();\r\n        return <LinkButton href={link} label={label} />\r\n    }\r\n\r\n    function AwardNotificationButton({ label }) {\r\n        switch (Code) {\r\n            case CODES.OREGON_PROMISE:           \r\n            case CODES.NATIONAL_GUARD:\r\n            case CODES.OTSG:\r\n            case CODES.ELP:\r\n            case CODES.OTSP:\r\n                return <LinkButton label={label} href={`/awards#${Code}`} />\r\n            default:\r\n                return <LinkButton label={label} href={'/offer/' + Code + '/' + year} />\r\n        }        \r\n    }\r\n\r\n    function AwardAcceptButton({label}){\r\n        return <LinkButton label={label} href={'/offer/' + Code + '/' + year} />\r\n    }\r\n\r\n    function RenewButton({label}){\r\n        return <LinkButton label={label} href={'/renew/' + Code + '/' + year} />\r\n    }\r\n\r\n    function DeclineButton({label}){\r\n        return <LinkButton label={label} href={'/decline/' + Code + '/' + year} />\r\n    }\r\n\r\n    const handleRemoveAward = async () => {     \r\n        await apiClient.removeApplication(Code, year);\r\n        document.location.reload();        \r\n    }\r\n\r\n    const handleStartApplication = async () => {\r\n\r\n        if (Code) {\r\n            try {\r\n                await apiClient.startApplication(Code, year);\r\n                // go to corresponding application\r\n                const path = getPath();\r\n                history.push({\r\n                    pathname: path, state: {\r\n                        from: history.location.pathname\r\n                    }\r\n                })\r\n            } catch (e) {\r\n                dispatch(\r\n                    open({\r\n                        message: e.message,\r\n                        severity: \"success\",\r\n                    })\r\n                );\r\n            }\r\n        } else {\r\n            console.warn(`Code is not set on status button for application ${Name}`)\r\n        }\r\n    }\r\n     \r\n\r\n    /**\r\n     * Source should be 'Renew' for  a renewal application ('Source=Renew'). \r\n     * #4096: 2/16/2023: Do not use 'ReviewStatus' to decide the application is a Renewal or not. Use only 'Source=Renew'  \r\n     * @returns {bool}\r\n     */\r\n    const isRenewScholarshipApp = () => {\r\n\r\n        // If source == 'Renew' will come from API when 'Renew' Checkbox is checked, 'Award letter Sent' date is set, It should have Fund account & 'Amount' > 0. \r\n        return appInfo.source === 'Renew' ? true : false;\r\n\r\n    }\r\n\r\n    // if program does not have status\r\n    if (!status) {\r\n        return <SpinnerSection />;\r\n    }\r\n       \r\n    // student has already declined scholarship. They got off the train, but leave them with a little note for feedback\r\n    if (appInfo.source === APP_SOURCE.RENEW && appInfo.reviewStatus === 'XDECLINE') {\r\n        return <div className=\"rhythm award-cta award-cta--declined\">\r\n            Declined Renewal\r\n        </div>;\r\n    }\r\n\r\n    /**\r\n     * standard display for just passing through a review status description\r\n     * @returns {Component}\r\n     */\r\n    function ReviewDescriptionDisplay() {\r\n        if (studentFacingStatuses.includes(appInfo.reviewStatus))\r\n            return (\r\n            \r\n                <div className=\"rhythm award-cta award-cta--awarded\" >\r\n                    <div className=\"award-cta__status\">\r\n                        {appInfo.reviewMessage}\r\n                    </div>\r\n                    <AppButton label='View'/>\r\n                </div>   \r\n            );\r\n        return null;\r\n    }\r\n\r\n    const studentFacingStatuses = ['HCHGCLG', 'HNOFAFSA', 'HRJTFAFSA', 'HVFYFNDS', 'PEND_RENEWALREVIEW', 'XCHGCLG', 'XCHGGPA', 'XCHGMAJ', 'XCHGNEED', 'XCHGYIC', 'XDECLINE', 'XINELG', 'PEND'];\r\n       \r\n\r\n    // all button combinations valid for first-time applicants to scholarships managed by the umbrella Scholarship Application program\r\n    if (isScholarship && appInfo.source !== APP_SOURCE.RENEW) {\r\n        switch (appInfo.awardStatus) {\r\n            case 'Declined':\r\n                return (\r\n                    <div className=\"rhythm award-cta award-cta--declined\">\r\n                        Declined Award\r\n                    </div>\r\n                );\r\n            case 'Offer':\r\n                return (\r\n                    <div className=\"rhythm award-cta award-cta--accept-decline\">\r\n                        <AwardNotificationButton label='Accept/Decline'/>\r\n                    </div>\r\n                );\r\n            case 'Authorized':           \r\n                return (\r\n                    <div className=\"rhythm award-cta award-cta--awarded\" style={{ color: 'rgba(81, 193, 176, 1)' }}>\r\n                        <div className=\"award-cta__status\">\r\n                            <StarRoundedIcon />\r\n                            <span>Awarded!</span>\r\n                        </div>\r\n                        <AwardNotificationButton label='View'/>\r\n                    </div>\r\n                );                          \r\n            case 'NotAuthorized':\r\n                return ReviewDescriptionDisplay() ?? (\r\n                    <div className=\"rhythm award-cta award-cta--declined\">\r\n                        Awarded to other applicants.\r\n                    </div>\r\n                );\r\n            case 'Hold':\r\n            case 'None':\r\n            default:                \r\n                var reviewDisplay = ReviewDescriptionDisplay();\r\n                if (reviewDisplay) \r\n                    return reviewDisplay;\r\n                //NOTE: any any state above with an award evaluation, we no longer allow student to remove the award\r\n                break;\r\n        }\r\n        //NOTE: will will assume programInfo isStarted is irrelevant, sinc the umbrella application should gatekeep access \r\n        if (appInfo.isStarted) {\r\n            return (\r\n                <div className=\"rhythm award-cta award-cta--inprogress\">\r\n                    {details.isComplete === true || details.isComplete === null //either docs are certified done or we determined we don't care about completion\r\n                        ? <div className=\"award-cta__status\">Added</div>\r\n                        : <div className=\"award-cta__status\" style={{ color: '#da3754' }}>In Progress</div>\r\n                    }\r\n                    <AppButton label='Edit'/>\r\n                    {/* TODO: Adjust edit / remove buttons. These buttons are used in multiple places and do not line up in the scholarship selection area*/}\r\n                    {appInfo.isRemovable &&\r\n                        <Button onClick={handleRemoveAward} label='Remove' />\r\n                    }\r\n                </div>\r\n            );\r\n\r\n        }\r\n\r\n        else {\r\n            return (\r\n                <>  {/*#4951: Remove the word “Eligible” from all of the scholarships listed on the “recommended” tab in the application. \r\n                    #5066: Remove the word “Eligible” from all the scholarships listed on the “Memberships/Employers” and “All” tabs in the application*/}\r\n                    {status === STATUS.ELIGIBLE && !isSCHTab && \r\n                        <div className=\"award-cta__status\">\r\n                            Eligible\r\n                        </div>\r\n                    }\r\n                    <AppButton label='View/Apply'/>\r\n                </>\r\n            );\r\n        }\r\n    }\r\n\r\n\r\n    // TODO: we need to start partitioning out the different program types form this rats nest\r\n    // consider the whole section below ***DEPRECATED**** moving forward\r\n\r\n    // NOTE: all of the scholarship references below should not be hit. Scholarships instead are handled above\r\n    return (\r\n        <>\r\n            {/*<div>is Scholarship: { isScholarship }</div>*/}\r\n            {/*<div>Total Scholarships: { count }</div>*/}\r\n            {/* #3858/SP-305, SP3-317:\tDO NOT use SENT, EMSENT, or AWD for Renewals.  We do not have an 'accept' & 'decline' process for renewals.      \r\n          Use isRenewScholarshipApp() method to check given application is 'Renew app' or not.  */ }\r\n            {!isRenewScholarshipApp() && statusState?.ReviewStatus === 'EMSENT' ?\r\n                <div className=\"rhythm award-cta award-cta--accept-decline\">\r\n                    <AwardAcceptButton label='Accept'/>\r\n                    <AwardNotificationButton label='Decline'/>\r\n                </div> :\r\n         \r\n                statusState?.ReviewStatus === 'AWD' ?\r\n                    <div className=\"rhythm award-cta award-cta--accepted\">\r\n                    </div> :\r\n\r\n                    status === STATUS.READY ?\r\n                        <div className=\"rhythm award-cta award-cta--ready\" style={{ color: '#429D5B' }}>\r\n                            <div className=\"award-cta__status\">\r\n                                <CheckIcon />\r\n                                Ready to Submit\r\n                            </div>\r\n                            <Button onClick={onClick} label='Submit' />\r\n                            <AppButton label='Edit'/>\r\n                        </div>\r\n                        :\r\n                        (status === STATUS.IN_PROGRESS && appInfo.source !== 'Auto' && !isScholarship && !isRenewScholarshipApp()) ?\r\n                            <div className=\"rhythm award-cta award-cta--inprogress\">\r\n                                {/* #3828/SP275:\t\r\n                                Scholarship with no additional requirements – once saved, Application progress should say “Complete” and remove “In Progress”\r\n                                Scholarship with additional requirements\r\n                                    1. Student adds info, hits save – change to “Complete”.\r\n                                    2. Student doesn’t have info, hits save – change to “In Progress” in red (#da3754). \r\n                                Auto selected (change to 'Complete'). Change “View” button to say “Complete” and don’t make it clickable.\r\n                                */}\r\n                                <div className=\"award-cta__status\">In Progress</div>\r\n                                <AppButton label='Edit'/>\r\n                            </div>\r\n                            :\r\n                            // Use isRenewScholarshipApp() method to check given application is 'Renew app' or not.\r\n                            (status === STATUS.IN_PROGRESS && !isRenewScholarshipApp() && appInfo.source !== 'Auto' && isScholarship && (details.docsRequired === null || details.docsRequired === true)) ?\r\n                                <div className=\"rhythm award-cta award-cta--inprogress\">\r\n                                    <div className=\"award-cta__status\">Added</div>\r\n                                    <AppButton label='Edit'/>\r\n                                </div>\r\n                                :\r\n                                (status === STATUS.IN_PROGRESS && !isRenewScholarshipApp() && appInfo.source !== 'Auto' && isScholarship && details.docsRequired === false) &&\r\n                                <div className=\"rhythm award-cta award-cta--inprogress\">\r\n                                    <div className=\"award-cta__status\" style={{ color: '#da3754' }}>In Progress</div>\r\n                                    <AppButton label='Edit'/>\r\n                                </div>\r\n            }\r\n            {/* #3911/SP-333 For renew applications do not dispaly buttons, when source = 'Auto' */}\r\n            {!isRenewScholarshipApp() && appInfo.source == 'Auto' &&\r\n                <div>{/* #3828/SP275:\tAuto Selected (change to complete).  Change “view” button to say “complete” and don’t make it clickable */}\r\n                    <div className=\"rhythm award-cta award-cta--inprogress\">\r\n                        <div className=\"award-cta__status\">Added</div>\r\n                        <AppButton style={{ marginBottom: '1rem' }}  label='View' disabled />\r\n                    </div>\r\n                </div>\r\n            }\r\n            {((status === STATUS.IN_PROGRESS || status === STATUS.SUBMITTED) && isScholarship && appInfo.source == 'Apply' && !isRenewScholarshipApp()) &&\r\n                <div className=\"rhythm award-cta award-cta--remove\">\r\n                    <Button onClick={handleRemoveAward} label='Remove' />\r\n                </div>\r\n            }\r\n            {\r\n                (status === STATUS.SUBMITTED) &&\r\n                (awardState && awardState?.isAwarded ?\r\n                    <div className=\"rhythm award-cta award-cta--awarded\" style={{ color: 'rgba(81, 193, 176, 1)' }}>\r\n                        <div className=\"award-cta__status\">\r\n                            <StarRoundedIcon />\r\n                            {Code === CODES.OREGON_PROMISE ? \"Tentatively Approved\" : <span>Awarded!</span>}\r\n                        </div>\r\n\r\n                        {Code !== CODES.OREGON_PROMISE && awardState?.ReviewStatus !== 'AWD' ?\r\n                            <></>\r\n                            : Code === CODES.OREGON_PROMISE ?\r\n                                <AwardNotificationButton label='View'variant='outline' />\r\n                                : <AwardNotificationButton label='Decline' variant='outline' />\r\n                        }\r\n                        {Code != CODES.OREGON_PROMISE &&\r\n                            <AppButton label='View'/>\r\n                        }\r\n                    </div> :\r\n                    <div className=\"rhythm award-cta award-cta--submitted\" style={{ color: '#429D5B' }}>\r\n                        <div className=\"award-cta__status\">\r\n                            <CheckIcon />\r\n                            Submitted\r\n                        </div>\r\n                        <AppButton label='View'/><br />\r\n                    </div>\r\n                )\r\n            }\r\n\r\n            {status === STATUS.INELIGIBLE &&\r\n                <div className=\"rhythm award-cta award-cta--ineligible\" style={{ color: '#F44336' }}>\r\n                    <div className=\"award-cta__status\">\r\n                        <WarningIcon />\r\n                        Ineligible{errorMessage && <span>:</span>}\r\n                        {errorMessage &&\r\n                            <div>\r\n                                <br />\r\n                                {errorMessage}\r\n                            </div>\r\n                        }\r\n                    </div>\r\n                    {count < 40 || !isScholarship &&\r\n                        <Button label='Start' disabled />\r\n                    }\r\n                </div>\r\n            }\r\n            {/* Do not dispaly View/Start buttons for Renew application.*/}\r\n            {!isRenewScholarshipApp() && status === STATUS.ELIGIBLE && (!awardState || awardState.isAwarded == false) && ((statusState && statusState.IsStarted == false && statusState.IsSubmitted == false) || !statusState) &&\r\n                <div className=\"rhythm award-cta award-cta--eligible\">\r\n                    <div className=\"award-cta__status\">\r\n                        Eligible\r\n                    </div>\r\n                    {currentSeason?.isStarted === false &&\r\n                        <>\r\n                            <div className=\"award-cta__status\">\r\n                                Application opens {currentSeason?.startEvent?.displayDate}\r\n                            </div>\r\n                            <Button label='Start' disabled />\r\n                        </>\r\n                    }\r\n                    {currentSeason?.isStarted !== false && count < 40 &&\r\n                        <div>\r\n                            {// #3965: Delete \"VIEW' button and change START to \"VIEW/APPLY\"\r\n                                isScholarship &&\r\n                                <AppButton label='View/Apply'/>\r\n                            }\r\n                            {!isScholarship &&\r\n                                <Button onClick={handleStartApplication} label='Start' />\r\n                            }\r\n                        </div>\r\n                    }\r\n                </div>\r\n            }\r\n            {/* #3858/SP-305, SP3-317:\tDO NOT use SENT, EMSENT, or AWD for Renewals. \r\n            'XDECLINE' is handled in #3855/SP-308 No need to diaplay any buttons.\r\n            { details?.programStatusResult?.Source == 'Apply' && details?.programStatusResult?.ReviewStatus !== 'XDECLINE' && details?.programStatusResult?.ReviewStatus !== 'SENT' && details?.programStatusResult?.ReviewStatus !== 'EMSENT' && details?.programStatusResult?.ReviewStatus !== 'PEND' && details?.programStatusResult?.ReviewStatus !== 'AWD' && */}\r\n            {/* Display if renewal and not in any x status */}\r\n            {isRenewScholarshipApp() && !appInfo.reviewStatus.slice(0,1).toLowerCase().includes('x')?\r\n                <div className=\"rhythm award-cta award-cta--eligible\">\r\n                    <div className=\"award-cta__status\">\r\n                        {appInfo.reviewMessage}\r\n                    </div>\r\n                    {/* Display Renew button if also not in HVFYFNDS or RWD status*/}\r\n                    {appInfo.reviewStatus !== 'HVFYFNDS' &&  appInfo.reviewStatus !== 'RNW'?\r\n                        <RenewButton label={appInfo.isDeadlinePassed ? 'Review' : 'Renew'} />\r\n                    :null}\r\n\r\n                    <div className=\"rhythm award-cta award-cta--accept-decline\">\r\n                        <div className=\"award-cta__status\">\r\n                            Decline Renewal\r\n                        </div>\r\n                        <DeclineButton label='Decline'/>\r\n                    </div>\r\n\r\n                </div>\r\n            :null}\r\n\r\n            {/* If renewal hide Renew & Decline buttons if in any x code status. */}\r\n            {isRenewScholarshipApp() && appInfo.reviewStatus.slice(0,1).toLowerCase().includes('x')?\r\n                <div className=\"rhythm award-cta award-cta--eligible\">\r\n                    <div className=\"rhythm award-cta award-cta--declined\">\r\n                        {appInfo.reviewMessage}\r\n                    </div>\r\n                </div>\r\n            :null}\r\n            \r\n            {!isRenewScholarshipApp() && details?.programStatusResult?.ReviewStatus === 'AWD' &&\r\n                <div className=\"rhythm award-cta award-cta--submitted\" style={{ color: '#429D5B' }}>\r\n                    <div className=\"award-cta__status\">\r\n                        <CheckIcon />\r\n                        Renewal Accepted\r\n                    </div>\r\n                    <AppButton label='View'/>\r\n                </div>\r\n            }\r\n            { //status === STATUS.IN_PROGRESS &&\r\n                (Code === CODES.CHILD_CARE && (status === STATUS.QUALIFIED || status === STATUS.QUALIFIED_PREF)) &&\r\n                <div className=\"rhythm award-cta award-cta--childcare\">\r\n                    <div className=\"award-cta__status\" style={{ color: 'rgb(249 161 0)' }}>\r\n                        <WarningIcon />\r\n                    </div>\r\n                    <p>\r\n                        Please submit your transcripts and proof of childcare expense\r\n                    </p>\r\n                    <AppButton label='Edit'/>\r\n                </div>\r\n            }\r\n            {\r\n                (appInfo.reviewInstructions !== null) &&\r\n                <div className=\"rhythm award-cta award-cta--childcare\">\r\n                    <div className=\"award-cta__status\" style={{ color: 'rgb(249 161 0)' }}>\r\n                        <WarningIcon />\r\n                    </div>\r\n                    <p>\r\n                        Corrections Required: {appInfo.reviewInstructions}\r\n                    </p>\r\n                    <AppButton label='Edit'/>\r\n                </div>\r\n            }\r\n        </>\r\n    );\r\n};\r\n\r\nexport default StatusButtons;\r\n","import Spinner from \"./Spinner\";\r\n\r\nexport default () => (\r\n    <div className=\"flex center\">\r\n        <Spinner />\r\n    </div>\r\n)","import auth from \"../../auth\";\r\n\r\nlet idToken = localStorage.getItem('idToken');\r\n\r\nconst Migration = {\r\n   complete: \"complete\",\r\n   required: \"required\",\r\n   failed: \"failed\",\r\n   initial: \"initial\"\r\n}\r\n\r\n// Oddly, idToken sets as undefined when logging in and somehow ends up in local storage as undefined but parseable\r\nconst initialUserState = {\r\n   idToken: idToken || auth.isAuthenticated() || '',\r\n   isLoggedIn: !!idToken,\r\n   migration: Migration.initial\r\n}\r\n\r\nexport { initialUserState, Migration };","export const AuthActionTypes = {\r\n    LOGIN: 'LOGIN',\r\n    LOGOUT: 'LOGOUT',\r\n    SET_MIGRATION: 'SET_MIGRATION'\r\n}\r\n\r\nexport const login = (idToken) => async dispatch => {\r\n    dispatch({\r\n        type: AuthActionTypes.LOGIN,\r\n        idToken\r\n    });\r\n  }\r\n\r\nexport const logout = () => async dispatch => {\r\n    dispatch({\r\n        type: AuthActionTypes.LOGOUT\r\n    });\r\n  }\r\n\r\nexport const setMigration = (status) => async dispatch => {\r\n    dispatch({\r\n        type: AuthActionTypes.SET_MIGRATION,\r\n        status\r\n    })\r\n}\r\n\r\n"],"sourceRoot":""}