From 1829d52caaeaed5fe6e64cae7a5bc2e3dd29e07a Mon Sep 17 00:00:00 2001 From: Krystian Sienkiewicz Date: Sun, 14 Jun 2026 21:30:27 +0200 Subject: [PATCH 1/7] fix(ios): manual link gets detected as auto on paste --- apps/example/ios/Podfile.lock | 6 +-- ios/htmlParser/HtmlParser.h | 4 ++ ios/htmlParser/HtmlParser.mm | 11 ++++- ios/inputHtmlParser/InputHtmlParser.mm | 9 ++-- ios/interfaces/StyleHeaders.h | 4 ++ ios/styles/LinkStyle.mm | 64 ++++++++++++-------------- 6 files changed, 57 insertions(+), 41 deletions(-) diff --git a/apps/example/ios/Podfile.lock b/apps/example/ios/Podfile.lock index 29095f503..2bf0d3ec4 100644 --- a/apps/example/ios/Podfile.lock +++ b/apps/example/ios/Podfile.lock @@ -2026,7 +2026,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: FBLazyVector: c00c20551d40126351a6783c47ce75f5b374851b - hermes-engine: b4dad6ba67535bb03c8ff1006b337cba14db16cb + hermes-engine: d80056af9dcb5ba3db80f37943f96751037c7381 RCTDeprecation: 3bb167081b134461cfeb875ff7ae1945f8635257 RCTRequired: 74839f55d5058a133a0bc4569b0afec750957f64 RCTSwiftUI: 87a316382f3eab4dd13d2a0d0fd2adcce917361a @@ -2035,7 +2035,7 @@ SPEC CHECKSUMS: React: 1b1536b9099195944034e65b1830f463caaa8390 React-callinvoker: 6dff6d17d1d6cc8fdf85468a649bafed473c65f5 React-Core: 39ee05b5798296f433dd3c3624c57a187c1510e3 - React-Core-prebuilt: 69556f895326f23c007f3a6869340045d7dca106 + React-Core-prebuilt: ff86a9cfffdf1ac6deca527352be5e6d0290354a React-CoreModules: e78bfd2617075bc0e50c689df4a29232bd72ad82 React-cxxreact: 3fe21801d46097cf74c3dff6953677bebc4a3c2a React-debug: e1f00fcd2cef58a2897471a6d76a4ef5f5f90c74 @@ -2097,7 +2097,7 @@ SPEC CHECKSUMS: ReactAppDependencyProvider: 706b65371b90b5cc797b6639e8979f2e5cecd6da ReactCodegen: ab01ebfffac5cda9140204eb872ed97c15df225f ReactCommon: 47ef95b0920948a0b54d7439f7452501eeeac071 - ReactNativeDependencies: 8a208df374583424130645685d86306befc275cf + ReactNativeDependencies: 6e31d9f8b60229e795cddfbb4d99db3858730bbf ReactNativeEnriched: 832f8a0934728c60d0577ff7b9398bcd062afb66 Yoga: e83c3121d079541e69f3c5c623faaaf933fb5812 diff --git a/ios/htmlParser/HtmlParser.h b/ios/htmlParser/HtmlParser.h index c079ccec3..2507fd800 100644 --- a/ios/htmlParser/HtmlParser.h +++ b/ios/htmlParser/HtmlParser.h @@ -2,10 +2,14 @@ #import "EnrichedViewHost.h" #import +@class EnrichedConfig; + @interface HtmlParser : NSObject + (NSString *_Nullable)initiallyProcessHtml:(NSString *_Nonnull)html useHtmlNormalizer:(BOOL)useHtmlNormalizer; + (NSArray *_Nonnull)getTextAndStylesFromHtml:(NSString *_Nonnull)fixedHtml; ++ (NSArray *_Nonnull)getTextAndStylesFromHtml:(NSString *_Nonnull)fixedHtml + config:(EnrichedConfig *_Nullable)config; + (NSString *_Nonnull)parseToHtmlFromRange:(NSRange)range host:(id)host; @end diff --git a/ios/htmlParser/HtmlParser.mm b/ios/htmlParser/HtmlParser.mm index a6e84dd6e..dab41eff8 100644 --- a/ios/htmlParser/HtmlParser.mm +++ b/ios/htmlParser/HtmlParser.mm @@ -1,6 +1,7 @@ #import "HtmlParser.h" #import "AlignmentEntry.h" #import "AlignmentUtils.h" +#import "EnrichedConfig.h" #import "ImageData.h" #import "LinkData.h" #import "MentionParams.h" @@ -415,6 +416,12 @@ + (NSString *_Nullable)initiallyProcessHtml:(NSString *_Nonnull)html } + (NSArray *_Nonnull)getTextAndStylesFromHtml:(NSString *_Nonnull)fixedHtml { + return [self getTextAndStylesFromHtml:fixedHtml config:nil]; +} + ++ (NSArray *_Nonnull)getTextAndStylesFromHtml:(NSString *_Nonnull)fixedHtml + config: + (EnrichedConfig *_Nullable)config { NSMutableString *plainText = [[NSMutableString alloc] initWithString:@""]; NSMutableDictionary *ongoingTags = [[NSMutableDictionary alloc] init]; NSMutableArray *initiallyProcessedTags = [[NSMutableArray alloc] init]; @@ -747,7 +754,9 @@ + (NSArray *_Nonnull)getTextAndStylesFromHtml:(NSString *_Nonnull)fixedHtml { LinkData *linkData = [[LinkData alloc] init]; linkData.url = url; linkData.text = text; - linkData.isManual = ![text isEqualToString:url]; + linkData.isManual = !([text isEqualToString:url] && + [LinkStyle matchesLinkRegexWithConfig:url + config:config]); stylePair.styleValue = linkData; } else if ([tagName isEqualToString:@"mention"]) { diff --git a/ios/inputHtmlParser/InputHtmlParser.mm b/ios/inputHtmlParser/InputHtmlParser.mm index bc9e5875b..05c331b75 100644 --- a/ios/inputHtmlParser/InputHtmlParser.mm +++ b/ios/inputHtmlParser/InputHtmlParser.mm @@ -24,7 +24,8 @@ - (void)replaceWholeFromHtml:(NSString *_Nonnull)html { _input->textView.typingAttributes = _input->defaultTypingAttributes; @try { - NSArray *processingResult = [HtmlParser getTextAndStylesFromHtml:html]; + NSArray *processingResult = + [HtmlParser getTextAndStylesFromHtml:html config:_input.config]; NSString *plainText = (NSString *)processingResult[0]; NSArray *stylesInfo = (NSArray *)processingResult[1]; NSArray *alignments = (NSArray *)processingResult[2]; @@ -50,7 +51,8 @@ - (void)replaceWholeFromHtml:(NSString *_Nonnull)html { - (void)replaceFromHtml:(NSString *_Nonnull)html range:(NSRange)range { @try { - NSArray *processingResult = [HtmlParser getTextAndStylesFromHtml:html]; + NSArray *processingResult = + [HtmlParser getTextAndStylesFromHtml:html config:_input.config]; NSString *plainText = (NSString *)processingResult[0]; NSArray *stylesInfo = (NSArray *)processingResult[1]; NSArray *alignments = (NSArray *)processingResult[2]; @@ -81,7 +83,8 @@ - (void)replaceFromHtml:(NSString *_Nonnull)html range:(NSRange)range { - (void)insertFromHtml:(NSString *_Nonnull)html location:(NSInteger)location { @try { - NSArray *processingResult = [HtmlParser getTextAndStylesFromHtml:html]; + NSArray *processingResult = + [HtmlParser getTextAndStylesFromHtml:html config:_input.config]; NSString *plainText = (NSString *)processingResult[0]; NSArray *stylesInfo = (NSArray *)processingResult[1]; NSArray *alignments = (NSArray *)processingResult[2]; diff --git a/ios/interfaces/StyleHeaders.h b/ios/interfaces/StyleHeaders.h index 1a16d3819..aca5d4a3c 100644 --- a/ios/interfaces/StyleHeaders.h +++ b/ios/interfaces/StyleHeaders.h @@ -4,6 +4,8 @@ #import "MentionParams.h" #import "StyleBase.h" +@class EnrichedConfig; + @interface BoldStyle : StyleBase @end @@ -28,6 +30,8 @@ - (void)handleAutomaticLinks:(NSString *)word inRange:(NSRange)wordRange; - (void)handleManualLinks:(NSString *)word inRange:(NSRange)wordRange; - (void)applyLinkMetaWithData:(LinkData *)linkData range:(NSRange)range; ++ (BOOL)matchesLinkRegexWithConfig:(NSString *)url + config:(EnrichedConfig *)config; @end @interface MentionStyle : StyleBase diff --git a/ios/styles/LinkStyle.mm b/ios/styles/LinkStyle.mm index ef600c6c4..8473bfc35 100644 --- a/ios/styles/LinkStyle.mm +++ b/ios/styles/LinkStyle.mm @@ -326,28 +326,10 @@ - (void)handleAutomaticLinks:(NSString *)word inRange:(NSRange)wordRange { } // all conditions are met; try matching the word to a proper regex - - NSString *regexPassedUrl = nullptr; - NSRange matchingRange = NSMakeRange(0, word.length); - - if (linkRegexConfig.isDefault) { - // use default regex - regexPassedUrl = [self tryMatchingDefaultLinkRegex:word - matchRange:matchingRange]; - } else { - // use user defined regex if it exists - NSRegularExpression *userRegex = [self.host.config parsedLinkRegex]; - - if (userRegex == nullptr) { - // fallback to default regex - regexPassedUrl = [self tryMatchingDefaultLinkRegex:word - matchRange:matchingRange]; - } else if ([userRegex numberOfMatchesInString:word - options:0 - range:matchingRange]) { - regexPassedUrl = word; - } - } + NSString *regexPassedUrl = + [LinkStyle matchesLinkRegexWithConfig:word config:self.host.config] + ? word + : nullptr; if (regexPassedUrl != nullptr) { // add style only if needed @@ -378,21 +360,35 @@ - (void)handleAutomaticLinks:(NSString *)word inRange:(NSRange)wordRange { } } -- (NSString *)tryMatchingDefaultLinkRegex:(NSString *)word - matchRange:(NSRange)range { - if ([[LinkStyle fullRegex] numberOfMatchesInString:word ++ (BOOL)matchesLinkRegexWithConfig:(NSString *)url + config:(EnrichedConfig *)config { + LinkRegexConfig *linkRegexConfig = [config linkRegexConfig]; + if (linkRegexConfig == nullptr || linkRegexConfig.isDisabled) { + return NO; + } + NSRange range = NSMakeRange(0, url.length); + if (linkRegexConfig.isDefault) { + return [[self fullRegex] numberOfMatchesInString:url options:0 - range:range] || - [[LinkStyle wwwRegex] numberOfMatchesInString:word - options:0 - range:range] || - [[LinkStyle bareRegex] numberOfMatchesInString:word + range:range] > 0 || + [[self wwwRegex] numberOfMatchesInString:url options:0 + range:range] > 0 || + [[self bareRegex] numberOfMatchesInString:url options:0 - range:range]) { - return word; + range:range] > 0; } - - return nullptr; + NSRegularExpression *userRegex = [config parsedLinkRegex]; + if (userRegex == nullptr) { + return [[self fullRegex] numberOfMatchesInString:url + options:0 + range:range] > 0 || + [[self wwwRegex] numberOfMatchesInString:url options:0 + range:range] > 0 || + [[self bareRegex] numberOfMatchesInString:url + options:0 + range:range] > 0; + } + return [userRegex numberOfMatchesInString:url options:0 range:range] > 0; } // handles refreshing manual links From c7ca384a5dff7bb31247cc4776d1847e6bfc97a8 Mon Sep 17 00:00:00 2001 From: Krystian Sienkiewicz Date: Mon, 15 Jun 2026 16:24:30 +0200 Subject: [PATCH 2/7] fix(android): manual link gets detected as auto on paste --- .../common/parser/EnrichedParser.java | 34 ++++++++++++++----- .../common/parser/EnrichedSpanFactory.kt | 1 + .../enriched/text/EnrichedTextSpanFactory.kt | 1 + .../EnrichedTextInputSpannableFactory.kt | 3 +- .../textinput/EnrichedTextInputView.kt | 4 +-- 5 files changed, 32 insertions(+), 11 deletions(-) diff --git a/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedParser.java b/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedParser.java index 02d52f706..39dcfef8c 100644 --- a/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedParser.java +++ b/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedParser.java @@ -66,6 +66,11 @@ private static class HtmlParser { } public static Spanned fromHtml(String source, T style, EnrichedSpanFactory spanFactory) { + return fromHtml(source, style, spanFactory, null); + } + + public static Spanned fromHtml( + String source, T style, EnrichedSpanFactory spanFactory, Pattern linkRegex) { Parser parser = new Parser(); try { parser.setProperty(Parser.schemaProperty, HtmlParser.schema); @@ -74,7 +79,7 @@ public static Spanned fromHtml(String source, T style, EnrichedSpanFactory implements ContentHandler { private final String mSource; private final XMLReader mReader; private final SpannableStringBuilder mSpannableStringBuilder; + private final Pattern mLinkRegex; private static Integer currentOrderedListItemIndex = 0; private static Boolean isInOrderedList = false; private static Boolean isInCheckboxList = false; @@ -432,12 +438,17 @@ private static void pushAlignmentMark(Editable text, Attributes attributes) { } public HtmlToSpannedConverter( - String source, T style, Parser parser, EnrichedSpanFactory spanFactory) { + String source, + T style, + Parser parser, + EnrichedSpanFactory spanFactory, + Pattern linkRegex) { mStyle = style; mSource = source; mSpannableStringBuilder = new SpannableStringBuilder(); mReader = parser; mSpanFactory = spanFactory; + mLinkRegex = linkRegex; } public Spanned convert() { @@ -602,7 +613,7 @@ private void handleEndTag(String tag) { } else if (tag.equalsIgnoreCase("codeblock")) { endCodeBlock(mSpannableStringBuilder, mStyle, mSpanFactory); } else if (tag.equalsIgnoreCase("a")) { - endA(mSpannableStringBuilder, mStyle, mSpanFactory); + endA(mSpannableStringBuilder, mStyle, mSpanFactory, mLinkRegex); } else if (tag.equalsIgnoreCase("u")) { end(mSpannableStringBuilder, Underline.class, mSpanFactory.createUnderlineSpan(mStyle)); } else if (tag.equalsIgnoreCase("s")) { @@ -862,12 +873,19 @@ private static void startA(Editable text, Attributes attributes) { start(text, new Href(href)); } - private static void endA(Editable text, T style, EnrichedSpanFactory spanFactory) { + private static boolean urlMatchesLinkRegex(String url, Pattern linkRegex) { + if (linkRegex == null) return false; + Matcher m = linkRegex.matcher(url); + return m.find() && m.start() == 0 && m.end() == url.length(); + } + + private static void endA( + Editable text, T style, EnrichedSpanFactory spanFactory, Pattern linkRegex) { Href h = getLast(text, Href.class); - if (h != null) { - if (h.mHref != null) { - setSpanFromMark(text, h, spanFactory.createLinkSpan(h.mHref, style)); - } + if (h != null && h.mHref != null) { + String linkText = text.subSequence(text.getSpanStart(h), text.length()).toString(); + boolean isManual = !linkText.equals(h.mHref) || !urlMatchesLinkRegex(h.mHref, linkRegex); + setSpanFromMark(text, h, spanFactory.createLinkSpan(h.mHref, style, isManual)); } } diff --git a/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedSpanFactory.kt b/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedSpanFactory.kt index f61ef8d60..38fb167b1 100644 --- a/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedSpanFactory.kt +++ b/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedSpanFactory.kt @@ -37,6 +37,7 @@ interface EnrichedSpanFactory { fun createLinkSpan( url: String, style: T, + isManual: Boolean, ): EnrichedLinkSpan fun createMentionSpan( diff --git a/android/src/main/java/com/swmansion/enriched/text/EnrichedTextSpanFactory.kt b/android/src/main/java/com/swmansion/enriched/text/EnrichedTextSpanFactory.kt index c2e1db3da..f61ac812b 100644 --- a/android/src/main/java/com/swmansion/enriched/text/EnrichedTextSpanFactory.kt +++ b/android/src/main/java/com/swmansion/enriched/text/EnrichedTextSpanFactory.kt @@ -38,6 +38,7 @@ class EnrichedTextSpanFactory : EnrichedSpanFactory { override fun createLinkSpan( url: String, style: EnrichedTextStyle, + isManual: Boolean, ) = EnrichedTextLinkSpan(url, style) override fun createMentionSpan( diff --git a/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputSpannableFactory.kt b/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputSpannableFactory.kt index d18e16c00..fadeb6e1b 100644 --- a/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputSpannableFactory.kt +++ b/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputSpannableFactory.kt @@ -40,7 +40,8 @@ class EnrichedTextInputSpannableFactory : EnrichedSpanFactory { override fun createLinkSpan( url: String, style: HtmlStyle, - ) = EnrichedInputLinkSpan(url, style, true) + isManual: Boolean, + ) = EnrichedInputLinkSpan(url, style, isManual) override fun createMentionSpan( text: String, diff --git a/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputView.kt b/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputView.kt index cdcad4e2f..015d5db4d 100644 --- a/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputView.kt +++ b/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputView.kt @@ -413,7 +413,7 @@ class EnrichedTextInputView : val normalized = GumboNormalizer.normalizeHtml(text.toString()) ?: return text return try { - val parsed = EnrichedParser.fromHtml(normalized, htmlStyle, spannableFactory) + val parsed = EnrichedParser.fromHtml(normalized, htmlStyle, spannableFactory, linkRegex) parsed.trimEnd('\n') } catch (e: Exception) { Log.e(TAG, "Error parsing normalized HTML: ${e.message}") @@ -426,7 +426,7 @@ class EnrichedTextInputView : if (isInternalHtml) { try { - val parsed = EnrichedParser.fromHtml(text.toString(), htmlStyle, spannableFactory) + val parsed = EnrichedParser.fromHtml(text.toString(), htmlStyle, spannableFactory, linkRegex) return parsed.trimEnd('\n') } catch (e: Exception) { Log.e(TAG, "Error parsing HTML: ${e.message}") From 056004f83e27f3fb76a52a78a7b9bb5e1b9d8185 Mon Sep 17 00:00:00 2001 From: Krystian Sienkiewicz Date: Mon, 15 Jun 2026 18:17:22 +0200 Subject: [PATCH 3/7] test: links parsing and detection --- .../flows/link_auto_detection.yaml | 17 +++++++++++++++++ .../manual_link_not_matching_set_regex.yaml | 17 +++++++++++++++++ .../android/link_auto_detection.png | Bin 0 -> 5591 bytes .../manual_link_not_matching_set_regex.png | Bin 0 -> 5353 bytes .../screenshots/ios/link_auto_detection.png | Bin 0 -> 6750 bytes .../ios/manual_link_not_matching_set_regex.png | Bin 0 -> 6149 bytes 6 files changed, 34 insertions(+) create mode 100644 .maestro/enrichedInput/flows/link_auto_detection.yaml create mode 100644 .maestro/enrichedInput/flows/manual_link_not_matching_set_regex.yaml create mode 100644 .maestro/enrichedInput/screenshots/android/link_auto_detection.png create mode 100644 .maestro/enrichedInput/screenshots/android/manual_link_not_matching_set_regex.png create mode 100644 .maestro/enrichedInput/screenshots/ios/link_auto_detection.png create mode 100644 .maestro/enrichedInput/screenshots/ios/manual_link_not_matching_set_regex.png diff --git a/.maestro/enrichedInput/flows/link_auto_detection.yaml b/.maestro/enrichedInput/flows/link_auto_detection.yaml new file mode 100644 index 000000000..e468d4699 --- /dev/null +++ b/.maestro/enrichedInput/flows/link_auto_detection.yaml @@ -0,0 +1,17 @@ +appId: swmansion.enriched.example +--- +# Verifies typing a URL directly into the editor +- launchApp + +- tapOn: + id: 'toggle-screen-button' + +- tapOn: + id: "editor-input" + +- inputText: 'swmansion.com' + +- runFlow: + file: '../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'link_auto_detection' diff --git a/.maestro/enrichedInput/flows/manual_link_not_matching_set_regex.yaml b/.maestro/enrichedInput/flows/manual_link_not_matching_set_regex.yaml new file mode 100644 index 000000000..2ca695be8 --- /dev/null +++ b/.maestro/enrichedInput/flows/manual_link_not_matching_set_regex.yaml @@ -0,0 +1,17 @@ +appId: swmansion.enriched.example +--- +# fix PR #640 +- launchApp + +- tapOn: + id: 'toggle-screen-button' + +- runFlow: + file: '../subflows/set_editor_value.yaml' + env: + VALUE: '

example.com

' + +- runFlow: + file: '../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'manual_link_not_matching_set_regex' diff --git a/.maestro/enrichedInput/screenshots/android/link_auto_detection.png b/.maestro/enrichedInput/screenshots/android/link_auto_detection.png new file mode 100644 index 0000000000000000000000000000000000000000..8c8c11173b0b29265a2284879c07f596159e2be9 GIT binary patch literal 5591 zcmeHLXH*mGx<*kc(l$yF6+}frnuvgiH0fwSY6w+80s<1MbfSnLT|i({qaXxAC-kmt zU{gZx5F#BCiV#9*NzQQ3y63EQ*IoC={eAw-J2Pu$zHi>|d7tNbzsMJQTCB``%ye{g ztUB82hIDlFOThUD#pHnlVfA#*II_C|+_vJ#j1vx5JWGi9h`1O(F zlo79i!0kXu_x8ZdAZ4On#2hixSAf_E)9cUR0EVS|nRkvze|qxvM)7G(x%r>)|4%{t z%{Pi~dUaEpn~s--7*a=lM$<4rQq@>&uXFoLkvqbYnfiCz@)`P|bad|o!^_#CXA^^> znF*Cu`&H>&r%y5gPaaZIa7Evh+&1f|??cc4I$jD37PsFN;?ceH=Fi(Y!9nvNb_km(xSTHrpjY3`LNehBj0c2i3trqp9kihk|LIsrEt97 zheTik#zow=+++z)#(YNK6i*)5&PRB5=0icrCYWg%0_DRtOu5-AZld@t1n%7IDtGv* zlKRbi*0A2eo%R=St6XMeKBn0lTX(Pzo-`ohC1mXMfD=VU4DH{@OM`}9p@6Y=Evy_LMTkH!Z zlCoI>h99KN_R-PZ5L0e%2&31zSBso0ZDr81(JbW?5iBdt>sy<|PAEb#yvUV|TR7el z+vW-~D>B4y!M&Rsihky3vwASPqsPOf7LatV@Q=t_nfa_-SC=j^NqG@h*evAxf*C6j zMR8@rjRN)VOFJ=L*krw(9(z&JLiue;-Kqd5qS}^Bfy2ghg^j?WdAv>daHpY3COCtK zvHwS9@vEs=7dP)R5ci>_DX-50QM4sLE^3^)UPaGgYswNW|0T%wc(F#gL2h2mGnRU^ zXd~pEj(y5H?Egu(B}u)3l`~X964$uo`X~0GhkOtY2B7d4rnY=;Zif0-&D~k$MQrq6 zjb&``JTkDlhD?judx3lT<$R5NCe31Am+yACai3&Xw@h! zSbwO{rb>gq*QdMSC(Wx(#)1OYjL?Ui@&y{_qi2hJBt1))GBYSLA3XS*x>L{8(_;zV zlDXjc6qpi}R>$AcDhHInryfMP#OuYvP5nZ|np|14zbf@?BntW%zsuhOor$Bq;S6%hrz^ZPI#?0DDZHLJ%5}~RT`9) z$^2TTAGzc6jE7A81xh>uP);Jn=<>;k2c`!}d$@(y`+IF4%}X@5`L*!l+Q~c63v_f9 zzwZ`5L%mS$7ZOnC>k`xX=}$ZP+vHY}q$vSJ&@TbI_>tQh1Clb1A?r0GGkrHfM!q9H zMWtT%5ZwWtPGdxjcz5mJw7K%53p#n45H-gSN`?;OrI1S_ckY}sDn7<$u1*iEtC~i| zp4D=+L3-;mYId`;g}fNQ7II%l(us9wUc#N#gg2(If zalLlFxU;l>H>*<0rL)c}JORedCH8>X+X$VH@8Dl7?`XH+H%(69|JYg3lxJCjuNJV8 z&ae_BVVdMHQ7#a8Trg-L6kXEa2LarH-g zUuIebOt`pCfI6@MAnK(s@osUEV0n`7bJ-cY6mSM|_}zDR^kJe+2`$-3S`uzOba-=2 zs9J1Hj1~2|%wX|nJ5>ag07ID<^)bgPIoYZ&du+X)=SkX5FtC@EdUs-m>XE@153~PBR*Bz>&!@mD9^v47Eap10Bu9j(MlcP0NLzz8cjd)S9mFSO_zwp81Kshzz3Sb9%5#`ic3fxHfZ-D{7C-}uaZK}Z@ zdv$iPGm#y8cKYkb#tEDv2k&S7lvFWar7PKwnp$$_HaHlcl&_ybs_3IEHnaI(-5ZZytJqP)p^RynZ&ZT{u1IPpEsIUJd+i&gU zTS3x2yk2#tp{Tz;4AFX6+b+cL7a6rzMp_;H4L?lz-av5qJf5ILIC>Zt_ zLRb2{^F3l3)L98zW*gkkw40Ay@Xg>MD!nqTk)BbPRocIsAo>>#BOGj>ao3~5fZJ`P1P?iIf7sazBiY2*;n)0BdjX(whJ1RCHhG}04x0Km!Fyh*Kv(PFO<_tk? z82Uf+S94Sggav|az&I6z7(TkI8W;<3FLQx;%9(MLp-QFE8O7x$AS)7tCu@7F3#kgK zjrKrRx=yq5*H2n`DM4UOc`E3^;j7(ZE41-Bea03GgQxY7;K+dEqfdYRfe-%7X`99F zpa`;p+K@uJbk>tbBk*Mgv>Bn@m6IMhPtVbZUn<4sTI(9iW(tNt+8Mu$t&ht~8;eiZ zrfefbqqZj z8d%mMOnq7{Aqs(3Y3^pkwi-0g=4v(7uD$J8RYh<<#M?NA%kV~QPXNS4XZH$b#^WGP zLu5EOj~fHTnoZ@GAw(x3oM&9d+!KHrL94mv@N!{r3cs_15(8zyZ$#0LM>f9hh~ivP zv)|2eJ%PPWGHYqW+2#D7-h!IRx^Pz0nB%VlRgaW>nx?M3iFN}A@$d0?0tp#Z9)y{y zOaFUpA2W6*$qG179MBBSW(kkU9$UwmeiZUg`-!;Nhp=Bcp&ELa>x8Y(OMCeEvd1)E z%iX&2ZLlGbZs(W!Pu*E!hMW)Zzrm@$8MMF#6>J~@a-)t zsk(*iY2O=@VeE%UD;y;^AL@{6OXQ#h*P>FKvQjdVOg+V7f2LX(8kw1bf;GXexz~>_J_( z9s33l@KQ?V6t^zC`4Au`s8@l`)jNfD)t5)P{`5)LS*H;m1dyD@G(1}&JUwMWx2E)P z15MLUa@&T+CS;@?^Y1;YyJM?pJ@F84E#oU!B&c86R6&l_wkL~Ph;CcMYf+hK$2iCz zmwloyY!f*c`$d*q!3%X#hycJ(9TnLi8@q~$fdiXa=`y6_TpU55lk%I=kamVnB_@cG zP)0dOC*BG&9u|)DwMG6WY;J=dCw!->8$NXg1;#=y>k1sqi*d#P`U=g`d=NIIfw*>u zQ-FwRWSBEK4>;#3#V-p^i$hw{{2)fQ7pAS&br=3?t|`quN=YSis-nHOECi;&jr#CT zv9w1(U&ik&RHGTyQQ>N^8q6Q2H11$Gt)5F#p_~cU%~Tl2CK#p+4`Xwfm*SGqvEWIrp)MCtt4D85{Cw^mtR+HnQ&7wfHXZN?BsQJ9Dv*h44A!nkQb z%^sZF@)}|uXdcT~FSOT`&GCFGN%nanC3WddQ}TYPz?P@};FYd_`DsCbt&PfNYv+{| z4b{y%ORqN;dL~UNhXUQNv6hbX(TvWmAsdrhf84_h$EmDU@dF~0f%*0}3!4|EEO9jH z%2rJs4KO(w$fZ5Z_>kV10d&Wv$@M()QGj|CW~R%G9WDVqSYP$IvorcIu+?n4!EC>8 zHkdT8yog1@L_yN|~<$fRE5aWXcsS9m0 zk@=Sv$EmP}7{JQEl#TGJ+9`OYh3uWsYLU%oU*8}!5h5BnLvakV^ad=6C0X72z#`w* zyx%xhH8ESa(i!&aWnvQME(VGTk77OQUCq*v-I?uQ9km}#?lOIhh{$@Z`4may00(f% zUQWl%7l@;}H(0@N5TG)d2G~j%R|yx?OIRdD1r9rE-eT=$%FI>__QklNMIYO-Xm{!Dnl^s3OIP{cu`-qCA$GBz}asNrAjpRmGGxLuG+AMeq1_Q%V+ z8D4XO%bU)ng{~SBHs7VjZL?l0+#={pJWDxftac_)k0_O#XyM8_1OwB8Nr?&Yw#-9s z*^R;}^l6t@uotx#+7Q}1eb{Cq&?0o&?=tq%%GrQjo*QES+~p~B;T!Kw?=>?s3*WV) zYMlX0L_@wUmXhi&CMKrlcqQS{&y#py59zlzsQqZDGxzkazZ5MO_{0;dk$-;bZI};m i*=G2k@PDR&c4k7!{HiNMZMO#hW-OEJ<56j literal 0 HcmV?d00001 diff --git a/.maestro/enrichedInput/screenshots/android/manual_link_not_matching_set_regex.png b/.maestro/enrichedInput/screenshots/android/manual_link_not_matching_set_regex.png new file mode 100644 index 0000000000000000000000000000000000000000..b0dd40262564c3f0d38acc13f0b636edca47a6e9 GIT binary patch literal 5353 zcmeHLXIN8N*UgNhAR|o$h9-=HC?KJC$c$1&VCbEQCG;*W5Kuu;`hfHR3erNAP=pW| zVWdguB(#7KdO|`AC8506d1vPP|NVad+;gAjo_)`~d#|?F%OS=IkVg>TW;>(ez`32{qvu6&+?r8#KL8!!*y0S|JS|b zLqt?~H)%33#2@iAyk#d6mwjP!2fH$hWpUNs57_g0!wIbZG`+B&4;Voc&uTepdb`4n=jQED2Vw`W z0kJVbK-u#3ZS`$g$v~`DG7!s!2SVUiT!dYIt~>(*?P_+YcigsR0fAP-8e{0|CF{5q zWw2`N{kzL=UawtpeLToeq>UyR@f&X#!^(~Nv$LAj0z)!riW;|Xv^sy>?73}-WcOx= zK}FS2V|8PXyEA*Y?hRx~v+T{cab^lR)U7P!`*GY$igF%kJP)2gx|ZFwUH;wVZGwX zpEXPB-p(?-*Y~YH*`&(ja8y;tAX}aqtp+?LSj~S!XKtd+1gmouJx#NozIEQAW+N1b z&_ror58Ws8uJl~E$Q9nb8yqLT)+cpwV6m`}@Y0z&oF5l{_jyCxVL7>Uc9!0V8M!&@ z2ak64x`Dc7{y9~6iAQaK7S|pQ+fkqnBfqoBcbps}l;uib6P)!%CPfsO5dH zPLGwf9U{9qdwF%dh(?L*##RZq3_MdyZN}lg4^v$Ofkdx{3E>|OcA-{hbOm$O8&Mzn zW+qIxEeaA5Ncr9uOsV}`o*Yjc!Fgi)xqx!9^ykXWL$MMg*#MC{L&~>2?aNy8LzGO@ zZw*47M;#U5({B5$aAwP;yrQrV^f5Pt$D_vk^-Sk|5jgDfJtmYo1hN`^>n?}0N zM5Ws#{3@i6N-oPO?#?us(E4;3c5gjPygQ>u{8N+eTwl*IiBVBED~Da$Sg~9x!=P)Z zp+S>dkGIb)fncYq4htoc86-{rjhJQ|h?cDp@0&~HBkA11zWj#jP$GV$ifmc~^$Y#< z_0LZz^C_cV@Oa}`PUj)f#x}}QA>1@|Z0>m8>G+l=H#5dDyHfQ-hnjm};4;Ugx(-;D zS~Ev&tr|!kT@3Isqh4*Em@seA)k|?E)pzH`kLnNoQ(0a-eRDseW9Lxm5cZ-VMw91( z_RRjfNkr@qqDoUz8qViiKHhE*m*hSIfQjyCM@`#F$&32@0ZBeaFY3Lvn{TR!$W)i? zHCJ))&Ea|0yfJy;T6FXyq!Bvd^JZL;uuAq`)Z#D_xDM%Yd1QHX%En7f?~-EVP5maJ z18E{PCI?2Q425A2Tg+~{*j#)E2agmg6eSAiAGjP34|ow0G!}kLmVN^DG7y>z^dF3O zfF^9u31pJxupvvm=^i`X53V@a)DIk&rdAl+EM3)4?{yKu!pF+|L;nWuCA@g0CO{*J zhzlk{LhH^Suazqril?_$gu$AiM*3d_-F?gI)L52(I(w1bs^*8S9hE`Bvv=(fb{=-? zT99x_GiUanpcj3ES(Y1bL~&_422DtBOVxl0q`G=-LFQ#guq^q=#0gTIc@`@@OsX3_ zfgjYQ+TmI>M!>~nsV~to;%o|)knQY^=VGv9t#eKbg^G4`+8+m&VD(Y$h_uf-CGh_ziV|;Fr>Sr z^p%VG7M<$_U1^m?c+>rAcL z6(Tim|Dq+M<(=Ujt0A+3m2iW+Hj{>|gDNNAY-06{wKLSm+HLpqPXUWcI3?H%7ywf% zWQ6u4CHMuM$QP2!Bco#PyGl@?x(dI%gva>8h>NV_r9UnvG;<#0uiKNyeB&uvtM=EU z9V5%qWaSWrlN)RA&w!r3TKv^^umxHCKwp*9VfPTSU#_ecOwXFEdaZV;NRmaI1LakT ze4}lMl~)KaVcsd`yoU(zf7EAy2Fo_F8wtRIS*8H4@U*v(tk4=m0FO}%wD@)v%$ev0 zN3)n_kA)CsRB2-XL_z{tJ6omTIpOaTJLPAOS43-ESj!w4XMJbAF1Q$Q`_^_?1c{Wm zk*N19HVv>jS5sMB5Md_)JQ{Hx@%>aTOM~?VJE5fCIJcRHdj*gw@B)9n<_y1`IcAbC zYr5o-i5%w4T9enQ-&$lD3@2UMu>yZ~B5);6kk{|s6qhF(gjsLBv>c(D5|KjE;T z_&~l2gkg#jrc;z=mUv&2*7_r(p@6yG@s}WR_eR%h18Nv2>}gtMe8Z5nwA|R5uUc9E z!q~{Lyta2MDrD-9gOuba6#F0x`f!DQNIEU`Msu|r5%t^(fX{)=NxN7r>Jt>`^UZem zeFCGtj@L35e5_{Zw_ShMFN}+>ULTI8&m|q-;Dq@VGS+P|jXah^=nLaQU7cA4mY zs_bf%VNV;!-{GEr8%Qe zv6^fXGB?i=8=0&*_Rw}_SHGtQf}LHZ`~8<&qLpOmtHAcEkb5*gpQ8Nsu-OS&WR(z5 zL;xiLw3c{Spe@vW+74iO`BWy#$(+@lIu z_o(atG7SJSP8eXgkqH|*eLVBUPEXRy#+PQ(dgV^4RbAlSY^BvXJLdgl`6IVeeUF$;-*qxGDC%|UzbHN?Kd-T(Ojxyj z0oH)>L=>MBL8{tbB~4>yt!s2#^+L9E^BMa(fN1jUN=XKp{;55Gd0GfRH*;7rDcmta zG8(t8V6*1O&d1Pw^6WZQbmz(t#GTRXUlC#3MoQ0*rm~1Xw;~yJQ+>xx0-O?n9n}%z z?10aXw{D)nAtpn@3K)gRZWV26#7*-ci-xvy$MHwtejIh;n}f*BR2Zaih-H3G{4K4;SWMAzowzZ8;oF9 zPVame*E7UWIiJJganxTt*$8D1ay#Lcp>w8Ur3T~s$z ztyo_BN4jp10Y48v>@&7LxSk_Hq)boMBBZO*Z}{{;_H-x$Jw5u(PJUyr%t_!nL^A9i zF2^HyuDxWhQPk&YoT%A}wD@`32fJ_j zZvswUA8Jmi=iH0DFa1Y~TXBAZOzxM{b?nP8?3v=Yis2b(_RU_e4(fTvmG1XRcA<~v z`3|A|5XHIIYi1`_TtE-BD#p1S?~n?N^lVP20oWhZZw0_5N=)AzR6B=E%^;iK;hPSQ zL~1Ba^d;Hs_UX%`8*Vk|86zC9&R_qhp+${}jHP_&-EHNz z=-?jw&(v=JuKdLDofgIBm=s)*LebJ)z4pyl+jArUcpeFF|FLlVcwJzB!ku(S$ z)ncoXe#EvfOv|n9qa{E~fh{0Pb=4sl0`oUoG{B8FS z6|&!Fl-pS_yY_;*uNiiw9xCS%FYi{POdVdg?H-t;!7(wZKS=mH_8aZBX&%F!*m&*050^9;L@SfpLS>5q@|UTmLP zIM*`>Ybt3dQrh#PcxpHY(hN-2Si&JG*W{Yc10A5Y#1Gf==65Rh;^kh}Z#%o`kN?y` z1fLG*k_ExE*vTMXgHM9r$MtZ4q|_Z<9fv1UTW>vnOn(g1&s?`(7kkp;TOlZ;;+XL& z!#4HCp*Az1@x4@$=&60AiIqv2;7Cwa&_y{TpC7`!UO9LhRb7U*1`ShKOIph9r2)vvpZrxhz~=r8*G0-3aO>Ns}2+5R7P_c&M(oI zeuc;hSsDl8lG7nRH;Gq$Ws9YCXYXfem`e&s?pae3!LKtzBw}+ylxS^wn;w6Of8C8r zlG)nTZwD7&qgY+EzUTgSnsN0`@=JQEpm_ZiH%8N096$%BU*fZ1CxXDV-;4D-TkfVP z3T(_z136l5mjkw$c5uZ?J_7G3{B4ztW7YOdD>97wz5SnxJ99sQK(C~=1n|QOwrIfp zaq+W~x!t0cB6;wK-vf&F^wcSa&N>!}LFnxzJj-P^p-j z6%Oi##>7bX@`W20XlQ6IL-e%G zXlUrHfbXdDw7{oW`vn0Sni~QT?K>7v9mrF`Pb^0oKdn8a$uTNq%}Mew6}d=eE`5Jh z;*~|N=fLeB&sau_gmu8Swx{o&r=t~Q(n|TP78P~rlGFJpo=fyRZ<&~79cT9YHV@%7 z%cYxEL_6~GeyVwm>i%RPC4MeVYiqk|E8qnIv7Zqb)ay?TS26DfodV+cbVKI&KvQv6 zfa&=7+JyFaU2*>Zm;Xzw#lV>n?A-+Q)8tzBq=qnG2|l|A46NZuJwyYZT+MtW8@(QXYt+}!3jVl#R> z%W(fgYJx`1d?gXzc(^cyNKQ>~&FkD&F@5Lh={pu05cuFu#sTTKL5FpS+Cs@(c~l6Pa-Fh(X2zMq61u1UheEPjW>ygtC%NpPc)|$PkmO;j!GC zHpRtY!Brcun$-JgUv|~o*GrL4EtgY2Q0I$a8&|Q0`-cAX{01z2sI)qNc-Mq^?TVOg zZF6EZ2ixS1*Uy5l+ei!JWIo4nPAPK!3#FcMRow(e@1QTf5VLaQ`sqgbkv)O!^h$4? zvEUv1UP{K!bWEd^yu)J+@iNiy;N`CMn2^drxWE?N_irG%vr5VhVUp`$#=!)E`s3zv z`THGa?xq=L&n=s!r1C}Xh6{=^3-w}BYJ=Ys_47I+ZhaY>mJ8{5C&{S_K2*C;L!*hF zD`(b=O+J?l`q69uToE#~u$u0jyTmAoFger4+O}lRqn5T?*yP$#*K?i`FWv->?-c8k zgKx(BJA4!25NFS7k_-w7prT0p-Pj59pxo)7Z)DP32c5cDD=R#I{>Y1*YHghO!`iBa zk*nMMYiIe`9g-i)dvy67OR=J~TXtgR{I3U+VF;5|LxMS2|K}qZezRZ-VJ6_eI2!2N z2R?T#b=Lm9y6L;OnWPWT6I>&wy#4X3^iv=Jd~IGR1`KaAr#KBw_Qk)Z^cI$mQ0obM zI4%JEnH8Tmz180toi*`i_*D|$o)n2<6f@lwV(j>8PN`^FNCY%MXwXaMRu!^xoG%|e z=)82neIHAHq?ZuIwHkO)E1ALclpL%lr5VvwNmY_)5K+wODasTaFSsOCEP*O7M@Y8F zwsA^H_&dI@ghl2it(wY|BA!svC%0EO2#D%MUD=;Hly*zLo-;blruDUq(;J5GAvt{CN<+DITB9)dj7eUR@N5Moi4x(^@V|fe&gxl-z8J5FbLs_! z2yCS_1;WFFn*uK<4ci9)4sO1`b}>wE?BY>e^=8&a$hE5y$|k{@_Gnhmsg!PH_o>(C z7T@(^<{}5>_Ptc|vGQ=eiMNT7A|bsi{sBR|rL0*Zp#saSd{}DX55B;dG=_2R#PbH( z#uq^&c#}c64F$mO2=;91+&v-1j-Y|o+XQN9lMgG*l@)ta z)=%JP96Dl9R|&yQb0muE8Yg62`Y=HK1ONij{&_y^&Ne3FB5Aq7z5 zMJ{V5A(YF@nu*7uk#vPWnlA3c)q`?AY@HK8G8Z<~9FT&o5rp85u)Mp{k&?ESIQ@C^ zGX}h?O$m-M)7s!)o|~rB_X;-aarSZz*M!}4LY+dJ=fcQ`|8 z$Sv|hAe&X}MubPxmOQIpRqTRltevG;Z*CYSO1719zEt=&x|seGs!LF z+jd#ptLK$C!atmCY9d3c2ubfo;yZ4-=u|6IJN6 z8K6DBZ9L(=%ICPpDz;%3+`la2pZqxdao&#hchbTV8Ux;0tf+miOkFNfZR(BlWNnPO z;0^6~6sCg038r4T@|twje)QZ$8k*XMojf|Y-2T0!Ov6dFffe6^5cCws&%t57DR?j0 z#?mn_3(GkKH?Cn1Gri{$f2b@~9>m0MlewQMeRftyuw(FU!$I5HcvjyA4?29NA;9r# z*rQ4ZV$M=3m6hK5sx@o+m6k;|rn8MdHTnnkwQfCU)&p6}K3sd&FT|KcdiiKq0UKfL z7dr8uAsQeC(^jh86x`gk+uq*>qc>XsIUy+(E)oG$pb564Iqc9cXJ(CgbTTY(WU$Pj zzE_OcA<|{)G&>rPGOkJTHOE|n{B1ZVn5PVWaoJY3eWgjSkHouMT;*>$-73bd$oC+b z(;=U+E|HEX?bJ&5@qW2o(MGpJfOFON$ivV_H@6~MrFROy1II?d~X~9YgWl00Vvhd@D&OSw+af{n{vk+06QC-5VMjdKy8`i zQQT4O$1MI%LM*3J7rO`C@zFA=F2jYoRv>2>o-{_~VJf4W@P|h?)dTFoeu_sNgnPiv zv61+2Lr}CDKz!Ku21(C2?dpO>oCW~KPrtuN37BM)rxXBk7f7b1eZV1#xh z%eBG7hW$SGsMn^VbYVBG?j!Fd6O*}%HDKB6&%~w6)ualeUvG)~{x;>Hi=#6c@F+-`_Un$-Q~7^(3!aLI|G%0CelB zz2q@K7imK+Xd&0QHX36aSwcV+2N8IDbEZH4tOZ#lFy$Oo^0Ccx*Ik`whv+41oP#N5 znQd$mw{vZ~DsofxLU-bmnTJdGd!K_C|wP^!3Ji3aD7DL|C3r9vNdaaU0Uyq49ZC1W1|Ic65LGo@tA2 z(RSJ{@p_|E2a|%DB&c_V0S}XUXPn43e*I(ASkxE=M%#0REVBOnxLWF^5lNa1B6>i> zU2QIG&MLoNx-gk_+#i-X`4}L%77hMlU^n|b_}}?Yi4kz?Z1QWiJokPA14gx^zAP&U zy2xP>nlu8i$QgC)pn49$@Z&I)&+5(fkMLm^Z!V5z-viV#X4vI+FjtNH{e5i7wCKqOy+iyWa-68WA?Hu|Y z+xdJR9a_j)$a!|$V#NwMYUR ziox8s(tHnc2Tj((g(EJJr?~I>k&;n%8!udw+<~IaP)6M47PE|Izv4@FkPLgj5#3CU3RNoV(RRXD|D}C z5pym45$qhFLe`C63(UeyyBvkdgJpn6;-u#!)~!(l|!Pv&)i1X3sx^Euu-|w)G<` zql%cmkqW3;vny1*j2hPcV%YiUZ=5QA zK6xHU%f^?zX1WUmP}J0Ln8)^#WAMsErMtHDiGGC(ZE4s90t$^4M!o}W*G{rPFU}Zj zbyToDhR2Yu?k=2EQkJ9sEv(__O*@u7_MuL|xscXt#-i>oh$=`87K7dfwRK)0Em#T^ zcYDUW#*#z^D+8VLE|{I>3(nB|WNb54@w?T+@CZ!R0^PLfv&r0|qBS|2K-xI$Uh#Wp zwO+v`D=vHNsF)96zTMlv?@Fd5kTJ}F-wyR!Hkc*GV;X~C{T`OhwZFmCkj5IaLixhH zh?%m_?aB^&aj@Ti!KaT+pg&74Bx8YP148=iyGqDY$a9a+59RoP^J$JfB zaA|(!eDW9k;*7WFo=JIuEt}=Fcze}R`u&O@S|60)=KocIO~MgYNhO2kD8Q@!{p~qNHz+cF%W-&SM-thkKPWEpPkEaI zNel7@kC~W`5ipV8if&he_EakDo!U3QT zjaF+Ithk0Tcs*jq6VwNnRo3^}CM;GwGv*FK|pHhGeEe3&!o{`Cykgj;Fz~Jq+fx$u9+kw?pQQixVA% z>_5q=_xhAiBi`;rs(WmuOicrTLmGCmFG81JI02Q{yBn`+MmY}$qrR6DsT1Q3dS(46 zH^2)o9>(p*R|&88*@2oj0f}`ZjU%JIXis!OC7_Wxgj_Z@1(P{K)=CZ336fr(QKAbw zf5!xz1eWEIDPdf%C`zpME zj@DNQbd?@R7v2rScCqaXY<~}i7qI`t&2GF|Py&@>w$1NZ$ph0cdsafXOv{s%tGj*Fv-v4It$W}zx7j6PK$b-!>;Cr}-w#8{;7!-`KtuTr2R^sH?MI zh5|O*$Wb}0V*Me1UMBDUTtw$-Tww1E$Z;#;0P&C(~Bzl50aaGNFa)eW0VI`D6q{6BdZyE|fWb z`~hXCj~e1rO4p9~?cw~&{~O)PG$Ml?h(t348bH56+&RDcTkkx=kxu5?*Z+2HWNWgV zW#LF-4plz)?|$p1)oNWAjEKQ(ZdcAW2Oo8ets(pykD`D*_5TLE;Rj)9?j#j7O~(Iz jp8P*goByv~Jz`w#{jrV?f;R)3NCN>IX_wu7`20Tr;Z|O5 literal 0 HcmV?d00001 diff --git a/.maestro/enrichedInput/screenshots/ios/manual_link_not_matching_set_regex.png b/.maestro/enrichedInput/screenshots/ios/manual_link_not_matching_set_regex.png new file mode 100644 index 0000000000000000000000000000000000000000..f5c1d72b1303624ec6916847ffd971a3a393b515 GIT binary patch literal 6149 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 Date: Mon, 15 Jun 2026 21:38:38 +0200 Subject: [PATCH 4/7] fix(ios): linkRegex init before initial default value --- ios/EnrichedTextInputView.mm | 18 +++++++++--------- ios/styles/LinkStyle.mm | 12 +----------- 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/ios/EnrichedTextInputView.mm b/ios/EnrichedTextInputView.mm index 19e819f21..5d034198d 100644 --- a/ios/EnrichedTextInputView.mm +++ b/ios/EnrichedTextInputView.mm @@ -719,6 +719,15 @@ - (void)updateProps:(Props::Shared const &)props textShortcuts = shortcuts; } + // linkRegex + LinkRegexConfig *oldRegexConfig = + [[LinkRegexConfig alloc] initWithLinkRegexProp:oldViewProps.linkRegex]; + LinkRegexConfig *newRegexConfig = + [[LinkRegexConfig alloc] initWithLinkRegexProp:newViewProps.linkRegex]; + if (![newRegexConfig isEqualToConfig:oldRegexConfig]) { + [config setLinkRegexConfig:newRegexConfig]; + } + // default value - must be set before placeholder to make sure it correctly // shows on first mount if (newViewProps.defaultValue != oldViewProps.defaultValue) { @@ -775,15 +784,6 @@ - (void)updateProps:(Props::Shared const &)props [config setMentionIndicators:newIndicators]; } - // linkRegex - LinkRegexConfig *oldRegexConfig = - [[LinkRegexConfig alloc] initWithLinkRegexProp:oldViewProps.linkRegex]; - LinkRegexConfig *newRegexConfig = - [[LinkRegexConfig alloc] initWithLinkRegexProp:newViewProps.linkRegex]; - if (![newRegexConfig isEqualToConfig:oldRegexConfig]) { - [config setLinkRegexConfig:newRegexConfig]; - } - // selection color sets both selection and cursor on iOS (just as in RN) if (newViewProps.selectionColor != oldViewProps.selectionColor) { if (isColorMeaningful(newViewProps.selectionColor)) { diff --git a/ios/styles/LinkStyle.mm b/ios/styles/LinkStyle.mm index 8473bfc35..1eae1a1d1 100644 --- a/ios/styles/LinkStyle.mm +++ b/ios/styles/LinkStyle.mm @@ -367,18 +367,8 @@ + (BOOL)matchesLinkRegexWithConfig:(NSString *)url return NO; } NSRange range = NSMakeRange(0, url.length); - if (linkRegexConfig.isDefault) { - return [[self fullRegex] numberOfMatchesInString:url - options:0 - range:range] > 0 || - [[self wwwRegex] numberOfMatchesInString:url options:0 - range:range] > 0 || - [[self bareRegex] numberOfMatchesInString:url - options:0 - range:range] > 0; - } NSRegularExpression *userRegex = [config parsedLinkRegex]; - if (userRegex == nullptr) { + if (linkRegexConfig.isDefault || userRegex == nullptr) { return [[self fullRegex] numberOfMatchesInString:url options:0 range:range] > 0 || From 90c574fc41bb451aac6c133ddc5a9a85a833971b Mon Sep 17 00:00:00 2001 From: Krystian Sienkiewicz <146986839+hejsztynx@users.noreply.github.com> Date: Wed, 17 Jun 2026 19:35:27 +0200 Subject: [PATCH 5/7] refactor(android): url matches linkRegex MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Kacper Żółkiewski <74975508+kacperzolkiewski@users.noreply.github.com> --- .../com/swmansion/enriched/common/parser/EnrichedParser.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedParser.java b/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedParser.java index 39dcfef8c..cb1060726 100644 --- a/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedParser.java +++ b/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedParser.java @@ -875,8 +875,7 @@ private static void startA(Editable text, Attributes attributes) { private static boolean urlMatchesLinkRegex(String url, Pattern linkRegex) { if (linkRegex == null) return false; - Matcher m = linkRegex.matcher(url); - return m.find() && m.start() == 0 && m.end() == url.length(); + return linkRegex.matcher(url).matches(); } private static void endA( From d731ed78dc8e60672ee658b6c23c19a6e7f30a79 Mon Sep 17 00:00:00 2001 From: Krystian Sienkiewicz Date: Wed, 17 Jun 2026 17:36:38 +0200 Subject: [PATCH 6/7] refactor: removed getTextAndStylesFromHtml overload --- ios/htmlParser/HtmlParser.h | 1 - ios/htmlParser/HtmlParser.mm | 4 ---- ios/textHtmlParser/TextHtmlParser.mm | 3 ++- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/ios/htmlParser/HtmlParser.h b/ios/htmlParser/HtmlParser.h index 2507fd800..ee23cb863 100644 --- a/ios/htmlParser/HtmlParser.h +++ b/ios/htmlParser/HtmlParser.h @@ -7,7 +7,6 @@ @interface HtmlParser : NSObject + (NSString *_Nullable)initiallyProcessHtml:(NSString *_Nonnull)html useHtmlNormalizer:(BOOL)useHtmlNormalizer; -+ (NSArray *_Nonnull)getTextAndStylesFromHtml:(NSString *_Nonnull)fixedHtml; + (NSArray *_Nonnull)getTextAndStylesFromHtml:(NSString *_Nonnull)fixedHtml config:(EnrichedConfig *_Nullable)config; + (NSString *_Nonnull)parseToHtmlFromRange:(NSRange)range diff --git a/ios/htmlParser/HtmlParser.mm b/ios/htmlParser/HtmlParser.mm index dab41eff8..543c835cb 100644 --- a/ios/htmlParser/HtmlParser.mm +++ b/ios/htmlParser/HtmlParser.mm @@ -415,10 +415,6 @@ + (NSString *_Nullable)initiallyProcessHtml:(NSString *_Nonnull)html return fixedHtml; } -+ (NSArray *_Nonnull)getTextAndStylesFromHtml:(NSString *_Nonnull)fixedHtml { - return [self getTextAndStylesFromHtml:fixedHtml config:nil]; -} - + (NSArray *_Nonnull)getTextAndStylesFromHtml:(NSString *_Nonnull)fixedHtml config: (EnrichedConfig *_Nullable)config { diff --git a/ios/textHtmlParser/TextHtmlParser.mm b/ios/textHtmlParser/TextHtmlParser.mm index 1f930a015..3899fd2d8 100644 --- a/ios/textHtmlParser/TextHtmlParser.mm +++ b/ios/textHtmlParser/TextHtmlParser.mm @@ -31,7 +31,8 @@ - (void)replaceWholeFromHtml:(NSString *_Nonnull)html { return; } - NSArray *result = [HtmlParser getTextAndStylesFromHtml:normalized]; + NSArray *result = [HtmlParser getTextAndStylesFromHtml:normalized + config:nil]; NSString *plainText = result[0]; NSArray *processedStyles = result[1]; NSArray *alignments = result[2]; From 431f1c701bfa223fee2469455b22de65857a2982 Mon Sep 17 00:00:00 2001 From: Krystian Sienkiewicz Date: Wed, 17 Jun 2026 17:44:12 +0200 Subject: [PATCH 7/7] fix: single test / android: link and mention evaluation on paste --- .../flows/link_auto_detection.yaml | 17 ---- .../enrichedInput/flows/links_visual.yaml | 73 ++++++++++++++++++ .../manual_link_not_matching_set_regex.yaml | 17 ---- .../android/link_auto_detection.png | Bin 5591 -> 0 bytes .../screenshots/android/links_visual_auto.png | Bin 0 -> 15198 bytes .../android/links_visual_manual.png | Bin 0 -> 10006 bytes .../manual_link_not_matching_set_regex.png | Bin 5353 -> 0 bytes .../screenshots/ios/link_auto_detection.png | Bin 6750 -> 0 bytes .../screenshots/ios/links_visual_auto.png | Bin 0 -> 17966 bytes .../screenshots/ios/links_visual_manual.png | Bin 0 -> 11479 bytes .../manual_link_not_matching_set_regex.png | Bin 6149 -> 0 bytes .../textinput/EnrichedTextInputView.kt | 6 +- 12 files changed, 77 insertions(+), 36 deletions(-) delete mode 100644 .maestro/enrichedInput/flows/link_auto_detection.yaml create mode 100644 .maestro/enrichedInput/flows/links_visual.yaml delete mode 100644 .maestro/enrichedInput/flows/manual_link_not_matching_set_regex.yaml delete mode 100644 .maestro/enrichedInput/screenshots/android/link_auto_detection.png create mode 100644 .maestro/enrichedInput/screenshots/android/links_visual_auto.png create mode 100644 .maestro/enrichedInput/screenshots/android/links_visual_manual.png delete mode 100644 .maestro/enrichedInput/screenshots/android/manual_link_not_matching_set_regex.png delete mode 100644 .maestro/enrichedInput/screenshots/ios/link_auto_detection.png create mode 100644 .maestro/enrichedInput/screenshots/ios/links_visual_auto.png create mode 100644 .maestro/enrichedInput/screenshots/ios/links_visual_manual.png delete mode 100644 .maestro/enrichedInput/screenshots/ios/manual_link_not_matching_set_regex.png diff --git a/.maestro/enrichedInput/flows/link_auto_detection.yaml b/.maestro/enrichedInput/flows/link_auto_detection.yaml deleted file mode 100644 index e468d4699..000000000 --- a/.maestro/enrichedInput/flows/link_auto_detection.yaml +++ /dev/null @@ -1,17 +0,0 @@ -appId: swmansion.enriched.example ---- -# Verifies typing a URL directly into the editor -- launchApp - -- tapOn: - id: 'toggle-screen-button' - -- tapOn: - id: "editor-input" - -- inputText: 'swmansion.com' - -- runFlow: - file: '../subflows/capture_or_assert_screenshot.yaml' - env: - SCREENSHOT_NAME: 'link_auto_detection' diff --git a/.maestro/enrichedInput/flows/links_visual.yaml b/.maestro/enrichedInput/flows/links_visual.yaml new file mode 100644 index 000000000..bf3ad4c47 --- /dev/null +++ b/.maestro/enrichedInput/flows/links_visual.yaml @@ -0,0 +1,73 @@ +appId: swmansion.enriched.example +--- +# Verifies typing a URL directly into the editor +- launchApp + +- tapOn: + id: 'toggle-screen-button' + +- tapOn: + id: "editor-input" + +# autolinks break on text change or paste +- inputText: 'swmansion.com' + +- doubleTapOn: + id: 'editor-input' + point: '20%, 50%' +- tapOn: + text: 'Copy' + +- tapOn: + id: 'editor-input' + point: '70%, 50%' +- pressKey: Enter + +- longPressOn: + id: 'editor-input' + point: '50%, 70%' +- tapOn: + text: 'Paste' +- inputText: 'm' + +- pressKey: Enter +- inputText: 'swm' +- longPressOn: + id: 'editor-input' + point: '50%, 75%' +- tapOn: + text: 'Paste' + +- runFlow: + file: '../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'links_visual_auto' + +# manual link where href == textValue but does not match the linkRegex is considered as a manual link +- runFlow: + file: '../subflows/set_editor_value.yaml' + env: + VALUE: '

example.com

' + +- doubleTapOn: + id: 'editor-input' + point: '20%, 50%' +- tapOn: + text: 'Copy' + +- tapOn: + id: 'editor-input' + point: '70%, 50%' +- pressKey: Enter + +- longPressOn: + id: 'editor-input' + point: '50%, 70%' +- tapOn: + text: 'Paste' +- pressKey: Backspace + +- runFlow: + file: '../subflows/capture_or_assert_screenshot.yaml' + env: + SCREENSHOT_NAME: 'links_visual_manual' diff --git a/.maestro/enrichedInput/flows/manual_link_not_matching_set_regex.yaml b/.maestro/enrichedInput/flows/manual_link_not_matching_set_regex.yaml deleted file mode 100644 index 2ca695be8..000000000 --- a/.maestro/enrichedInput/flows/manual_link_not_matching_set_regex.yaml +++ /dev/null @@ -1,17 +0,0 @@ -appId: swmansion.enriched.example ---- -# fix PR #640 -- launchApp - -- tapOn: - id: 'toggle-screen-button' - -- runFlow: - file: '../subflows/set_editor_value.yaml' - env: - VALUE: '

example.com

' - -- runFlow: - file: '../subflows/capture_or_assert_screenshot.yaml' - env: - SCREENSHOT_NAME: 'manual_link_not_matching_set_regex' diff --git a/.maestro/enrichedInput/screenshots/android/link_auto_detection.png b/.maestro/enrichedInput/screenshots/android/link_auto_detection.png deleted file mode 100644 index 8c8c11173b0b29265a2284879c07f596159e2be9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5591 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 i*=G2k@PDR&c4k7!{HiNMZMO#hW-OEJ<56j diff --git a/.maestro/enrichedInput/screenshots/android/links_visual_auto.png b/.maestro/enrichedInput/screenshots/android/links_visual_auto.png new file mode 100644 index 0000000000000000000000000000000000000000..369f3a2eaceac1d1cf4502838243e66ed245ddaa GIT binary patch literal 15198 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 H_WFMSI?5F? literal 0 HcmV?d00001 diff --git a/.maestro/enrichedInput/screenshots/android/links_visual_manual.png b/.maestro/enrichedInput/screenshots/android/links_visual_manual.png new file mode 100644 index 0000000000000000000000000000000000000000..cc265a9dbac4244ffa79aa7b47ead4dacc99c828 GIT binary patch literal 10006 zcmeI2XH-*b*REA8hy_Fum1dzR2&jNa7Zi{pAiW5PK#<;BFhNlSsnVsZ^biOb=>)bE zrGz3#FhIzbUJ^nJfrP+$*!$h@Io~+rjB&;}f4(2@A67_MWUcu;bKdj5=6Y+Or+I?y z0^7cQ`%Y**xNo>`AIlVY-OhRd{4^9nJ=nKTn4ooE)i}t8Oo%q(nq_|Xj=8B9BV73Q zw*8ltvt@PZ!j;(??w_8;j(i(Ql{YoA&#-(Ldt2D$^l7on2iPJfgf6l^x^M7^qtWY> z>eOZK1O|EgW;2CC+MJT>%Xw9Lz^S{@c1`zi-x^_-gpa^J4+!q{h&%$m{e@Wgdr5HI z=XIn-9vuEOeC-boe-yATg2M})Q@H)$n06V-0uB=D=6mNnj;c5b4z*|O_`t#I+J8>` zS8yVXvI*JK52wl2WXN8i=tu1M;>O6e3O7BTc9g%ndDC8-N2kXFe6r5cBG0QOp_7{L zQB@Xf^*`T}Gw`_^PVMUrg#>_q`aysL_nUPu%uoJ2_5bmzP6%mMWlY9Y2b#mq+hMCJ^zwOT3Md+|+^6j4*nkiF8TXH%XX(r)kbv8sl3fi@9 zo%pQcn>5=M2lJYE*f-X+G9)WZe= zHM;O@2hY$?iDW_tX`_DB+pGoW8exN`#JlKIV3y;0 z><)*IM&4_UuxwBCo8~&|tiG`}8s?dcXT-pyUH|CemaXxxN@sEAzl>Cwz$(8ROetdFlW@Lu$|u!i!2GF4 zp_~7|37-jABy(?IKD>#Qd@C!a$p3bpGls&ZQcs^U=Qs}jo^6my>{2V5)dnq-Y z%LXJ=v;2mbiJXdKQ`7yn%g*Dqtnxzeu3SCl{Ngq$k1fw3t*Lf1+?#1)bMtUzR*8I` z3oh4IWpVEM;;i%0L0q<#NYO#!ROpo}@iDw5U2op7r^M$zO8;2i+XS5(Ix#ETaU_|~ ze53W&+f0P{###&c*h~X-{;TEZ54`4!PWb1}BLjSg6gIfY#Ngmr1lGjf{u@HuS+X5t zJZ$Q8a+Z464ugVhGzpe8Gnfr@&7jK@N9CmOes)Rz{VlgzzL5orxX%p_H-yv=tyE@Y z^_F#7UJ>D8L~V4k4!H7ebhswaS?m8<*t0n5GVS^Lnw*RrBs}f4BG*&pJ1Z~ou=s-) zWk$pzY*rd-)taHAr?x%5TccYV5Tll2w?ut@s`N3@6(9SN%kqZM`{Wdd5(RP~mW?>J z;r0`KX*^uu2ueV@%f-@loqBuqyhxkgI{^pT#O~eDL(xm7YvN38_YW+e1V+yvaWYqV zFo$$6lMxjnX9>3e770feHuv{sLhI> z$7D)+m}aV+-T4)_&9|YFVq9a~traJlL{PSZ;fgB{dJpX1_s54bSrrm?)AJa8tKar+ z*k5;tTf{5XD@98j%$za_HtyE$o`OvuyHax>dz^V7ZH(b;i>936Ii#&+ucfBd0&5Nt zePnauoXI)I0LDx;hbIRXiIt9S1of0!d)@ull3iU@9VC0WU_=L+P8{S^lCUD9(nC|Q zE;vGxacVy5I;|nO!_J(tmQD^AgfOM())Swk18-9>)wBt6G(9?PQL>a>LgjhrWC+G= zcyit%rA`|&{N=UthA!pkLO#pB7pm9p*fBxHG~V>`;pVQ&dg49u6ivyo>Z!?zhU=Xu z4dv1Q9A~Mb?E#mqeovls$4g^^4xFc z3VPH`Gw}QR>v@Fo3iOl3sh@w!6v>1&)w!#Y4x&egn?Au1n?v_d8HA>$&Rq?zP_yN1JedbM9n&?_!LNh#jWc$+YISYZ+AX=x0a` z%j)?d)^E(-kdL_xe4j+vop~VU25f5PwprEY?Q!I^YE5np1!tF}y*A(!tjfQtM>nfv zq3pK2=%3U0Z1fO=UKZF>G$gf-BsRY`hRR zeg_d1Vmo);LEpHNXrctI*cnZ4PABZoYV?s`ok0D(cD6Q4Ubjq zcQ+@kTXj$x8wcl3O#Gc%tajF+7kgh-fBbzf`>}?2laZU-oP(H-p~b-a_cu3cmI~_R zkd&*x>;jH>RqY@~TyQ@uG*C$u%KM~B=O`&=nN9%;AL9GF%M?!l88@@SrxE|DI@@Bx)zhbVd_^@ zTv%0DhpsCtEh{b3$)H}$FzYp3gD%r?rEyHsy5q>nk<}2z7cffkyJMI3+2{pXxI6AzJ>>XzM&pO@y(~Q} za^7pNp$5H^4FWa%QN}}t1t`^B#aUlpbjV2?mEtZ_2jq7vP|fz+x9`T)Lzj@zyN~Jd+Wf~1x!)7m z%L~ws(3W)@pTr%9!BZg`n-3vSelpY06&8ZgF1S?Az6hGbAqJbzQM}a2UIVH?_EraS zIf#vN1`)PWImx2LTHWV_o6LT^CM3zkIHYCBXJDfkcrW;?3#yPtTKC$Xj$9+Yv%WX= z;yu?t7a@WK9puBP+;w|oC+i|JIWg3q2XK*6A)E*1q3NTsAJ|;RT7PCX+LrsG2ZxOuw zHyc0IwOn7d>BQ}NdDpI2So|KUkqRlNXJL&aWur$u3&%%>5KWUj6Awo*&tGo-EHeWB z01oQ&&eMA#t>{O6h*J&%2VjqWLnr-R^^s@iJdden{T)IPWJn`%=4aB%PZp!o+MFbA zO`!IkO|@HfbF;<;N`4D9O*>la`rD9)@v@ptIh*x}tR(60Iap;SMu}(;gd(-k&UMKD zQ1hMDXbwuEqrc2Zj~(pCTlLle_9TIvc(^j+hIX?yVRF6`(RIrsZpZy=jmpU>SCbi0 z6JcL&qjUDQ;*;}(=|kN0x{=vW)}e04vf%ZUBG8P|tuIbX&HS9&R%X&nzxFSG{KmF3 zIsJWz#;evy{N97a{*BmR$7F>Q1DXXJ(AoZM* zisO!gCh( zL5;R3-b$y}Hj+jASMiz@K4#ZPv-K|JbbNiad|qK?-XqD1j*o+D^;8?9le$~emA2Ze zw{uh#Ja+Fe$ajF9mmbw$H{seX4TFE~4`R+O6f2~0=j2a8 z|8U!*HMYlwC6Cj5Ow1E_ui5n?(gaA0A9+T2#&zI*O)Lm4=@{{-l&-o?-!e1dcKut2 zS2oAX+bE)5gtwU@#w$R3L2A}c+%X~1u8ex3Yf;Z~>wn}Eg+&xICEONZKdQfn=%4dn zUl*3VkP@$qP9#vJ#N?`Ouq9_@@G=i?y&Tz|TqAQ+#6fdGE|S;~ma-YNwD&+B{g<9} z*byds91<3x7oyYG7JHiZeL9v`)+Tq;)aHj-N7?z8Q{VD*V~c)cFw=gX7% zkE#gZQmV_Vb*j=hQ6d^P(aFaHYuA^zGS=W`>WlRu^##cM$~MxR3Cs%fT94uA-`Z1{ z$@$|co4p{hh@hL~=Xhpnthcim%j&0E--NNb46%EaJNo9=P}PvuN^FBH_GBo+5|M8n z&_`Nc<-v)sCiEF+<88mFY-LulxaK>iD ze1XQ(3LpA{+csEf1%2D<{z;vQX%_kCR|*wJHOje*%+o)^_Jo~2#BVz*3x{nu0E4;b6;t??VxE5v?)aF%c<5Phr``1jC3zCLU zVjx6;p`3BXm&WXzmJ^&D5pUS5qJ-wV#1cEE^8rM>wDBV+>bZ7URnr#mx}E~Tqc+Z5 zl=?;;$=krnls1Hx~${xGeKIc7hQ~?MwXrum8T69is+);%B5vD61Sz@ zXg5lAee9s>^%fuN2v9~iOtRPx!k04IzcM^~$>{HphWA%j&T)7wi!-8Wngr^J2% zCjf)+EzB*kDsVvr@Z&jSYg0L;Ay_iT>6U;K%nel|yVd@#p2k1uk{njF9I z*|h`U!HK9z0N-?YbcE(LxHa~iuE`D1U&0!83s@T@D29%Cv^a?dD~M^3e?Z{Q!Y`EZ z^mg(Vo%2+5e(+=$EqU`=s64d@wbmRb8k1;EpP1nOMl}m=KiB3{xDbP|2!%6|d1z#A zk&v!cphtEV=kui9*cioIKKY_N7nF^a;Tn!_>IHWfKAOp95ibfD1U$jBcMEzTp5ptC z)kwalEEF7ZmD~T0#g%zIQ}UrzecqGrJD->el9b0ObuMmLbCYZ2g4(o&kp=AUM*gcv z+7Na;O^_Pc9BQ`9s()Ycl9MnH%Fib)%{6}2GAGv$Owyr&`Ze;(rb&Z!G8V2=4)(S` zl+UX|V_W%y#SI0(ihkHVD2`nGP1%~8^>y*VvPm8d7OjJOO|YOD{8|{7FJ>n(6M^30 zaH{d;O+s7)Bs|chrpna8c&a!whv8&*@1w8-m*?yFRT=C=a=uHORq0AuZ6DT)Z? z=r8@r26^8m6p=JCcB8lUauXfv!svX{wqh?EhpF9d=b#jL%LxpI$l8t}Z--vruH@TN zAccySc$B0j@tO!Xz^duUN1#;q3xu7<34K(?(458SF|p@)<}7Q4s;`<(=aUxP(4)Y_ zkz?Crjq$5V-LVJWzCoCU1pyYEclVm}b*-yfwUj`8p{~;X048ERh!y-3C&JQG(jf_E z&h{nzX$2=nm9E#^9!9R!8;58~u7y~B`tDfDlvzV1TJ+S1Bz7gPr%c1sIOUEn!j#dN zcWuZ}jb@$4$uqq(nBfhZM%bg!6(6P}_3Ly5#q&9ewg6RBD!pY^Ld!_K(UUU|7KZ-V ztA#Ft&n+ICoRW}mIng=sr5!?4s>$$F;$~)DFx_P&}gHTfT+``VV-+NrGzFKAEn<1M=Z<=_S|gX zi=ghj$KO>mQX2|k3QbA^LeUL3FVxta!)k(-EN&@o{^+0yY=U|p4Qkm36mUB=0aXZ3 zuU_3O=Kw~Y#8>T^RIEb)G07yQK;ltp6&ux^I%)sCG^U`bZ7UMooXfQ}E6wp+4eoZB zFO@%${d3Vb9r^%l#7*yvT+$)w@;8y(6?fkHW7L)(A^$nHt8ch z;3e-(#z~?XuupXNgg{zDYUjlwfrX1$y$tugp~!j_aDhKFOGH=h)ZssUXJGWJI_nmE zAvMC=+O-JY(^7?>>YnNi@KU=HzX)werYK8Od)hl!l6sVh70Q?LiS!1-wW4lIcwPzFMasy`D&zH6CNhSOzu>){XFYj5~}#FOtDS|nb$ z)UOSDm8Dm#t{hK+H`bx?NHEcvGXkiK$M-hkU9xSOXTXsUY6CDz`>8n%xQfc=S`&<; zudVhit|M{eugd^58&B40c3?y#g#weT{y5g49TY(TQocfgQvgr~R03nGGKHGnIe$(Z zBLw2_ipC*miD-ZV_ix3x9Gn!UVfy=+{BtC*On+WFcnK+~XN8>T-Ow4$JC>I%UDb(e zESrgJ8mS+F2=^LOO?mjZmQ&*}r7k7%V7BmJ{?ywZV*c;IY zT<6^qIL>EqUYJYB)oAcEX9tBofHBZYC!%*f0vON_731CLq~re^Oxp1>tEIY5yxQ4q=g2Ue6GGCeetPB=MtW!*(&4j;lcq*&Mw25UezHcDS^x zddlM_H2XCbo^8=Oyk%QTtEZUxF!vPG<=|G;%?6erx!;aeDM`&k;42lQKqx^~<_cWO zd@9fZ+~ChwK7h{FQVsGEsiLqG^jW#w%uIssGF{cA`m%jE$P+!5J%Uru8!>{jM7QLE zZURvTHlg$S!Z2aidqY42Rj>=eNz4YsK~aFHgvcE^CYX2YUhEUwJc=2faI5NV7Te!@ zQJmEd1AtywTuRUz&Ew4k=qNJis_fFZK_Kbm3dXlOKcEwd5bIYbzHd2ag1#M628xB% z_-zx?43GuV)_tEyVz@7-vZw8ZYDo+ySh#YKQm z#xmBcU?(&Lhpun5nXb^a;6AA$sgg@a<7ca+-AgX)X{N(-bjxIdyGc*q1YG##=+$?D!C=;h5biI-J1ztD zHaR;%uaF>5zfLQ)L}2An8|53o{2EUKP61|xkOZ1`^-e@|Ye7U08>%TA58%H;p<1KG z7+i`9roB`?B8TV5()6*mB9H8hOhsBl7-gLsP=uUVsA=p)2FF}9+b|ExD&%R^-B7E& zDr@!i=psL*Mvm&BNd4pI>%@bM_8*|v23;;(f-Yy`%$`jzLxplOPd8f(PWB|AM4HM) zf$mj`p!Xz@EoW~4>#eS8{Z%q<`*K@@gN1c0pp&+KPk(>`>QuyRUT(Z-%mB)e76ko_ z_#Bg&7izUkj%V4j1oNPj&aw70-+q~O2hsf?)NqN@PesmQ_(u;EG#j(g}S^qX`ArH4ukF{bRbD0WiYQIM>OdnxD=iY3*p(PU0lou|X zC+wr27WjZhW-&!;B`HQ#v8hIErGf2n;Ka;PlSZ&T@no^`J9=CUX2-_p^(C>9A`j{L zn$Dwrg~u|XwqM9AIOHoG zml976hz<0(g9V^lEVtGV;D!Q9HVh}IZD7`%`1@oUzp}0GI0f;{8rX&86zSCWd>Djh zX0V0bvw^qPt1GXjBcvG78xgiga z_J0qGV53-DfSF$?-}+!@y*t1kd;8AF9w?Fok5Akc_%EO+D)Dbn^uM0M$MQ;M@8PFc zEOsysZPWuZI|9Wh3B0ka^0Gpi6}UwSJu5{hWlm1ZmqdF5tmhxQZ2x%%3gprM;Q_Id bT^4S}(X?2hvp2!t?9)=$yI-#MB?F%OS=IkVg>TW;>(ez`32{qvu6&+?r8#KL8!!*y0S|JS|b zLqt?~H)%33#2@iAyk#d6mwjP!2fH$hWpUNs57_g0!wIbZG`+B&4;Voc&uTepdb`4n=jQED2Vw`W z0kJVbK-u#3ZS`$g$v~`DG7!s!2SVUiT!dYIt~>(*?P_+YcigsR0fAP-8e{0|CF{5q zWw2`N{kzL=UawtpeLToeq>UyR@f&X#!^(~Nv$LAj0z)!riW;|Xv^sy>?73}-WcOx= zK}FS2V|8PXyEA*Y?hRx~v+T{cab^lR)U7P!`*GY$igF%kJP)2gx|ZFwUH;wVZGwX zpEXPB-p(?-*Y~YH*`&(ja8y;tAX}aqtp+?LSj~S!XKtd+1gmouJx#NozIEQAW+N1b z&_ror58Ws8uJl~E$Q9nb8yqLT)+cpwV6m`}@Y0z&oF5l{_jyCxVL7>Uc9!0V8M!&@ z2ak64x`Dc7{y9~6iAQaK7S|pQ+fkqnBfqoBcbps}l;uib6P)!%CPfsO5dH zPLGwf9U{9qdwF%dh(?L*##RZq3_MdyZN}lg4^v$Ofkdx{3E>|OcA-{hbOm$O8&Mzn zW+qIxEeaA5Ncr9uOsV}`o*Yjc!Fgi)xqx!9^ykXWL$MMg*#MC{L&~>2?aNy8LzGO@ zZw*47M;#U5({B5$aAwP;yrQrV^f5Pt$D_vk^-Sk|5jgDfJtmYo1hN`^>n?}0N zM5Ws#{3@i6N-oPO?#?us(E4;3c5gjPygQ>u{8N+eTwl*IiBVBED~Da$Sg~9x!=P)Z zp+S>dkGIb)fncYq4htoc86-{rjhJQ|h?cDp@0&~HBkA11zWj#jP$GV$ifmc~^$Y#< z_0LZz^C_cV@Oa}`PUj)f#x}}QA>1@|Z0>m8>G+l=H#5dDyHfQ-hnjm};4;Ugx(-;D zS~Ev&tr|!kT@3Isqh4*Em@seA)k|?E)pzH`kLnNoQ(0a-eRDseW9Lxm5cZ-VMw91( z_RRjfNkr@qqDoUz8qViiKHhE*m*hSIfQjyCM@`#F$&32@0ZBeaFY3Lvn{TR!$W)i? zHCJ))&Ea|0yfJy;T6FXyq!Bvd^JZL;uuAq`)Z#D_xDM%Yd1QHX%En7f?~-EVP5maJ z18E{PCI?2Q425A2Tg+~{*j#)E2agmg6eSAiAGjP34|ow0G!}kLmVN^DG7y>z^dF3O zfF^9u31pJxupvvm=^i`X53V@a)DIk&rdAl+EM3)4?{yKu!pF+|L;nWuCA@g0CO{*J zhzlk{LhH^Suazqril?_$gu$AiM*3d_-F?gI)L52(I(w1bs^*8S9hE`Bvv=(fb{=-? zT99x_GiUanpcj3ES(Y1bL~&_422DtBOVxl0q`G=-LFQ#guq^q=#0gTIc@`@@OsX3_ zfgjYQ+TmI>M!>~nsV~to;%o|)knQY^=VGv9t#eKbg^G4`+8+m&VD(Y$h_uf-CGh_ziV|;Fr>Sr z^p%VG7M<$_U1^m?c+>rAcL z6(Tim|Dq+M<(=Ujt0A+3m2iW+Hj{>|gDNNAY-06{wKLSm+HLpqPXUWcI3?H%7ywf% zWQ6u4CHMuM$QP2!Bco#PyGl@?x(dI%gva>8h>NV_r9UnvG;<#0uiKNyeB&uvtM=EU z9V5%qWaSWrlN)RA&w!r3TKv^^umxHCKwp*9VfPTSU#_ecOwXFEdaZV;NRmaI1LakT ze4}lMl~)KaVcsd`yoU(zf7EAy2Fo_F8wtRIS*8H4@U*v(tk4=m0FO}%wD@)v%$ev0 zN3)n_kA)CsRB2-XL_z{tJ6omTIpOaTJLPAOS43-ESj!w4XMJbAF1Q$Q`_^_?1c{Wm zk*N19HVv>jS5sMB5Md_)JQ{Hx@%>aTOM~?VJE5fCIJcRHdj*gw@B)9n<_y1`IcAbC zYr5o-i5%w4T9enQ-&$lD3@2UMu>yZ~B5);6kk{|s6qhF(gjsLBv>c(D5|KjE;T z_&~l2gkg#jrc;z=mUv&2*7_r(p@6yG@s}WR_eR%h18Nv2>}gtMe8Z5nwA|R5uUc9E z!q~{Lyta2MDrD-9gOuba6#F0x`f!DQNIEU`Msu|r5%t^(fX{)=NxN7r>Jt>`^UZem zeFCGtj@L35e5_{Zw_ShMFN}+>ULTI8&m|q-;Dq@VGS+P|jXah^=nLaQU7cA4mY zs_bf%VNV;!-{GEr8%Qe zv6^fXGB?i=8=0&*_Rw}_SHGtQf}LHZ`~8<&qLpOmtHAcEkb5*gpQ8Nsu-OS&WR(z5 zL;xiLw3c{Spe@vW+74iO`BWy#$(+@lIu z_o(atG7SJSP8eXgkqH|*eLVBUPEXRy#+PQ(dgV^4RbAlSY^BvXJLdgl`6IVeeUF$;-*qxGDC%|UzbHN?Kd-T(Ojxyj z0oH)>L=>MBL8{tbB~4>yt!s2#^+L9E^BMa(fN1jUN=XKp{;55Gd0GfRH*;7rDcmta zG8(t8V6*1O&d1Pw^6WZQbmz(t#GTRXUlC#3MoQ0*rm~1Xw;~yJQ+>xx0-O?n9n}%z z?10aXw{D)nAtpn@3K)gRZWV26#7*-ci-xvy$MHwtejIh;n}f*BR2Zaih-H3G{4K4;SWMAzowzZ8;oF9 zPVame*E7UWIiJJganxTt*$8D1ay#Lcp>w8Ur3T~s$z ztyo_BN4jp10Y48v>@&7LxSk_Hq)boMBBZO*Z}{{;_H-x$Jw5u(PJUyr%t_!nL^A9i zF2^HyuDxWhQPk&YoT%A}wD@`32fJ_j zZvswUA8Jmi=iH0DFa1Y~TXBAZOzxM{b?nP8?3v=Yis2b(_RU_e4(fTvmG1XRcA<~v z`3|A|5XHIIYi1`_TtE-BD#p1S?~n?N^lVP20oWhZZw0_5N=)AzR6B=E%^;iK;hPSQ zL~1Ba^d;Hs_UX%`8*Vk|86zC9&R_qhp+${}jHP_&-EHNz z=-?jw&(v=JuKdLDofgIBm=s)*LebJ)z4pyl+jArUcpeFF|FLlVcwJzB!ku(S$ z)ncoXe#EvfOv|n9qa{E~fh{0Pb=4sl0`oUoG{B8FS z6|&!Fl-pS_yY_;*uNiiw9xCS%FYi{POdVdg?H-t;!7(wZKS=mH_8aZBX&%F!*m&*050^9;L@SfpLS>5q@|UTmLP zIM*`>Ybt3dQrh#PcxpHY(hN-2Si&JG*W{Yc10A5Y#1Gf==65Rh;^kh}Z#%o`kN?y` z1fLG*k_ExE*vTMXgHM9r$MtZ4q|_Z<9fv1UTW>vnOn(g1&s?`(7kkp;TOlZ;;+XL& z!#4HCp*Az1@x4@$=&60AiIqv2;7Cwa&_y{TpC7`!UO9LhRb7U*1`ShKOIph9r2)vvpZrxhz~=r8*G0-3aO>Ns}2+5R7P_c&M(oI zeuc;hSsDl8lG7nRH;Gq$Ws9YCXYXfem`e&s?pae3!LKtzBw}+ylxS^wn;w6Of8C8r zlG)nTZwD7&qgY+EzUTgSnsN0`@=JQEpm_ZiH%8N096$%BU*fZ1CxXDV-;4D-TkfVP z3T(_z136l5mjkw$c5uZ?J_7G3{B4ztW7YOdD>97wz5SnxJ99sQK(C~=1n|QOwrIfp zaq+W~x!t0cB6;wK-vf&F^wcSa&N>!}LFnxzJj-P^p-j z6%Oi##>7bX@`W20XlQ6IL-e%G zXlUrHfbXdDw7{oW`vn0Sni~QT?K>7v9mrF`Pb^0oKdn8a$uTNq%}Mew6}d=eE`5Jh z;*~|N=fLeB&sau_gmu8Swx{o&r=t~Q(n|TP78P~rlGFJpo=fyRZ<&~79cT9YHV@%7 z%cYxEL_6~GeyVwm>i%RPC4MeVYiqk|E8qnIv7Zqb)ay?TS26DfodV+cbVKI&KvQv6 zfa&=7+JyFaU2*>Zm;Xzw#lV>n?A-+Q)8tzBq=qnG2|l|A46NZuJwyYZT+MtW8@(QXYt+}!3jVl#R> z%W(fgYJx`1d?gXzc(^cyNKQ>~&FkD&F@5Lh={pu05cuFu#sTTKL5FpS+Cs@(c~l6Pa-Fh(X2zMq61u1UheEPjW>ygtC%NpPc)|$PkmO;j!GC zHpRtY!Brcun$-JgUv|~o*GrL4EtgY2Q0I$a8&|Q0`-cAX{01z2sI)qNc-Mq^?TVOg zZF6EZ2ixS1*Uy5l+ei!JWIo4nPAPK!3#FcMRow(e@1QTf5VLaQ`sqgbkv)O!^h$4? zvEUv1UP{K!bWEd^yu)J+@iNiy;N`CMn2^drxWE?N_irG%vr5VhVUp`$#=!)E`s3zv z`THGa?xq=L&n=s!r1C}Xh6{=^3-w}BYJ=Ys_47I+ZhaY>mJ8{5C&{S_K2*C;L!*hF zD`(b=O+J?l`q69uToE#~u$u0jyTmAoFger4+O}lRqn5T?*yP$#*K?i`FWv->?-c8k zgKx(BJA4!25NFS7k_-w7prT0p-Pj59pxo)7Z)DP32c5cDD=R#I{>Y1*YHghO!`iBa zk*nMMYiIe`9g-i)dvy67OR=J~TXtgR{I3U+VF;5|LxMS2|K}qZezRZ-VJ6_eI2!2N z2R?T#b=Lm9y6L;OnWPWT6I>&wy#4X3^iv=Jd~IGR1`KaAr#KBw_Qk)Z^cI$mQ0obM zI4%JEnH8Tmz180toi*`i_*D|$o)n2<6f@lwV(j>8PN`^FNCY%MXwXaMRu!^xoG%|e z=)82neIHAHq?ZuIwHkO)E1ALclpL%lr5VvwNmY_)5K+wODasTaFSsOCEP*O7M@Y8F zwsA^H_&dI@ghl2it(wY|BA!svC%0EO2#D%MUD=;Hly*zLo-;blruDUq(;J5GAvt{CN<+DITB9)dj7eUR@N5Moi4x(^@V|fe&gxl-z8J5FbLs_! z2yCS_1;WFFn*uK<4ci9)4sO1`b}>wE?BY>e^=8&a$hE5y$|k{@_Gnhmsg!PH_o>(C z7T@(^<{}5>_Ptc|vGQ=eiMNT7A|bsi{sBR|rL0*Zp#saSd{}DX55B;dG=_2R#PbH( z#uq^&c#}c64F$mO2=;91+&v-1j-Y|o+XQN9lMgG*l@)ta z)=%JP96Dl9R|&yQb0muE8Yg62`Y=HK1ONij{&_y^&Ne3FB5Aq7z5 zMJ{V5A(YF@nu*7uk#vPWnlA3c)q`?AY@HK8G8Z<~9FT&o5rp85u)Mp{k&?ESIQ@C^ zGX}h?O$m-M)7s!)o|~rB_X;-aarSZz*M!}4LY+dJ=fcQ`|8 z$Sv|hAe&X}MubPxmOQIpRqTRltevG;Z*CYSO1719zEt=&x|seGs!LF z+jd#ptLK$C!atmCY9d3c2ubfo;yZ4-=u|6IJN6 z8K6DBZ9L(=%ICPpDz;%3+`la2pZqxdao&#hchbTV8Ux;0tf+miOkFNfZR(BlWNnPO z;0^6~6sCg038r4T@|twje)QZ$8k*XMojf|Y-2T0!Ov6dFffe6^5cCws&%t57DR?j0 z#?mn_3(GkKH?Cn1Gri{$f2b@~9>m0MlewQMeRftyuw(FU!$I5HcvjyA4?29NA;9r# z*rQ4ZV$M=3m6hK5sx@o+m6k;|rn8MdHTnnkwQfCU)&p6}K3sd&FT|KcdiiKq0UKfL z7dr8uAsQeC(^jh86x`gk+uq*>qc>XsIUy+(E)oG$pb564Iqc9cXJ(CgbTTY(WU$Pj zzE_OcA<|{)G&>rPGOkJTHOE|n{B1ZVn5PVWaoJY3eWgjSkHouMT;*>$-73bd$oC+b z(;=U+E|HEX?bJ&5@qW2o(MGpJfOFON$ivV_H@6~MrFROy1II?d~X~9YgWl00Vvhd@D&OSw+af{n{vk+06QC-5VMjdKy8`i zQQT4O$1MI%LM*3J7rO`C@zFA=F2jYoRv>2>o-{_~VJf4W@P|h?)dTFoeu_sNgnPiv zv61+2Lr}CDKz!Ku21(C2?dpO>oCW~KPrtuN37BM)rxXBk7f7b1eZV1#xh z%eBG7hW$SGsMn^VbYVBG?j!Fd6O*}%HDKB6&%~w6)ualeUvG)~{x;>Hi=#6c@F+-`_Un$-Q~7^(3!aLI|G%0CelB zz2q@K7imK+Xd&0QHX36aSwcV+2N8IDbEZH4tOZ#lFy$Oo^0Ccx*Ik`whv+41oP#N5 znQd$mw{vZ~DsofxLU-bmnTJdGd!K_C|wP^!3Ji3aD7DL|C3r9vNdaaU0Uyq49ZC1W1|Ic65LGo@tA2 z(RSJ{@p_|E2a|%DB&c_V0S}XUXPn43e*I(ASkxE=M%#0REVBOnxLWF^5lNa1B6>i> zU2QIG&MLoNx-gk_+#i-X`4}L%77hMlU^n|b_}}?Yi4kz?Z1QWiJokPA14gx^zAP&U zy2xP>nlu8i$QgC)pn49$@Z&I)&+5(fkMLm^Z!V5z-viV#X4vI+FjtNH{e5i7wCKqOy+iyWa-68WA?Hu|Y z+xdJR9a_j)$a!|$V#NwMYUR ziox8s(tHnc2Tj((g(EJJr?~I>k&;n%8!udw+<~IaP)6M47PE|Izv4@FkPLgj5#3CU3RNoV(RRXD|D}C z5pym45$qhFLe`C63(UeyyBvkdgJpn6;-u#!)~!(l|!Pv&)i1X3sx^Euu-|w)G<` zql%cmkqW3;vny1*j2hPcV%YiUZ=5QA zK6xHU%f^?zX1WUmP}J0Ln8)^#WAMsErMtHDiGGC(ZE4s90t$^4M!o}W*G{rPFU}Zj zbyToDhR2Yu?k=2EQkJ9sEv(__O*@u7_MuL|xscXt#-i>oh$=`87K7dfwRK)0Em#T^ zcYDUW#*#z^D+8VLE|{I>3(nB|WNb54@w?T+@CZ!R0^PLfv&r0|qBS|2K-xI$Uh#Wp zwO+v`D=vHNsF)96zTMlv?@Fd5kTJ}F-wyR!Hkc*GV;X~C{T`OhwZFmCkj5IaLixhH zh?%m_?aB^&aj@Ti!KaT+pg&74Bx8YP148=iyGqDY$a9a+59RoP^J$JfB zaA|(!eDW9k;*7WFo=JIuEt}=Fcze}R`u&O@S|60)=KocIO~MgYNhO2kD8Q@!{p~qNHz+cF%W-&SM-thkKPWEpPkEaI zNel7@kC~W`5ipV8if&he_EakDo!U3QT zjaF+Ithk0Tcs*jq6VwNnRo3^}CM;GwGv*FK|pHhGeEe3&!o{`Cykgj;Fz~Jq+fx$u9+kw?pQQixVA% z>_5q=_xhAiBi`;rs(WmuOicrTLmGCmFG81JI02Q{yBn`+MmY}$qrR6DsT1Q3dS(46 zH^2)o9>(p*R|&88*@2oj0f}`ZjU%JIXis!OC7_Wxgj_Z@1(P{K)=CZ336fr(QKAbw zf5!xz1eWEIDPdf%C`zpME zj@DNQbd?@R7v2rScCqaXY<~}i7qI`t&2GF|Py&@>w$1NZ$ph0cdsafXOv{s%tGj*Fv-v4It$W}zx7j6PK$b-!>;Cr}-w#8{;7!-`KtuTr2R^sH?MI zh5|O*$Wb}0V*Me1UMBDUTtw$-Tww1E$Z;#;0P&C(~Bzl50aaGNFa)eW0VI`D6q{6BdZyE|fWb z`~hXCj~e1rO4p9~?cw~&{~O)PG$Ml?h(t348bH56+&RDcTkkx=kxu5?*Z+2HWNWgV zW#LF-4plz)?|$p1)oNWAjEKQ(ZdcAW2Oo8ets(pykD`D*_5TLE;Rj)9?j#j7O~(Iz jp8P*goByv~Jz`w#{jrV?f;R)3NCN>IX_wu7`20Tr;Z|O5 diff --git a/.maestro/enrichedInput/screenshots/ios/links_visual_auto.png b/.maestro/enrichedInput/screenshots/ios/links_visual_auto.png new file mode 100644 index 0000000000000000000000000000000000000000..2efbdbf076250f4d8b5891f4aa5d222d8f860c74 GIT binary patch literal 17966 zcmeIaXHeAJ*6ypQ%M1b{B1wTJ2LZ`R$w6|?k{Zd9Gnk2jPu0Fv=iGa$&hbl^O>p*{V~+8R-+2B8sVK?Zyms%}xpU`k%E?Nq zojZ3?>)g5X^jGk}J8ji(w9lQB!pKQJ(eN-@p9t|+)IL2plMpv6m%3^3p0k`RoQuFE zI8!H744RSL*4fUbWyy_N+ed-S$d$}O}D_3Xyf`au8qOza7{&Y6K@9p1P zjEHgV5w*A|9u=-l)K6MY;+;{0fBW2l^!+Qi*TyGTFM^kEGK{Zq ze?7PYxrKYBPP>R(;uLN4W87bT-V))y`(?Na-g)r4MJRtCyqpsi|Gz){KY7Ep-i>cM z1=vvzn<<9pLDahny5LZ-(+7V*Zl(BH!oZuZXTF!!VX3s}PluwPGmlfPLQJ-mBZ++%p&)%=g!0wf=hW!;~9$$hZ)I@#}gz zHM^7BPc&HYg7>~D|7Y>wQFW2IguPcd{8ScBM>;cu>FV#EZ)EO-9+%E_t#Kn&?X~D7=KbP?cKf>fg=D&HLq|oe z2TtXZdhBYo{d;e?E^M6CNs&k)bIL5VCMPkcpV{81!4zXK34SlIrz}UStE+JQh@tT! zT|eu?xs#~yNn!g(ny5SjPp>SWVt@OyoQftcf}I`$SFyVh_$T%2Pa>4db4-;NzILxx zl_c5ina|mgRw^>3&7R1zjH`ABde9e^cM9SN zAk=nEsH-8$tnBp$2fpk3P#2BuL>i7wR&d9dW?P7!Pas`83L-ItiWt?ym5bZGl`IQIJ)So7sQRh z=LEM{Rh0Xo&YShtpV70zaMW!t0@=D4siE8&5l%tHQR3D$%En*$I6QoL3)38#S=nJt zESl)$s)I7oS}u&=-6~1<*WG5jQ&H`^Ux`^r$mgbBKb1vYrPeZ%3yDOH9U5iqtOX#c zZs)}fUE|MVXGa)BUL4&}Z&#pK*>Pp+?oNpiP7HFInIRx;Tca?mQt|8vyWjHjD|uUY ziph+S6lz=-gqM1UKIG$Vwi7-yL9ZcABb}nLhfi8WHmq^lmE@z}eM5)f8F)P(CIYg^ zOKa<*hm^xGH|p7zudtYjgsE%ka0&bBPM1uNy)St4P}|+UQh!KK?tidCql z@MvXYdScz^0xy1`Uw3BLnXBq|&w0V?A8L&hS+s2upYi0g-s~9@3B6G7TBAtLviREDSeI( z(Jb$lqHBi-*droV!=~B!ilqY@v*kbJSem^ri5u5e8KW9UYK>re+bjt$GF+z?UM)OM zB#mwSOrxEwTX8((WJW(PLneG&MPD+f+2Ojs+D*vg2#(NK6XMI4L|yHEhPqrQ`mpuJ z+prJq>HZBnBh!jI@?%N#l<=>Qij|^?EB37?QG0F&Q^V<5k#RTq>#aaEFFY<*jL31j z1L}dxuF6&P^ag=u7!5K!Q`bV%Lb|)Cu1f2ZUO!J=LGW5tS}K)_M~zCaE53oq=PKz( zXFq*tB_dtE>?mcCkwVutzUFuJIRqraZYA)obdHEygI%W0)L&@I8OP#mkXs3KRS=~HnKPJWi_9^^Tb8d15YJ7T%qkp*r{ z-frpZw3rT--qrfjGAb)y2z5jXvX`G8Q#5YqXCq@zL8i^$BWs;Q z84nH14eHwa%+LA?N}W(tl9q`n9XI0(%agdt)gi>b@v%2Opu@(xW9U6C&(w;fzysIU zUzN48+9z8Z>r9`s zUyF+Dv=y#Wb%+#xdPXH^=a7iH7ZI9~BQwk*k8-H-J}dSUfM+`=bqBuJO~zQqAgmP* z?{KsK$o-L-U3&W9upzS@>hjP7c6$1=Db@PR<3d-IyG1JNNy|Kkyb{@oJV6H~h9}NH ziI89^p#dY`{q(8WNA@VQ_wR2TFn&BoGVZ7AU3bL(!^T_XQ}knP2SZ=C?J}_<)XtvT zgZL)|w(OIvyLqo6gaoiKV@HSdPyE`xN@7-u(kYsPUG|TexVgg2U35@SL?bjLr3<{( z=kk&-ojWHyQLl!_CRFp(f`Mbc-kg`Om9)h;H;v9c)DLwA(u$X9rV+URd=liHEWPUA z)vil*TQrx|HjsG3KVPPUAi|+KC9xs;(lz%M7m|}e?$LPhgI2YcG0yGoPVeGsfr-16 zw+A%UmwxPqb^F0J7}_h3jF6~p{rgPjMK8-XA?AfcNbi`hwG$AQRUmcknSb86a zYZR72o-)0C_&KEqXEmRc(b%tq)Xf6v%RGtFaHHu+MULMEA?#&ZzB{1AEzVtGo*(?l z+ojmtbr_b!`rK(dAOu>zKz->nK{02`U-yj95goyCGyLsxB*Z6XhOQfAzyAH0uXsQOk~q z^$cIvhX>x;r)SP)o7YD>w%!Tjp`~zk4Nh75wXM2fTNQr_J+WXga|`24B40*eN(3ns zCkBcRn-(-HG*?naU-j`Iq38=d?l$N#Po&73_V$&g)T?F>+07$a**cq*S$D&F2J3{6 zU3cX{F|pRE+wDVlH(Eglxiu}j17*>~S7?o1P>1gC-EvXETMm#HELo#CnMzYL)MkUx zBOHhJRH2fA-ozwPemOkI=PcID-B;QSlG7QyEP*;yzEcwYSV5UxGq1zpbd#??b(?6g zY4$qec~Pkza$XQrWoA}aoBaB+#T_b44~va$$*T_0sG_DwZAcQFU`aPQ$|3nf+0JSG zaxd5_oQg4|qW{hl%6K>JeMMcSeD4~Bfj7x+X+Nh@A#k=%Z?J+E2bri?kKSW3gT*s$vZGDG!g{-WV5FX^|Ar$+UEB7{+iVH3QwCx_#bq zk#(7GA*{4X?2VrcN8Pc0@7m?Xn_y)(I>^(#8otioEEAw>9Fuscb=75S^og${$Q%#x z(tmDE{L$d>L*n&@qK1n%%ihW=)LlG-_+JATxMR%5p3gWy@Fa9xbYP7*-ExmOggz0@ zi#B$N=GX+=E6MRnE3Rlbj%42bo|2Z_Ciyl!v{*^wHZsRw(15ALFwQN3Fsw#IO1bk_ zJ;Vd`knVc;fkDfi5Iyu{-&vV&DiCVk^TQ-%NjFcJUywa1^`U)y2K6$S=EpSpy;jVL zNp9MtEHqZ#ii7)e>bZJp?E@_dUwA03MY@}9@;x;M(V<31a_V!on5VCv)uZbEGH}O9 z4e#9ui5mrUZ+n6&y=3LJ*>$wk&tw5IRZY7X6yMB5YzD_fSaVRY=|+DIwpK32Mw)+N z@3yD&uLy+@#5|rk8r{Sws5BWX-g)HddQuQ6X>>6C8d;O(joC-na|=sg$Ey6*i(2ho zV;C-xXx?5{lwQr}E(q0{$mm@OGY~VCeojYBS?68o7tzo>V#f69wd1dqlwTOsSanuN z;np*YWY72ZlB-2h*ett!QjVt7CF2nnhc@*Jy@Wb?2iI5PVlgMaO8$PxZ8|IOLBZms z+(nkw0&tCS#bJYt_KsYpM!h4G)O@l$W)5DAG{j^-Yrf1O5C6=Ud~#Z7?FG_wKZnY; zhL*NZ1^>*Gm>=De3D$Y5YP?xDM!A-Xj;r3=QS$nXy%1S&jCmYeZA;Lvt%*`C;(G9b zjRahiyjo>3{t4T#3KyXd$+<7cWVnW|>_kQmgudurXWAM1b)fb}tgl!x7)+ZzMVDX# z4|FkpqoA&!%K@zoQU_tGoHbK}Q9cdv9lG&qX9*rQ(XTo@@5GcOX&@bCdSm7l{lu#! z_&!;Jtv*H{+)Hagivly)QxI|b)_Pt+i8Uga{rIU^SKB-4f~hurJY6a$@4&`<0ZS*e zqbZg800LEjID%4jJ)$*bo9O9HVw?a?1;#b1sO9$xdw#9Z3&r;8M&yshn8gOzs_)4w z;hjW1F2oH4U5UI_gx3s4Z^LFd37m4!!CUVWLdL_zUBnTVdwJggwW}T=TOWm3R(=^1 zcbf<*c{lHoMm?$geF?LwfTe=k)d6v|kI8Qi4Fr2dAf}2{M9s$> z85WaG$B(JcCI3pyn3Q-T*%}RJIg*F3`lge&^eGw3$lITbdHlVvp$WZt z8d7oxlzffx{O5_tp=(j4ZGzsG*ze2vn?PT7i#~AQm{28s(N$V_xi@EBQJr#-K(ab> zY$~}>33k^PbPZ5vIJ;bD}YLQxM9}4c9XLTtU=K8 z%$(%DMOpJAv~w>bg`MOJOqg|HfHt^G5-$8m{U*^DPx^3)Vxae#~}wDb5jAx)5_gn;@539j3^W!Q;*BR~t6-fz1I(Ar-NF=auwbC9M&`f{I`= z{hw1*?$aA1lhl!XlGMXT5S8xr2MhUBFi(TCb_p1zwX`Ic+rADWt0nzToHcs_;RDV% zDpdpe{Q6phGlNpaR^eBJVFiDM2dLX}7Lopp+^3*x2!coBDd;CMCMk4#b&EzaI9|;(ity`d zo~WvxPs)(1Rb1rFoA0z~{Z0n`aX~4Ts;5ITNMZ!vxB95rL_YuyI?9=be6gRHSEn_t zn`92|lfqKhawtjN-;ye9C`P#d((yyPl2={Ot*Wc17mLdDlt;yuK|9GUPJ7k9#I-?# zYS2uPfSabdMgabv;5V3cpvUM6|w6V1<2J>aBAaQ6AZ4! z9jPPGfeQEeDlan>c%AHFDiy}^A9{X33M}+A2tf^&9w!WuV?Wdgm8=q^y-ffn8T&Su40;Ojh(SYcH?yDN9MD zgVM|IRGqG22UfE{VK2JNq}^H2Wl5EYH1WJlg7h)jjd#z!^Dgc>X1izvPxH6EP`A!Y8Q>IkPldwaT#QxTV)?EZ0+QW)ev*B-foUbe4{ z_yjW^xj4#hS72{eWVF)*3R3r1nto*~b&ie$c(p8=_QtTy>boN7$D7I)u8~P@2L1g9 ztdU*v1FTH81L<^_Y`V6i;x+G3$Vc+AH@li}vDA{u#~cd16ZwQ#E=v$nV>;phMu^u0t{k&+ds|AxBQ3}sH=^! zH%831u<8k0`z4ootCQ1fsz#u#%gRk}U!!hq2;#CopilZlmX=qonU*^Fd_U6E>F2Ns zVJa%)hwoqYS6lvm*Lq#mNQ$8ldMpiV=<-2(C*NGoZ4)6>B!R1ZZ+8FCrxk|H9hT;E zaW|oagiv1vPfhzd!chFyyklbqjk;WH1sM}rr0>ZtTk5p&8TEJy%#bNgpEhDPhgSpy zB$QhX9IabyYD&mtROi~*&qgdv`+tBV)iMWS#g)1yQ%WwNgxa3JJNyo%v3W8vrfGnb z2KDxSdQ=R9g*aYXQsidQPa9sFnQ9SSljyhks!za=^Ua&Iph$VS9jBN_t0jORfTC}n z+7YV;Un2|hCWgQ`T(PDB^OX38LgvzM1w7WLmXb3tvwka(>-WknRF*MnWy*Bh$utBT zxT;|_UqmFU4fH*xHFk#$v!N%pA_?iN)O8!30f4MqZ>kK8^ObR* z?YX(UwABNR-C5ZIMG~J_CSXO^p*CkbnM%JcR>7-HLbx7H6GdNosRhO}~i*aQpL{VF}7?h5w-!aNr! z^#6)d&vC{*o>tbFYY8DOkvZ<7F%RQq1GeG*k zF);Uez{ltQ^NWdy7dl?h)!Ngu26+Q)+vMkqO@o_j$g=Z_*4FuCINty3Ee;V8LylL8 zJT_YD>Slj{x4%&{zS=_T!~7bI@LbnN5uxBaUplDZO)tCeZ%m|!ca({9A{Msl5r@i=!1bP<;&n0Rby3 ztFbBvKJwR3bd`0ddqs~5Gc$iYk96na;%fas&gZc;6+tWGcQ_x1ME=Q{7Z!Rx2{@yd z`nkw6q(3A+vKq)%Oxl>JvwSb;3_fXkI*o2__sY>GOze5z=b<4D-PGm5oXtrXtg#Wb zc1uoC5xz6u1wOdX@quGTUTLY*d}qu~&FNvUza9(g?)}ZUHqI#`k%rVVC=2PH_lelx&^b`W;rC&uwik2U{j`YGdVA zW?@;&eQC{wx@D$4&9GAp2TP+=$ek*O$x4*4^Fp@_wJ+V~BZ?gvIXSt_hW&qH=E7&X z=NS+!SqgD2EJ39Chx^|@v?iWh{{YP2 zpWFD$11oIPyXzkwonS_cwa+gvFMFxqc4$1z=6&(l$)3AOI!7s4qhw~rG(*#vY}N5o zDS#4re6;sOeX0eoID=D*GxkG817`76k>oD`ZzcBAF`Rrdba!BpumiUiQGfzQ1qY2F#l zguNfBnVUU%x>w~DMcJ`KOhi=v;DZ0jsxkbt?B4oVPVFO`Vb3C3hVug7J zk=e;ug^eZaC=D{lr6f1^V|WRSn{*AXc?u*qEo) z{emy19y{NMU+1U?khw^&!spOwcD6m7%j3X7k&c031c6APwVo*zVZ`RkW9@mx?#rEB zruO;#VV_oR-=ZI!ehK{j$MW)WMud3Ze2`OmW#!&_)g*5KeuR_)goFGG^4687@ejXK zv{x|g^z_Um^MHiIzKx^I0o3{3kDc)4$~rqcL*v0d6zP0Tw;3sBE;WYvc|A5UNwX%p zj8D<0Pn#&_--v?T%C}@@VS!ga1hJuM_#U6qnwPITt2Lb3!6IR&e{K>4YUFLPyPb;R z6arjc=;tJ4SLUCp#dpY*`8}1FPZV&5%E<+};>Qf>wY0SOAJ0-_*g2Jtxd(D zwdkQd^_BX2Jy$6*XAr?jU!c*M2;g zPmU_vpCCClHoHoiZZ_8g@{2L=|6 z@|*q5$q}1hfVs*62bf8Xqo1;4W2hp(F59r5@zPTDaeFJ6nwolf)jka)yQik2a{oMY zHAppX`-XudfT=URDmH4su9fxXKhzb;yVd>qGOq*b7hXQO3G*`gg_qqoKKTtKh6;mN ztve5?>1}Uc>Pvg$Lz5R6s?jvSpZDo;q*z%E zCy3u671PC@WawKcIB905jq#dDgzlOBKxPLJA@JvLvD0k=#5TzJoJkU)2G;E#A3!A~ zK&tGYy@22Ia)5Y#xJVx`(`oRr0b@3-{gW|A-v&)ujq|@S=IUx4v6JrUn{@+&gPNpY zU01cZX?`>W1zUB+vSInb)%eYr|5hsiWsZONWd0(^uD>X=wy`UJVr`Z_D6j?j`9mTV z7t&bL;7gaSt*!q-nX~>una3GBX=PZ!cm9JiH~J#JxGknFC-@F#EB1a8Fq4){PknrM z`}NVY`l^7>Z-`{YGzP$umo5{;tgKic^5lhqQp-gvKAw~tk3LH3kk(gKH31B7!Mz*OP>4{zulxsN&i-br`Ji@H8Lu!5uNPKjLghxCV6>z-}?r|hJ;j$Uv>2KXqj|$ zbU=46c(KpV)fvqe){C7T{({V_|A5SQImK_by<$NgC9j_~dxzG98UKsV!9h-6WP7u`Fe?_k z0buceVP^cFC0o6pC;PkD&xW~=zQ4Jg1m}H!gA8!y?N)MtVtlFso)r=;O?`heI)EqS zwuS@EUrgQr68hi?m?YFTc<<*E;_Wd!5}XDU^q*BF>*6)u`da#1*ivB;k&~_IX15V# znYhHn{P$i*>s9cDXJ3kol_rYiVX3eD_}+CyG4QRS&kX9^6h%lRPYLJA4MgH_)e%V{ zEt(fh3RKDmGQw6y641Rc(|1gRo9=abd8nb9fz4y+s@)($1Tqh z%QZteseabH0h~^G@q9P0pB5U($I|3&EvEXjYo-qgtl-~L1<9&u^_mbq_YrP=+OFSU zUlL>c95Djb(9~S^rA5v1V+YpxKjktm^duKZ-%^`T{Ds2*WtBhnC;dx|UlSFBn_tq1 z&8LeXWjA;z#7E~Dl;Zw=5#oO|HmOnInDp#K?g`i+uc-c7YXozK=Khj1(_ufD5Yh{} zt?8W5cn44^T)iE-x_8T06V#7vy;ScFfeaq{<@DN|oSY>1*I4_uLrG*mN0Xea?1AUy zK302W9M$E@qvsx8z`%l9dg6TMqgUds3A2yy?mOiBOuQ;24`AAG}R9zgz3~Gg$pValX$%< z_YvC0d10KX+Ox?9`PtbE;DocN1fG3+2~miZl_K@aPMx0(7t{J4UUjilcn-IN&Q4C{ zCU~6TOv~0bHkd}xSU@Gg5)VCzv-IoSitasl2J__q*Q-)>kxP~+H7;)d^k{RHV2%(( zHID=jNGQx|%JoLx>pZJ)Ad4k^ni@{8L?0jfU>Z;94n(~7j)xu)ZO*A-iJ!guZy2-9 z2)kVYDCd1zA0;_N9KT zg~)~o8=InQsE1tDccGeSKTa%YGT{rdnXT%E^#*vClI;jMwGkbQAD$28s^*&kUDmzu zFws<7DsXbVO z>&{#U^W#ovfO0|fx{Qb+^D}=>o!_t<$ieJ;bkBC5QUw?!(}b_FKH(_BmG+J(Jv`S< zlp*9+o%<$l5)am5JaU|Z|Hb2z_{2nOX&dw^Bg$j;!|T_0m<+)jc0q6upcB&q2Vn#x z%E<$X_s=s#&;J83i}@K`3IrW&B4I?kc|JRvUU@Y*a4_9=UM6g@Nbl_GLfn7V$9`+~ zqLL6m-T%DhfMw-9-PzsEm^9O?0l84Hf$hPA?}7^Ou<{kYIYl`+)iYGRXBk;h#8cG? zDZN-4&5tWfb8dJ~IOf$r+^BPc>=5ebY%XG1A&ezr1bi(@6G2Tv@tF%jun7xv8%o*h4d_bM|p6Nm%uN4Wb`pj|TDOlKGt&vLmUz-mQvke2<`_)n@&g)5lV5zvkn zH2nZ;1(M3F^&Nh+TtnJqd>yz2I8HE*!{dN*2Av%3uNDw)6ICQ8CMqQh=EXl=O21!M zr!y~)=zC?UyJhEe_K4ztAz{~gMxx0kBf|9ji8AsEgcAsaLTH$_gUyppcHgb ziGU~Zg?n0BtLo_F-aN|)7d!nKdfgd|wkp%VfB!dSW{2P?b1hJ#Dk`6IG9i%PkQs~q zFOc~bM+15Qc6PGKV>28b6C=l|rJ?c2vgZ@KVeJy9+7~HUYwPsDO-=^+y98fj)EJKY z6d$^1_H( zy-XoqO7Y&P0qh}vOos(fX3c+4X1ZCvS(^UvhdPz^6V`tqw=~!xHCAn5l$a^7b8d2p zkavpm@@fw9PW29xjcq!3HD5*ejS(Ojp8Vm(36>8oVjD%)gGGgrmQT6Qn(KToin9=J zr%a_+SL1pFuNN*?ul|EE|1+uq0Drbro={lGy2z9m{fI@o_>s(4KFc18h9m0Jt;^g^ z@68cjZIdS(?ru3B-wkqnYHx3Um_*yJz>_D@z3`CF0j05c4?<7h84i7$U0;8UYyM|t z=pd<>LY)L7%)(qp6#T2W*ZxM4>2Qg$1Mk?uObCZYNw_Gs-4;LSXzz2}H5@TYA{X?< zmizg?W27@=XJ+OCt-C{dD0yQCy`}VXW@cveF8R7Fr-1FxFM-ONsxzX03wa}^SF8YZ z7=fGyt_-Gb>0V@16a?vN6ri)Rx{5oC4_n8(y>T%y350tn&qd0DSq{JL5YRU!!uN3f z(cuR~|Hi=e=1?;3!dY?-*s;?O?!=}Oz!IvodOOIxxE6v*Sa3yXmNEGFCqN}Z#0eUrslBkTx4V zE6!U}-}^IUR@+W)>-K$q@zG;-x;f_VZKs;aULs_yfAj2%tl2iG4e>67EkT(t~%qFl>Sm z>u+iQ2LO@)%bdIA{(rVX`df1+98Sq=s}oKolC6}iXJlm0d*R$U4}f)F1~~1lAz#w- z@cbgfTSS1y6F~kQB6|R1^UHuzzZ0*9iz}lQ1vuV31p%8%)j3h;?!C8Wg%ATVt5fgs z^{+3@Oo1Cq&TCukx*CfFhcLzYpB+NIK3+^*oFxLb99SeO!cbleRmfW%aE<$5~X-9 z;QY#sz5s?hNdMF+gML7;Ja{mDe7GxJKzB#W22_7`<3`&CrUX-Y`Cv?An%!7snPo4p zXxtnPSD24Ew_ql?m)GyG_RX4^dSRZ-h&BNJ6-$Sc{R=vYAo+AB@~|ujAFmppmCopw zKX*LZvs;C8TlV;%`(<{NnjiQBb%#cIZ}Kqr`o#kqw^zrtSdtfNh6c4RazxMTlpmPm zL5$;?y4T1$G7=aW*p2G>q1|`u-d#fyX5IyjbUc##sZUOOlF;>Y=fXok7uAsuj>F;9 zs^Wp?9F8Rm@BCMm94Y?qEZH*xu;kadf3jrx7yo3*c}Cqng6-({)qD*A#jK(l>X1m( z%kvk~skxU2vO=!)bah3!&%sokOtV1rsktRKzwK1VE`#J1}K7>^vmt&Q7^242P#9JWw$=~woxEO z#ZH!$X=TEm%E>MN{AzYExdtTH(wlbbX9)Dz9ccky5{239$dO~iRkldAj^P}<(-EeL2wk& z(h8ygH_p2jg^0TL{f5^wz&N;4nRSS^w^k2G_USu=KzdtdDC%f0gThP6RXRh#ACN-Y z86tz*pSwB)3s->o@zzgIfE6ok6R^97|3Z}m0{u*}|Ai_?Vgfs~JVw9%rpg@&=#nuu zHvP&_rI7nhn^QY7_lBY1DCTU1EsPw#Sh`B3PUpxM1= zj%s)fyFEDX@?vV$(NOTkCCuY0`-wH^&jv6AfDI|Gq%yh&(&z(|f6El=wx=ENGfr*q z$X^9RNjl7;dMWY$2rRql{ExtLx!J#fWu^Xp?wa3V`C-EozMOqa55UzC?O?pc12A;A zC^x3qvhy#d+>&F0bMfNaY>P#i>@7edJh zgZ%JJeq7&pvyGy9jW2)yL`4qJ_6%xa4WL5jM=}M&?(uZ~Ugp4NIX$_Zl+-(5=qpf1 zOX42P`H>8GJ&@A*uw>XF+#y};EnW7z>!kVpAdoHg+p0maewUS<{f7iWr^=>ejV!H@ zkp4Re0|U;*Y!whyBK2Xg_4IgAEQ!zrv=t@pU%S4=qdq4M9&v~MPr%H--PXUhl2X7) z@@)4I%)?iz2CNG^JLON#QxbAy6Y$nE#geES8<&WMEc^%}hNgaeb>VV;JfjRZx;z7P z+fZjfC+?9@zi?Cg;J3K+^5h!#?-TFaT(XGsUrjgxLI!wlB;MapZ2!V`dN`_3=o$ zRLJSck^dgjvZkg+yV!uU4%x?{9!p4flLrr7qSW?*JO?$>du|yF1P|bL70ebM4p?Q>Ww^-|YYbNE>l7hj4cATpjbbVR!(SkA)=V`7nKvX;oP1;PL)RXHE zu=(sdU#4;{J=$T8$j@g6mhn0^8RJ^Y0AiAs@fv5u74dun?k3KvzqCn!{QYe(^Isj2 zeQN_INChR0%(^`wUb}m4cBH-#;kp|)%!PY8wdz@kXWEx)nX1U^ryH`j^2rZQcn2bl~#n!SzAQqs( zbO7ubaHsbK)WvPW#YF8yakxF}6w246r|aY=tguC@xu%Nx{&rvA6H=W9{*Iw5;_~vp zH%xLV}g_553ytR6f;O(1zf~G)V#Ad4S)R z%=&M2kdIGFyX))g!63od-!v3>b@Ivb<&>0wxf!}OYEz=?zzdT94DC;hrOVvnV!=Kp zAbS&8wwQw-A^gPZ@*sIc^D-j!982cMhqO(yS!pv3DtKh~fV1Bi0i=qR*~M$uuYY*S z2&C`7Tb!lr?f>p@=I}6;zdt{arNG>b|29nQt#L>RklzYY@*Loa!%l?y&m(}|zO;pd z;*ld5c9*lsOC9ED2U6~O;Sh=LnniV>0%<~|q_Qmw;dk?18{$_Lb_#UN=cS(Y;YykF&ot+)b zopW<@pO2R3kdoYKC-P7%&%cCrOyHi=Jt^sFbeqSi z+n4EP7+bP>egheQC>)Fuq2hT?pL0}Wy0;V9gprvSUN{ehX{h)3yE?$4 zKR%EsS519M#JI3`%ULs=TC5oF2Vhq4Kv{Dx%{U<9LFd!~#7Yf1aE412n6j)tK7LLb z=!us@`Pa5g#SqD=Egl~qFY!ImDmJJ|?}5q7%6?JGD5WjJQkto&sSUvZm9v$$p^H(i z5{S)`O)LgRXOzfN76_7?wE_+Q>tQt5Fg#^2p9LbC{j_gGe|W0>V>fuc{(s3 zSmUJP9iMH)BQitO{$c%lN4^no$br6=`6+;RU{LsX%d`82fxf;?tH_l3^0cW^^iP;S ztnnTphiXAy9w;MG!B^k1Un{LEz<`b)un6mSz8Hk|uP5w&J#oOXC3&^na~FEzU}cM4*?M7J!vu<&W{S1|q&a9(g(9*_!;c+H08;l+=$4-`;s@(3)77Mu>S zf1Oq)XyJrz*DAsppMfj_knadc7ISLddXH^j=|hK$d2Bs%zCVI9c;GJAR1i^aak2fk zm*=sm$`j7LA|sV{`mU)KQYhUD>lgtoI;?d#3z4!k`bE!WnB8# z6R%W4Aa=g@c~a`?>h?Ha>A>j$t1wdsU=;M)7dxINfWEyccZ3du9ZhVm^*CP3Nkyhc zM40f(q>m6qGA6-I>{0c3O7C$cjT$`c2d?1&S`W;1aOIK5Px7Ds=M-U_{~7dI!2gWJ z0DB%sI)n9Wp4j|y8SdamJ z(bAqEujzMx8lV}JJKtUu=YvevxtAadL5K9kaaQ`U;j;MRLCX#N_w@42kd7`)fo?Qz z2AY{^ZfU8I2i*$=&X&l@I6>d9pgYGwJlZA-VUHKU!HIPgle+T=*fa+Q{_cMkmPRqZ zaslqq$XgD`QVTF60~2B38e&lT^hM};%LDMx+O?SXg6;rlf}1Q=&n{3)&Sx(x6HtXJ zjgE^0j7+fGmNim?XRn+%d&Kt3K6my$m{S8E5r_|v?k9k(_~HEnF+6M8rhb#9Z_Rz6mliG64YrK)7v(oY;z$hJZRy zN)`Rn1ns&KZTm?fmNmj|YRmy90y0TPr69yeeGd6cw)WQjHrD>2{Lc)w0M3Fx|Mx%i h`2Xa8K#4e`=B&Kw@`u&=M%=E;NhwJdi$8n){{RuPShWBE literal 0 HcmV?d00001 diff --git a/.maestro/enrichedInput/screenshots/ios/links_visual_manual.png b/.maestro/enrichedInput/screenshots/ios/links_visual_manual.png new file mode 100644 index 0000000000000000000000000000000000000000..bb0bd58f71ffc93a65cfd173c4f8370c986c280e GIT binary patch literal 11479 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