From ba80b8369545b15f37800d90c1115cbb74e500d7 Mon Sep 17 00:00:00 2001 From: Michael Schneider Date: Tue, 18 Oct 2016 12:00:01 -0700 Subject: [PATCH] [ASRelativeLayoutSpec] Fix ASRelatativeLayoutSpec behavior for ASRelativeLayoutSpecPositionStart (#2393) * Fix ASRelatativeLayoutSpec behavior for ASRelativeLayoutSpecPositionStart * Add updated images for snapshot tests --- AsyncDisplayKit/Layout/ASCenterLayoutSpec.h | 2 -- AsyncDisplayKit/Layout/ASCenterLayoutSpec.mm | 10 +++--- AsyncDisplayKit/Layout/ASRatioLayoutSpec.mm | 8 ++--- AsyncDisplayKit/Layout/ASRelativeLayoutSpec.h | 32 ++++++++++-------- .../Layout/ASRelativeLayoutSpec.mm | 28 +++++---------- .../ASAbsoluteLayoutSpecSnapshotTests.m | 3 +- .../ASRelativeLayoutSpecSnapshotTests.mm | 27 ++++++++++----- ...ngeIsGivenToChildWhenNotPositioning@2x.png | Bin 0 -> 4955 bytes ...ngeIsGivenToChildWhenNotPositioning@3x.png | Bin 10308 -> 0 bytes .../testWithOptions@2x.png | Bin 0 -> 6102 bytes .../testWithOptions@3x.png | Bin 12389 -> 0 bytes .../testWithOptions_CenterX@2x.png | Bin 0 -> 6650 bytes .../testWithOptions_CenterX@3x.png | Bin 12505 -> 0 bytes .../testWithOptions_CenterXCenterY@2x.png | Bin 0 -> 6662 bytes .../testWithOptions_CenterXCenterY@3x.png | Bin 12274 -> 0 bytes .../testWithOptions_CenterXEndY@2x.png | Bin 0 -> 6474 bytes .../testWithOptions_CenterXEndY@3x.png | Bin 12004 -> 0 bytes .../testWithOptions_CenterY@2x.png | Bin 0 -> 6073 bytes .../testWithOptions_CenterY@3x.png | Bin 12114 -> 0 bytes .../testWithOptions_EndX@2x.png | Bin 0 -> 5656 bytes .../testWithOptions_EndX@3x.png | Bin 11609 -> 0 bytes .../testWithOptions_EndXCenterY@2x.png | Bin 0 -> 5811 bytes .../testWithOptions_EndXCenterY@3x.png | Bin 11738 -> 0 bytes .../testWithOptions_EndXEndY@2x.png | Bin 0 -> 5534 bytes .../testWithOptions_EndXEndY@3x.png | Bin 11338 -> 0 bytes .../testWithOptions_EndY@2x.png | Bin 0 -> 5905 bytes .../testWithOptions_EndY@3x.png | Bin 11827 -> 0 bytes .../testWithSizingOptions@2x.png | Bin 0 -> 6102 bytes .../testWithSizingOptions@3x.png | Bin 12389 -> 0 bytes ...thSizingOptions_SizingMinimumHeight@2x.png | Bin 0 -> 4792 bytes ...thSizingOptions_SizingMinimumHeight@3x.png | Bin 9534 -> 0 bytes ...ithSizingOptions_SizingMinimumWidth@2x.png | Bin 0 -> 2582 bytes ...ithSizingOptions_SizingMinimumWidth@3x.png | Bin 3946 -> 0 bytes ...zingMinimumWidthSizingMinimumHeight@2x.png | Bin 0 -> 1965 bytes ...zingMinimumWidthSizingMinimumHeight@3x.png | Bin 2696 -> 0 bytes 35 files changed, 55 insertions(+), 55 deletions(-) create mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testMinimumSizeRangeIsGivenToChildWhenNotPositioning@2x.png delete mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testMinimumSizeRangeIsGivenToChildWhenNotPositioning@3x.png create mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions@2x.png delete mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions@3x.png create mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterX@2x.png delete mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterX@3x.png create mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterXCenterY@2x.png delete mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterXCenterY@3x.png create mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterXEndY@2x.png delete mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterXEndY@3x.png create mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterY@2x.png delete mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterY@3x.png create mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndX@2x.png delete mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndX@3x.png create mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndXCenterY@2x.png delete mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndXCenterY@3x.png create mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndXEndY@2x.png delete mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndXEndY@3x.png create mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndY@2x.png delete mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndY@3x.png create mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions@2x.png delete mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions@3x.png create mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumHeight@2x.png delete mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumHeight@3x.png create mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumWidth@2x.png delete mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumWidth@3x.png create mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumWidthSizingMinimumHeight@2x.png delete mode 100644 AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumWidthSizingMinimumHeight@3x.png diff --git a/AsyncDisplayKit/Layout/ASCenterLayoutSpec.h b/AsyncDisplayKit/Layout/ASCenterLayoutSpec.h index 12629e9e1c..a1474c4840 100644 --- a/AsyncDisplayKit/Layout/ASCenterLayoutSpec.h +++ b/AsyncDisplayKit/Layout/ASCenterLayoutSpec.h @@ -49,9 +49,7 @@ NS_ASSUME_NONNULL_BEGIN * Initializer. * * @param centeringOptions How the child is centered. - * * @param sizingOptions How much space will be taken up. - * * @param child The child to center. */ + (instancetype)centerLayoutSpecWithCenteringOptions:(ASCenterLayoutSpecCenteringOptions)centeringOptions diff --git a/AsyncDisplayKit/Layout/ASCenterLayoutSpec.mm b/AsyncDisplayKit/Layout/ASCenterLayoutSpec.mm index a1610671d6..cbd06bb8f9 100644 --- a/AsyncDisplayKit/Layout/ASCenterLayoutSpec.mm +++ b/AsyncDisplayKit/Layout/ASCenterLayoutSpec.mm @@ -58,21 +58,19 @@ - (ASRelativeLayoutSpecPosition)horizontalPositionFromCenteringOptions:(ASCenterLayoutSpecCenteringOptions)centeringOptions { - BOOL centerX = (centeringOptions & ASCenterLayoutSpecCenteringX) != 0; - if (centerX) { + if ((centeringOptions & ASCenterLayoutSpecCenteringX) != 0) { return ASRelativeLayoutSpecPositionCenter; } else { - return ASRelativeLayoutSpecPositionStart; + return ASRelativeLayoutSpecPositionNone; } } - (ASRelativeLayoutSpecPosition)verticalPositionFromCenteringOptions:(ASCenterLayoutSpecCenteringOptions)centeringOptions { - BOOL centerY = (centeringOptions & ASCenterLayoutSpecCenteringY) != 0; - if (centerY) { + if ((centeringOptions & ASCenterLayoutSpecCenteringY) != 0) { return ASRelativeLayoutSpecPositionCenter; } else { - return ASRelativeLayoutSpecPositionStart; + return ASRelativeLayoutSpecPositionNone; } } diff --git a/AsyncDisplayKit/Layout/ASRatioLayoutSpec.mm b/AsyncDisplayKit/Layout/ASRatioLayoutSpec.mm index 8feafac781..00c1d584f3 100644 --- a/AsyncDisplayKit/Layout/ASRatioLayoutSpec.mm +++ b/AsyncDisplayKit/Layout/ASRatioLayoutSpec.mm @@ -60,15 +60,15 @@ - (ASLayout *)calculateLayoutThatFits:(ASSizeRange)constrainedSize { std::vector sizeOptions; - // TODO: layout: isValidForLayout() call should not be necessary if INFINITY is used - if (!isinf(constrainedSize.max.width) && ASPointsValidForLayout(constrainedSize.max.width)) { + + if (ASPointsValidForSize(constrainedSize.max.width)) { sizeOptions.push_back(ASSizeRangeClamp(constrainedSize, { constrainedSize.max.width, ASFloorPixelValue(_ratio * constrainedSize.max.width) })); } - // TODO: layout: isValidForLayout() call should not be necessary if INFINITY is used - if (!isinf(constrainedSize.max.height) && ASPointsValidForLayout(constrainedSize.max.width)) { + + if (ASPointsValidForSize(constrainedSize.max.width)) { sizeOptions.push_back(ASSizeRangeClamp(constrainedSize, { ASFloorPixelValue(constrainedSize.max.height / _ratio), constrainedSize.max.height diff --git a/AsyncDisplayKit/Layout/ASRelativeLayoutSpec.h b/AsyncDisplayKit/Layout/ASRelativeLayoutSpec.h index 17f3ccfffd..31e6350849 100644 --- a/AsyncDisplayKit/Layout/ASRelativeLayoutSpec.h +++ b/AsyncDisplayKit/Layout/ASRelativeLayoutSpec.h @@ -13,25 +13,27 @@ #import /** How the child is positioned within the spec. */ -typedef NS_OPTIONS(NSUInteger, ASRelativeLayoutSpecPosition) { - /** The child is positioned at point 0 relatively to the layout axis (ie left / top most) */ - ASRelativeLayoutSpecPositionStart = 0, - /** The child is centered along the specified axis */ - ASRelativeLayoutSpecPositionCenter = 1 << 0, - /** The child is positioned at the maximum point of the layout axis (ie right / bottom most) */ - ASRelativeLayoutSpecPositionEnd = 1 << 1, +typedef NS_ENUM(NSUInteger, ASRelativeLayoutSpecPosition) { + /** The child is positioned at point 0 */ + ASRelativeLayoutSpecPositionNone = 0, + /** The child is positioned at point 0 relatively to the layout axis (ie left / top most) */ + ASRelativeLayoutSpecPositionStart = 1, + /** The child is centered along the specified axis */ + ASRelativeLayoutSpecPositionCenter = 2, + /** The child is positioned at the maximum point of the layout axis (ie right / bottom most) */ + ASRelativeLayoutSpecPositionEnd = 3, }; /** How much space the spec will take up. */ typedef NS_OPTIONS(NSUInteger, ASRelativeLayoutSpecSizingOption) { - /** The spec will take up the maximum size possible */ - ASRelativeLayoutSpecSizingOptionDefault, - /** The spec will take up the minimum size possible along the X axis */ - ASRelativeLayoutSpecSizingOptionMinimumWidth = 1 << 0, - /** The spec will take up the minimum size possible along the Y axis */ - ASRelativeLayoutSpecSizingOptionMinimumHeight = 1 << 1, - /** Convenience option to take up the minimum size along both the X and Y axis */ - ASRelativeLayoutSpecSizingOptionMinimumSize = ASRelativeLayoutSpecSizingOptionMinimumWidth | ASRelativeLayoutSpecSizingOptionMinimumHeight, + /** The spec will take up the maximum size possible */ + ASRelativeLayoutSpecSizingOptionDefault, + /** The spec will take up the minimum size possible along the X axis */ + ASRelativeLayoutSpecSizingOptionMinimumWidth = 1 << 0, + /** The spec will take up the minimum size possible along the Y axis */ + ASRelativeLayoutSpecSizingOptionMinimumHeight = 1 << 1, + /** Convenience option to take up the minimum size along both the X and Y axis */ + ASRelativeLayoutSpecSizingOptionMinimumSize = ASRelativeLayoutSpecSizingOptionMinimumWidth | ASRelativeLayoutSpecSizingOptionMinimumHeight, }; NS_ASSUME_NONNULL_BEGIN diff --git a/AsyncDisplayKit/Layout/ASRelativeLayoutSpec.mm b/AsyncDisplayKit/Layout/ASRelativeLayoutSpec.mm index 87b51efab7..d8f9bd717a 100644 --- a/AsyncDisplayKit/Layout/ASRelativeLayoutSpec.mm +++ b/AsyncDisplayKit/Layout/ASRelativeLayoutSpec.mm @@ -54,31 +54,21 @@ - (ASLayout *)calculateLayoutThatFits:(ASSizeRange)constrainedSize { - // If we have a finite size in any direction, pass this so that the child can - // resolve percentages against it. Otherwise pass ASLayoutElementParentDimensionUndefined - // as the size will depend on the content - // TODO: layout: isValidForLayout() call should not be necessary if INFINITY is used + // If we have a finite size in any direction, pass this so that the child can resolve percentages against it. + // Otherwise pass ASLayoutElementParentDimensionUndefined as the size will depend on the content CGSize size = { - isinf(constrainedSize.max.width) || !ASPointsValidForLayout(constrainedSize.max.width) ? ASLayoutElementParentDimensionUndefined : constrainedSize.max.width, - isinf(constrainedSize.max.height) || !ASPointsValidForLayout(constrainedSize.max.height) ? ASLayoutElementParentDimensionUndefined : constrainedSize.max.height + ASPointsValidForSize(constrainedSize.max.width) == NO ? ASLayoutElementParentDimensionUndefined : constrainedSize.max.width, + ASPointsValidForSize(constrainedSize.max.height) == NO ? ASLayoutElementParentDimensionUndefined : constrainedSize.max.height }; - BOOL reduceWidth = (_horizontalPosition & ASRelativeLayoutSpecPositionCenter) != 0 || - (_horizontalPosition & ASRelativeLayoutSpecPositionEnd) != 0; - - BOOL reduceHeight = (_verticalPosition & ASRelativeLayoutSpecPositionCenter) != 0 || - (_verticalPosition & ASRelativeLayoutSpecPositionEnd) != 0; - // Layout the child const CGSize minChildSize = { - reduceWidth ? 0 : constrainedSize.min.width, - reduceHeight ? 0 : constrainedSize.min.height, + (_horizontalPosition != ASRelativeLayoutSpecPositionNone) ? 0 : constrainedSize.min.width, + (_verticalPosition != ASRelativeLayoutSpecPositionNone) ? 0 : constrainedSize.min.height, }; - ASLayout *sublayout = [self.child layoutThatFits:ASSizeRangeMake(minChildSize, constrainedSize.max) parentSize:size]; - // If we have an undetermined height or width, use the child size to define the layout - // size + // If we have an undetermined height or width, use the child size to define the layout size size = ASSizeRangeClamp(constrainedSize, { isfinite(size.width) == NO ? sublayout.size.width : size.width, isfinite(size.height) == NO ? sublayout.size.height : size.height @@ -104,9 +94,9 @@ - (CGFloat)proportionOfAxisForAxisPosition:(ASRelativeLayoutSpecPosition)position { - if ((position & ASRelativeLayoutSpecPositionCenter) != 0) { + if (position == ASRelativeLayoutSpecPositionCenter) { return 0.5f; - } else if ((position & ASRelativeLayoutSpecPositionEnd) != 0) { + } else if (position == ASRelativeLayoutSpecPositionEnd) { return 1.0f; } else { return 0.0f; diff --git a/AsyncDisplayKitTests/ASAbsoluteLayoutSpecSnapshotTests.m b/AsyncDisplayKitTests/ASAbsoluteLayoutSpecSnapshotTests.m index 24231dde26..93c5c72e44 100644 --- a/AsyncDisplayKitTests/ASAbsoluteLayoutSpecSnapshotTests.m +++ b/AsyncDisplayKitTests/ASAbsoluteLayoutSpecSnapshotTests.m @@ -63,7 +63,8 @@ ASLayoutSpec *layoutSpec = [ASBackgroundLayoutSpec backgroundLayoutSpecWithChild: - [ASAbsoluteLayoutSpec absoluteLayoutSpecWithChildren:children] + [ASAbsoluteLayoutSpec + absoluteLayoutSpecWithChildren:children] background:backgroundNode]; [self testLayoutSpec:layoutSpec sizeRange:sizeRange subnodes:subnodes identifier:identifier]; diff --git a/AsyncDisplayKitTests/ASRelativeLayoutSpecSnapshotTests.mm b/AsyncDisplayKitTests/ASRelativeLayoutSpecSnapshotTests.mm index 3fa2df4d39..d507f4b77f 100644 --- a/AsyncDisplayKitTests/ASRelativeLayoutSpecSnapshotTests.mm +++ b/AsyncDisplayKitTests/ASRelativeLayoutSpecSnapshotTests.mm @@ -21,6 +21,16 @@ static const ASSizeRange kSize = {{100, 120}, {320, 160}}; @implementation ASRelativeLayoutSpecSnapshotTests +#pragma mark - XCTestCase + +- (void)setUp +{ + [super setUp]; + + self.recordMode = NO; +} + + - (void)testWithOptions { [self testAllVerticalPositionsForHorizontalPosition:ASRelativeLayoutSpecPositionStart]; @@ -29,7 +39,8 @@ static const ASSizeRange kSize = {{100, 120}, {320, 160}}; } -- (void)testAllVerticalPositionsForHorizontalPosition:(ASRelativeLayoutSpecPosition)horizontalPosition { +- (void)testAllVerticalPositionsForHorizontalPosition:(ASRelativeLayoutSpecPosition)horizontalPosition +{ [self testWithHorizontalPosition:horizontalPosition verticalPosition:ASRelativeLayoutSpecPositionStart sizingOptions:{}]; [self testWithHorizontalPosition:horizontalPosition verticalPosition:ASRelativeLayoutSpecPositionCenter sizingOptions:{}]; [self testWithHorizontalPosition:horizontalPosition verticalPosition:ASRelativeLayoutSpecPositionEnd sizingOptions:{}]; @@ -76,19 +87,19 @@ static const ASSizeRange kSize = {{100, 120}, {320, 160}}; static NSString *suffixForPositionOptions(ASRelativeLayoutSpecPosition horizontalPosition, ASRelativeLayoutSpecPosition verticalPosition, - ASRelativeLayoutSpecSizingOption sizingOptions) + ASRelativeLayoutSpecSizingOption sizingOptions) { NSMutableString *suffix = [NSMutableString string]; - if ((horizontalPosition & ASRelativeLayoutSpecPositionCenter) != 0) { + if (horizontalPosition == ASRelativeLayoutSpecPositionCenter) { [suffix appendString:@"CenterX"]; - } else if ((horizontalPosition & ASRelativeLayoutSpecPositionEnd) != 0) { + } else if (horizontalPosition == ASRelativeLayoutSpecPositionEnd) { [suffix appendString:@"EndX"]; } - if ((verticalPosition & ASRelativeLayoutSpecPositionCenter) != 0) { + if (verticalPosition == ASRelativeLayoutSpecPositionCenter) { [suffix appendString:@"CenterY"]; - } else if ((verticalPosition & ASRelativeLayoutSpecPositionEnd) != 0) { + } else if (verticalPosition == ASRelativeLayoutSpecPositionEnd) { [suffix appendString:@"EndY"]; } @@ -122,8 +133,8 @@ static NSString *suffixForPositionOptions(ASRelativeLayoutSpecPosition horizonta ASRelativeLayoutSpec *layoutSpec = [ASRelativeLayoutSpec - relativePositionLayoutSpecWithHorizontalPosition:ASRelativeLayoutSpecPositionStart - verticalPosition:ASRelativeLayoutSpecPositionStart + relativePositionLayoutSpecWithHorizontalPosition:ASRelativeLayoutSpecPositionNone + verticalPosition:ASRelativeLayoutSpecPositionNone sizingOption:{} child:childSpec]; diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testMinimumSizeRangeIsGivenToChildWhenNotPositioning@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testMinimumSizeRangeIsGivenToChildWhenNotPositioning@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..02717f8fdb7afa87892b61d4e4638fa5ea022138 GIT binary patch literal 4955 zcmeAS@N?(olHy`uVBq!ia0y~yU}|7sV07SM1B&RJJqwaxEDmyaVpw-h<|UBBS>O>_ z%)lU~3c`$@K`I}Bf-;#d{vkk`35Y>p0T63IX&{>`X7S`@Kt7j-r;B4q1>>6=2YHVe z@Gv`mzhA=i|1g_b@d42VjHz6f=Pmo~nI(UmJMdB2p@D&s$(8Zw|JXk^DbP0l+XkKb|Z(7 literal 0 HcmV?d00001 diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testMinimumSizeRangeIsGivenToChildWhenNotPositioning@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testMinimumSizeRangeIsGivenToChildWhenNotPositioning@3x.png deleted file mode 100644 index 3fb6feee42c18653fd93b4ccd872720f61f834a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10308 zcmeAS@N?(olHy`uVBq!ia0y~yU_QXW!1#cJ4JeZJl%)koF%}28J29*~C-V}>;Vkfo zEM{O(v;bj7*J*|cKtY*I7yl3-%>=|C@BxT5pfr#znrb*Js0&CNdb&7HIBxM=z{@c$h>1DlwXg&hlrfPzB<10xel*MUQeugmJD zOIBHCa zrkU_&95|u|F&Zd3fkj7j8W(Ry!qP^QH!=wE4WB-g`g_k}Gf7AihB|~pz=LTTmv<|h z$%ab~Qe}Jy@rcSFyOyi^GD{h3M7U0c(Ytl26SGuArUI{ZJ3@SoP0iiQla?{^&bWc> z=B0;%7Bcd#F`3Xd_b@^{Om5%1OwY>=Y(6_xy%Va_0 zRJKbSif6#Z51cxD-BveK>Ow=OFFZIEI3u)lL`Q=eoE%4kc{DW(D2x^wqlLz3*^H>_ zMytTlmIg!PXiHAq(7ea`FC4#2_2j0Zp9O>_ z%)lU~3c`$@K`I}Bf-;#d{vkk`35Y>p0T63IX&{@YO8rPnFpzfhba4!+V0?39V=jv$ z5A%Vy`(J+E&1|&9pu*zzlO+>AEu3^A>inJGcEe%-yVpWYi0RQAdH=GEzKb@ea42JlNJ0Numlz_?*m!_ve| zu$2ZI@*Nn~JUV}Mcig{Ng3A2sGZgXsOa1!0@Vc{Y3Mixm7+4RiVw%>r^dQLF2M+9GWZckYAO61T zXSpOnWj~j`dFAcA-~LP0igs{tGA&?;2t9CVg9+GW5;x2h7{We2e-*3$Uyq>@sL7D*n1|di`{Q%0?60Xkx>cCPx$7Xvv1B030pZMypXgwe4s%I@)H# z*R&h4ZMH^xV8`PB|2W5kT?`D|jG!LH+nd&tWDI#+4(|QGG+bVqEpbtNo6|iDmPsL@ zub)4^E-zd$|G@k6=hyE~1GON5t>awg`u~>SkF(rUe{ksjz7OBh>%r~6|De|8hb$&J zK7MvcTlG7zQNH@e=YLDztlnSp@_l@j^%i);F~;}6;)fR@&CmzH_I812{k~tZ@BhZ= z{r&5m-(CjqfUM@MFtLHQFz*1H((4|b|2=)v`hS;}?yrCO_5vTQZ&6^%*x%+3?WurT z$)SIKzAE4Qy?E!B@A`XXZ^63_>(m}x{Ez|ZgcJZ9z&pC^-^ZWY_se_wzkf@&J6pqh z1Xo#Xq~xHr@H=1+Dg5K})%U;NJOA|3{rz9cGT_C}j#&-vhZjS;4!}Or1Fe61>NS7A z(vSW1d-^@TxA1B#T=+vq1+-VN1K9nEIXZuR-Sukw>E8AKFWp`!3u~f300ts&KeWL= z8i+$G5dS?BaW-HEcaMO?f)rr?t)brg!Q89N=OMZ0|NrGIj4TKR2gDuX8EP59sSem< zpTWpzuwqY(ibKpG8&(NGvI7e-4*wqaRE{9x8=lT9y(R=fmk6*G9c`njxgN@xNADqqmy literal 0 HcmV?d00001 diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions@3x.png deleted file mode 100644 index c2bf62b0786395a78fa42272875d4077801e4be0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12389 zcmeHNdrTBZ7@yr+F7EY+&G}kHjM$6N|k~Hl|8jI zzUV26N<2B57@DAP6?_#cTidEg;V#9Zwknra0ShV-q=LeB7I6341d{us=|6MHKJMmb z_ct@&eDnLh-|UOgN4UzS$^Zbak-G3$03<8`n0=fS{*wBb*b6V%w%CXTpuBO~6ZnNp z*TroEz+*0dV2cX^Y{M0)|l8 zboQ1#jX|DuZ;RAj0W|0x4@jM|fcZT(VYmWc>i{N6Z~e1ndr4&!nc!uamf8G4l$4?w zZ0IDhU@LLOO_jOo=;V>Ns9AO`3r=0>UwyT#?;cX8XaV8Xzn0afE+bichE8lNe*%a$Q2-0fLsA` z1t@$&(I^V8QLX@Ga!_Il<=If$5JO2_l%u9zLG6L#dUsc80hsbJFFHK^H7wuVUruN_ zuBmbJd?oE3GCOYER?T{9-m#MSTW#GhBXEUL8-cf2+d3-bf<_=6OtmKmKly@CDGm9= zVE>nujYcuG|0>W7f`O4CQWfgU@(%@R!SDlvCse+Cez~N3rl*-&%*7K^$^f zi9w+Uj%$_N@89EET(hG4fuddKOn2wra5b%d-%#h&xJExL>)T9bsGRBU+CTCdD~_`3 zof=o~=fCW@LF$(wMbBbr8N zHDX3s23n2y#UHIkh}21`5f1%-lRDO#xNMw8*v&J{i0^LEVws@p<@lXkXomG}zy^W& z({_$qMqq@%GlyumVL*BxRAZTvpM;G@Jh4BeHiJF8@Nb%G21>I}f1NCrc4>G@EmI3I z179!w8iULG$@Yo@WpS{d7=zGsEe1L6az@;A1YsH`NGH;^Xl+)}C2qDgp!c9yng~l^ z1qaj+zaFynuuyE^Q^ligrJsp3UEVoo3@rNY-s0Bm>!HN-@W5ml~IUA7}ztTV|kGBaIh)lAN{-CjgPooPKZx{cXQWhG3fx&b0^YhHBA;{ zCbgwy3@pJ7zvULSx#e6Jk@c0YbUC)>Dq`6)?SmB_s+-6SB7(=oRMvyMLR^ z>};}mo_Bv=^Um|WRgj+>#p1I708x2cbBX|9U;sdh2!wi)GCWNG0jY~}v%!^-_r_FM#F`6a*U^1HyY9PQFvnVes|uXPT`c>?e%*u>QM7}ovk^68MuNqIv3=GM5|4A zE4gz`)ZD7O z*N_0A!G4VV!+?j4tlr z@Q>(h2ihPZc*x-P<3)iViU9XoFGfa@kkaIjQdgdlv^^QcT+h6clF_++4`D!o0({4m z9uES>^xBJrxBtsz7)T2OyFkn4^@%GI4MPa@uv+$iPieh`+}3 z7=Wj1&IoQdc+vf$4pHsifwPTI!8J4yg#^=~DbsUeW~^VpwB^dnC>A=Gg+W}tDiqQv zX5Z{9Bh>d)AOhU@i5x%0Z_)ZyTA7;b{_KN`}`VbdT~G z?crxkgk7YOyXFT0Ku?l!KxJS;Gzz6;(*mRIo*Z694oItxLZl!7;|j0fexI~l{t};+ z!YVDP+t=2=Ebu5>DTKFquWy5x&IBNDRK4?#n?Y`T+>T$^gtO9<;y05_x2-*5(Ft8lYs;GVzki zECr3?4%=`8cYJDFO%9-Ul{nc%(q1(6qz)Nv!Tjtx-SUs5H0Krsta4e=YbkU#OiiAG zDA~wlFv4duXcTx^)htuq)rer=XL8C>1P;jj;glD$Aw$K@hNhLI4araFWE8YjF0%p# zy(2N99R-wZ%s)e^u z^9g9R%b^H|A{>fvXcrFc!l7L_G)OE@NufbvWl9PS5-Wp#Xck_XlK!t*Sf>R5kmUD& z^PdBNT}>YZAKXo?uFQ+h$(kU?_9t3SXsq<6nAgIkJ z=8}kd=Ym^t)3vnOx#SSGKybUjH4QeR|gKJjSo zsKu7vrX#n9MJtrVYp~I3SDnXa?BUurl^kZ7Nb)NQ9tm$W#B{e{*21jaL?dih-STPQ zw-olRlq;5e-_9LY#iAmNRr@WcpHjJa>Byk zcKaL83d-;QT6Ky>uk4(9!4|W!`Wq0+?Jf<-XTnOIHKoqFlau=t5Ly}#fVs_2L@(oa zWKZ@89fw9(CdPLh9Mf5+=Q{HhsZ|`Pg>2>m&cydStI{=+U%&mg$s~a z1#?t_LCe};?0|t?_D;!Cq_OJLe##wANb# z%-?7fA8yJg>KLtTgG1kPFC!UanaTl-h>aH8^UxQjSI{YYe>qL{=8!?+KHd4-$uMzJ zM~SP|5ee6D3)V;}_Q=GVjKPEHCV+^^C~T4cSVT}uTzz4_^tk#rDrN!nko}WWChoPj zb$)?2nWAbp_RQ~{sM{Gd>e+1*?#v1zib}{TDRCy*$CTt|R3ovJ)fUKEHVIt_YN-)# zYGv0|J1$c>_}Qu0qlZ$DYZJ9JRbQIy=Fsm)f=1!{29C5Qq2>z38Y#O8dp9vH`f?bf zlOO{VuVxB&&@qE-Z}zFPMjo`pt#NAis2Fk8Otn)~wdMEwjP=%%piy^H>TT|0IvJhU zRZ?>N0**O;x|>%(C4ofnBZlx}K`n`%QH{92=X~cHrwY)!Unl|we;h@1&N}W%tI7B{ zXwuKXA`tW%Kr(y4c0>lSBdFbmkWh3D#Zbeeon!o+8Xcwv;rPAF}Trot+!yX@;`6TnKwT13b^63zK+#Gxz zgzTo=DJImA=0IFpuw|4=!$xdpLI^-efsg_r1wsmh6!--x5P-x@zf#SFAO4IQ!9m{3 L`8ijzmHPhxC;K!Q literal 0 HcmV?d00001 diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterX@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterX@3x.png deleted file mode 100644 index f1d9c2e52fe5a5f7ce81ea0b9bd77fae471de712..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12505 zcmeHOeM}Q)7{8D9pl}3I)Ry5!H&I;X=wUN3ld-FTQKGSokg3_E$JB<8z*s;6}4e}wyj=e4I-TedEANy;0o7_j= z=e@VjJ@>rN^LwA)_2cA&i2;7k`5_1rkfe)GK@i-EAn3R+0a~*DkeI*$%}+_(hcxwX zeF(nD@^nY?5#+@^t_@A7iDE$G*35W)DmY?bbA9Y!+vz!ibERX#bXg9LKPJU%Q;X2) zVePpdij-(qSMQzcQQN+Ln_6tg_Pm_;xDhY_Q3FWgS|jkm(q`xm97i^4K-jVj78@UGdE-Vq=Pat&LD>fsMT(?Mr|^9V);7*t`JfEgBI1_-wxfP~l^t|s96 z2rez*Vj0#MVC4iBonRRaRv=+b6_%s_7X|kEB_9M?U5&V!;)@^(lZ(-q8PVo$iweSN z7oTx2aNu;zw?We%`ebyNw=67|#~D_STM?Wr2zgrS1e8W5*8f9O{^0DxrQV1Nr5 zFsdw$l}bstNYuu8MD$6(YRpMS`=w7tPLh<>I^&^2M#+go6^3e7EQ(%ZNk++rNO?6~ zPmkSTUbyL=xAzgu7hFw$&OLiH>kot?5#bS`LkXC?H#lRj!gg#p3fyp8=o+^IZp`2; z12{k=@?hf(jk!ZdW5rm`WM%QRn_MZxeN_~=I)|8Rw5WklBntJ4QUULx(wk@AqpFVH z0jB-cOV;$!w@V6KPsHvfHFg^EQv zUQzNpQ zNEil%bOv*lD4oHaC14K-Fa+!Y0fqn+A;9==00uz7F2L>HIf?Sk?G-wW<7|lQg(>is zlV`Vy2}BG&+$ryOw`2>s)9TlP*~BA|2b9UI_7Z#BUU%ZH=2l^7@>an5z5m)i?Ue5b zTjmuZcY$FxGtyeI63SZ2jGT%?%YJ|D?x$%vA{C25*YACQ|H#Vr195ZdyzYm=Ft1qs zDAA3R6qQb+L>cDj&aMgR9Nq1;2zc!*di~xV7h9J0*OpH7@Fr+sX!ISRxyW`(hUsQ8 z(jl2YJ-kcv(f22KMVRrN^?Mhn(`PSI%e`lK6EIyYb`5AQGAdZonNX>6UN+_5e8f1P zb(dGfY8~64cUt!Yb^6@-K;8t_N>q9nXf84;pm1ckA2k&`ph)}9HZ@ekE5dSZ8}#lp zbsD-SwuSK~;G{TklWT}ZFe*3;CN?nx5oYx*<7b17ukwl@_y-&GE|Ha3Og|;Y2`2Cd z!vM{Vf>FWQ4&a$)J#8rJ+kNHGySySO@nD1AOY+5X*@dc7!Rw)eLkAc6m3KNo2N$NF zH{Qbt&gV)#-opqkWFtP_!w4?q7cZcJ5JiLxynyCkLzD`ezB}yd;LKUqUk{QJ4#qd_ HV=Dgv;q`6* diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterXCenterY@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterXCenterY@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..311ef9ed327356205ab0e43cfee0f69c3c85b6c4 GIT binary patch literal 6662 zcmeHMZA?>F7(TbRz0z`t4O*y(icUp0gcdRyqSBTzgiWnNb($Ku0|}T6=m><#w=Ol*T#Uwk6u3p(*lFdAQ47O1jo`jI#xyz+V0%j%9Qoj{+Zk+C#UE1 zIVbP?-1olcJx^)Kb=G$k{?QB3^;O0f<_H3yVhUgq(y$CmzB|O%^nKk<4-uTOeU5O( zc#nc5z9B&Ka3OV_DymGB4EK#k}PeEy?V1 zfU(rEVI%pUuS|%pfcEd=B1A?DW0l`IGC#`;%~9 zugBZ?cXPB_ab~@pxTbu%URqKUBbb?(d92Y9QUQ@V@i=Iy7C5j}G{7~$V1jlp!ls8>(s`Z0+nBzQ^2__1bP*hF$ zwY&KjJZZ36Iw#l~Go4l^(H=uM>3~m=hAv0xZXWJhie}dxY!FA0hG98k)0mVyB1HXa zMNXlUm(;3bYO9yvYNZArvHs8quqv}JCCR3oYHM9fd0*aNpbV{3eU+| zJ~ZM+=Sj<^(X9v6M3$jujn%mbA0+6TUL1*FiTA8~MG{*HUY7Lm(_9jI=;e|nCov_B zMk+4$hK~$(pM4b^g%wFp>EF`RM#So##;cODXyS<62QoJol|e#bRr-=SmS&b_Hk#R_ z!6pqhHz$hTq$4nb>yts7I((XplvY@w0#+?mfIP#%#9_^a&ip!NE)M0M0#9Br8tfdx zyp*)Ir1*qW1r%n}K~aTIxJB^$@Q{SM?4es5RL|l&7%|rv2w@GON;E59wc}qYHWzA0 zdu%N?hw7tsXY*)jjX_qxCMd(okI zV-iEz%|HlGF{m66_#fux*F{|+q^F(JIy%|1>8vG^aWFd&LN5d6qT_xQetDpW&xXev d7#@^7wrW{H&9};j@b4Lr@&5MID=Ea$e*m2=yp;d| literal 0 HcmV?d00001 diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterXCenterY@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterXCenterY@3x.png deleted file mode 100644 index 8093c8976182b151e956da8fe503b78d47c45047..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12274 zcmeAS@N?(olHy`uVBq!ia0y~yU_QXW!1#cJ4JeZJl%)koF%}28J29*~C-V}>;Vkfo zEM{O(v;bj7*J*|cKtY*I7yl3-%>=|C@BxT5pfr#zzH(ySzR5tk)YHW=q=NCyEyuhV zO97XI`~ELY-I;gcMDJe-i8Fa05|=qm)v2^315ReKgbVW<-W@&PEstzaM1$@Du>_bhum-r=t>?2x z)dIt8G#nslXEYo}!vR=QjFu0Of^{?;M#BMX9gC}+)Z3>CbuXAjhU{m#nivA|4xj{9{(V0+Hs?B34DA(YEncOo3eNaiB@Cz*tiYxe`_6?gjSqoeSWbNXv~39X$}QYQ^b@xOq|mr!5_&uUYK!ECnC9l4eEx5 ztFBB!H-wRlV}=>``|5phpeqn=*xm?r!>E@=V`((u!SnNIUIG_Uqs7B$AwF6!jaIdg z#>i;vVYH1m+H8e2>_=PTkiN=j=VG)Ai0Dz))cpgF!~g%!_F*w_L|^ zLmn5$`~NTX9cIord^cHf#?zXHw@p!3p8x(?^LH|+TYbUk!_Qxn8(6k+T8KwKUv&TS z`;)+aH(OnO(*#Jbd&AxzzyAwOXei!TrZ=lSlTG4>`G?=aEj*wu`z*%O-N0_W|AI2T z8IX?mWkmj5|8JiHBj=TKte;<40f*NTcJZe0 z`bKVi%Jui8&Ahl;7s;r6;EF=-4XiVeLtMfl@c>>EsHV9^GSyE(wPWBbceqM!JFy1~yA?Qr!En(!$9!o5B+?Mv2a zgi!}>HvrAfVFWF&K*XINFz%Y`n08Iy@ZEbx&6C4$^#upxgAZnS((gOfH-ClH w4a`6LoAFG0szFB%hR#}Kq&wajR1$1xXw=Y0aBEmkqYX&qW^$DLiEem z7Xc7Ho1I8z_IplfjLuJ6y%w%0ob0HBQyy61ci}6ds(BM!TQbv9)|McHy=OkdQV3qk zliI}D>7ZrF%8C!~+(Ji(iW%3q;flYLLU0Mmems+Sa*B2Linre-lr+EyrBkN?FZs74 z$iRlLq@h47y6a0!4j4iKUvsKF@c&P69^HHOy!vkgPlIF)XeW<1S0ae=g8tO%DFcFJ zf!m{#7n8Cr8t~2g8wPGo88jdaoLB$*+R<}U2JTue$Rx#4ihF?q^@A%HTycbb=5;y{ zitow$+%(5I6e5^*6~WwM0cE~n|JuN$*A&P3tLQE0cXMq==MhbXEXj-rA?e-V-?I&! z?{+J8CY@_-r-0<5Z!WLKo-9v`oYA|IuF^9r8?;H`us7xb3|~}XwSQ0PWzkB#ePVBO zn>(*B|N6|bkWc3*zZia4b(J2&VXy3tpeb`_|4`!`#|{&-qj70cHNk>0r8>Ohds9y= zFn98*L)@dsyvQ?nwDXfg;*9txjf2>+2{9D z3bYGCu{Cz4N2+_HThRF9v{|wFuFT@IvObr~>+>8p6HQ0Ww(=Ohzn(HWN7N35$&}z6 zpKih9ox5;*E%mUA@UsMgR?X##bJg z08Cj-#~t3b>#-P6X8G5F>V@IF6UXQusOIiok)dFW07zW~t-+5B@2o)SIx+4m^t=hM z{=&+rR)d$wmp91uo7=05GqFO}5siW}6LI}R^Z8-ED84O2oeRA%4_i^kPiJH@7RBI~ z*K!?24|G5Pnx~ut_;#hk)M^3}xvBM`j3{g04sr%A%liw+`~vjYgaT|2Ri>>gIilH>Xw43UKW)*}Mlx3m6 z%<^!W0t3+u)L!quO^l7~J#TQ{GNt}=f2z^cq2UOB)X<@Tze(Bq~#E%}m P0&rxeuS%;=B`tpe;{dF1 literal 0 HcmV?d00001 diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterXEndY@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterXEndY@3x.png deleted file mode 100644 index d9dab946b4e9a78e904c124a72b6123267bb9b48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12004 zcmeHMUrbY196tBA?dj>o>1Q2&EJk6_z8U5)h)qWES74dBvQ=9aUd`U?1w6*s_R! zsO?2x)+3ZvKpM6GQXYqIZuz>OKXX@mP?Q! zYx@o|1Ty3uK_{3Nb_eVZBFn%Gzzo0)z>3s7C;}(~D1z)ajbDkqO~HK#FBWOhHo>e(H|N z9{Wq$ki*fQt6tAm-%bOY7SLuPpK#d8*%QD<8&US9kO!EmG+P8w&L)W1vb@87Jf$a?2AaG1&=y+ zTim_y84ee3pUQL)dFV;MumgjT)IIYXCSLR&$KeZ45uHpxckrQKoyUySdk|6*5S~0> zO2obVtwz_`kuxN`F~f{_8F^xA6c7gZI0W->yF>kKn-aMyf!xy-{ocitC?Vu0AQb8F zs)gP|j^fCL$kZPOJgO1`8;3wGR>^CrK%SC7KGYlxCE-yO5S}I=z~aH;!OoM(19qN* zJpOyybh|g=8f`3Q`sL+GgwpPl;_ULQrS+as!&qXmsn&aj@!m3{e~2#FZolqs>YVM; z5LLLuyWbX@X&ddYvKfMVBAuA=cdazFT%a)bmzw%3!x1Nw%^7C=*Uq+AJ9sDW)t-}| z?4a6o>LSkCJ)j%^NmiJpxKh-x{@`Z>H(%9BV#Go(Eh&R$#PG58|ex|0;wR@N- z)==#`{_U>joWaj6^rjojNxs*zxD3ZdqJy%+AEm+6$%h_D268xpWPoG%ke71%qab<_U4dU3Yw RIexK$iuWHZ?Ayn+{0(j_dR71c diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterY@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterY@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..94db1b131f8cf4a64ff4b9db4d50fca3af708f7b GIT binary patch literal 6073 zcmeHLdrVVT7(chribx|NBDFFf$yjt_ZB-a?PezPfe^xDM4>nn#8znybYP+F&bhaMcQmn?}TRtJkX~c9xJ?O_{_!F1ipCR^?I|Y%NBvzytz9(APTF#@2pmeU>$rybhUM915Co z1-1{zSR4snyefb(ka0__;>Dv&crO$%h3QMZ)~6PQf)?(urO>g8d?OBL)#M~CC6fC% zSlca2zgS&LybNOn3bFRC7Vp?OtU%MX61{V`l9)<}U>OL;bsN3oaMmmXr(+*=J+(Ks~~Ay@#!Q{xEs2|;9jLv`Eq zR2b!8Xlk6PB`c?=;$O0Vm;b@QE;f!o+0GmezZw(GCWGI}hS4nBi6xoiM-^2kiS%Gd z7O02$xwR^(G=obf%qYxNrm2ciVo(n`cFbRd@-xu1!hO@JlY7MHO0+){nI<%%)H(IG zWN6}K)_g}9%0(eK^+%ga`@D<)E?ab*Om$TNOasn`ruMP<%}XrHQHtY$^XtWQvt!tJ zuj6VAnbt#bC{I(FAxclXwPML?l=wk->SUwwY_n6V-6JK7OM3yzxyoRU(_PV%v|%q< zJ1WOVEc$+zd>8i|i>x6oR1^f4@e12g#fHu#!U34z%lI)(UAplns!JrZU6Q5j(R+BJ zTOCAkl9Zd#Mr{rkjJlF)Pbz*x4p;^@zkKRW`_rPKcS*HPF=o!C_3)$YyIHOdT9+Jl zh;43tG_8jxM7`D7AJe*|)?n>ZYiK=Os9t%*A)ck3zF?Sh-|;;U3X@8LQtTo(WA|a|7`KuU1b$zaSx6M zhS#(`wU!3of5+}RYH(l1NVw}`sXXtGZD9_E3+#OXwQ489hV6L}Eb+?VjL3y^reP5x z`Tgv>_3jP|AR~06GKJL1UZ*b3!=tbT0?8==wfSY9JFVWKp|Ax4dMStkc|o_l`IUST z1-B8+pr9v2=n+j_jWLD-w1^i_;0}_OdV{sqc#n1s-x<#yaA_$lfFLatEUp~C?hqHa z#q?{K)b6+P*%XSxfb@ZaijdpX*c2nS)wF9EZvr#*BV}ldb_i^wA+l$nO^Px zTIEay+foB#$tDuEsyrxcF$Zi>c0<>(JVJjO@OV}xfMTzZ#c9}UnpYknJrcL3+hZ|cPO&L02Hg4ntli82!E zh)eRvwbt7=ng$7pgmVb#CV#hR5Dh8k{`gfBpP0=FPLcwr-w_VipbwN?<8bax` zzvsh3rfHuDON%JlgCeG3udnU*2gsEC`|k-5djPNGjl54Ug+)L`9i(j9maI#Z9QzBZ C(8SaL literal 0 HcmV?d00001 diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterY@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_CenterY@3x.png deleted file mode 100644 index 7e824c2073a478b89c80778318cf09300a374f80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12114 zcmeAS@N?(olHy`uVBq!ia0y~yU_QXW!1#cJ4JeZJl%)koF%}28J29*~C-V}>;Vkfo zEM{O(v;bj7*J*|cKtY*I7yl3-%>=|C@BxT5pfr#zZklmC@ehz@^mK6ysbG9_>-5?f zO97XI-|oNszESbu(U)8tQJ)q~?MO5{`SVYWo&CR44UB9O2?*lBZQh!Ff8}4?e{P?I zBGJ%T&&;(!yx>1O12d1o0XR``sDX*+7w3z-KX-l@B7_e#Fs)(GK7g$9zyVHXE`t~9 z3wFOPzI_~S08kIt2B2bNB+U%W>O2|;7R+yWx9xncJhFWn2Y`ytAZzBCW3YgsxsGYq zZM*HY$o4G&+RtTxtl0qW*xz@)jXHKTWJi<1Xa)loU8BihG#L!WWbh&U|DTBsEGic~ z4qPzWf~cm&fHfvJ1E+_=-MrKDC!K+S<12Y%bKW;s@e#(KX`unVXx{Yp3ZPOMWh1aedBmx>l6GrVB4Y$#BFq(gO z3`WZXiGReiG+Hl=mIt6t!)Q7fO$UP`9sB_fkpKUmb#sO< za4`H3XfXWkEyq3;a{=Z9|NbwpPXETt)OLc|n7PfLSyXCG!BUN%pMU;xX99MQ-I?y6 zfBrgN5;4U6=jws;WtZ%QCN!{E3H^B8e$L8y61-de;Ccho8wLj^p%tD79vJOF^wEWw zxeCr++yA%?)E7@-I(htD)M11+2ga}lRfWb`sC{$=U?2T@&R_NSS8bx1WI0vjt+RQ( z5u@;|5scFsSh9o+w(#h}MH`PaFvV>C`hLg4&)TX6GaWu{MC;sxI`9kB7@bdFNP>6y zJ%FR@rqTaTR-2xm2J|s0jD67lJKbmkp$KVa44XRR6s(Z{!`r9 z&8inBlH|BPX{-G~Op{3ph538JKj(0ksF32g(I^5X)X^v!%|#8+vSc(DflA@gf^M`f zl7Lo}qjk|}bAfHNMF(o^jkf53ZT!(jH>m$H+FSs21EHO^(dGi4=0fBA*!2P_@L6i; zsNsE3*ZIL~`!9e0FRVU(&k$*;*8l(O-31)rol8i!`bPc%-VM?T=Ga%2S)aXKKkK<{ z^>M@+Fnv5L%l=t$ekxzyicrk+#vIRzF~85>=0B@McI1K6c$T>B_iOrdH&YSGN56UT zEM2?2=kM~$dmGCU3)?;z;c?9R$qM!5Q77Q@^al>q;qmD^ll=dg^UB}IB39V#0rvlK zt)u((TIIz3xnhVl1qK^{5ruOx-)OMoTDmwI>^K%`j;3}T%Th-R85}EyM+=z|UC8`r YIOu*z{y@s-y`VMkp00i_>zopr0KzicBLDyZ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndX@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndX@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e4646195719afd7df513e92655ff095e71c83ccb GIT binary patch literal 5656 zcmeAS@N?(olHy`uVBq!ia0y~yU}|7sV07SM1B&RJJqwaxEDmyaVpw-h<|UBBS>O>_ z%)lU~3c`$@K`I}Bf-;#d{vkk`35Y>p0T63IX&{@MciEF~+zbp{H$7b(Ln;{G+&IX~ zY{uJA@Msv4**`119Vwf$kR*y9i1+0+=978V+T%?U71V4QMb zM#H7+-tYhL7=y%m4&VPhon^|gqbDI2-ECkEU`l54ir3%!+4u}d%z&@{eY{YBl(;&` zB@E1^%wi6lJ)9b~d%v7JZvYZIVDV>fy{AKF%pABw7%(03Pj%EGs8KT-BIt>AG(<*2 zWV9R^Em=qFn$g;Kv^_F3TWIz34)8ND{QqyGn)M6V$lU;H| zzRS-X;nq18p6XUQx%Y34{rvUz#-J9hM8bn@jpwi13s=lKko!R{;@fd>8aQydJ3hpu zaX)88!3;)78}vGFM}yi23&!dHel7j}TQUu#xuWLhZ?-fhy|^qYu#%I(K-$JvkuJIEj%lfZ^Y?1J~yf61Ze>VR)@9yC{8q8c(>)u(HO9^ys+5tA!v7DSnfQqp2l1(PQ2byCTt{L zoCvZ)1L$ZB8%6_RG$o8?htV;Vkfo zEM{O(v;bj7*J*|cKtY*I7yl3-%>=|C@BxT5pfr#zw!8Yyzga-K-P6S}q=NCyO-C+g zMFG}>JO3}`{m++wae`8c{@hb5D&D{QnRS4Hna2P^INUy9E6*w-A(HX`B5%@uez*h! zb93^3?k!AQHLN@#yb=iwjBF5Mg>(UHm_wr{| z1TM(P_KGd0K{OyC=)i{6{MN6Nr@+ifNGSU9{nzparnXMrR=8k8<1R+=1Xht5A_i|> z9X|IRp!1{8u(J`{z18bEQXF_b+uuP6;(VKI7(Ym{ zurVSF>qrDNh$gVkfRAZ`44GlDfT7uru{Lq`Q}bK5j1UV;3Z!wXzN_};Udu^$J4Cg} z%_fonT*Z+FA3Oz5!SiSwSm5sveq3C-l15HuE`t}s7sR(k)-7JEi{#DicvR;edgnW%=E-4rPhmrX1JGpA1f*^VaDMPm z0~60LmM^Wj)9zXO+Ts)g0$e?nK~05y#U_h@h87)j8mFsBBWaza_Y8cM=ACjL}c8M1_uFT-+>gTe~ HDWM4f^iQs7 diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndXCenterY@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndXCenterY@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..04ee2d6115b1a54202579e008c896824273d320d GIT binary patch literal 5811 zcmeAS@N?(olHy`uVBq!ia0y~yU}|7sV07SM1B&RJJqwaxEDmyaVpw-h<|UBBS>O>_ z%)lU~3c`$@K`I}Bf-;#d{vkk`35Y>p0T63IX&{?BW42B59UyJu>Eakt!T9FJ?m`wr z9+!h>?K5kgDxL|%YE@=`XyX-n@cnbG{lC-$49q+RAmWbUhnsJ#XXmbeYYG+lBYlCP zit#Jc8K{!uJQ)oAxjRmte{viuBIUrlU}Zlen?ynbBU_*31qQj>1;O*-A|?$|4#DzJ z(`1YnFxqT;xXcbNlEGlwu*?pkS;8XCfw>~*ux~9~;g&t%Bxxxq_{Vji1O=?(FSYQOsDI4+}m^B(_G%SkOuX>$61C%=y;{H8ddSZLN z+JX$3Igs4A23Rn7DX1-YalQNAFUd5J@g39u&(4pk3-u&quK9m?j6tqAa{B*SbKU)`R0!BuU#a=&?QBjBDRy;88S@&LjfFZmHGX|v zw7sqk?C(cU|38~OEk0C;fQ|e2i2VF^mPMquc`~F(C}oy%;5@=2^0(?@wEbbQzdwGe z|Ll8uy%r%GB`Om*5GeRn!yKM8W+jF{bmNaiq{8|jXUUN<0$0EZ3+^@u z1~4TudEJkL*R3{x_BMJtWadCC)-BQoz>3w!;pJ^_SY_DKzW=*Er$%otv|cJ>W^>?d z;nb+DehI5fK79E8PnB`$#zIIPej)DwgGQqP?n4VP{}TND}Q2@F#l zW;9&dJ{{Hy;NY)+A1@RjB@L~R-?H&E2yqAp{Q7nYR*61*`2MdqlUMR%NPPwj6h6fm?>p6P)1YAX!aQ`Q-B>5niRAK2M$bXeBXMIeLA#S<1yHfa)2R&p>Fzt-)qe( zARV@U{}UNl1fb(C4UMYIaSVHb!$gqcyrI#MneD(v{(U98KStku2I+e40M<6V4SBGE z8-uh13>M!G-fej|dqT{UL!d4a#F~=Vu<@8tLq@~IU^JZoGdkV!&I4w>HraIVX!V=G Pv1A5MS3j3^P6;Vkfo zEM{O(v;bj7*J*|cKtY*I7yl3-%>=|C@BxT5pfr#zF1~lUf&>GD*kex@$B+ufH@8mb zrWgt^A2?~BS)Y_4w<7W2jn~aSSGKvFoIn5k^W*lC1_v0Jc@RX+?#A=m|2Ngy|L>Gc zXkcWMfD`|CH4elb_{)l-+`u5wfsw72X_vIUc^#551`8Op4{#YEn+#Wa+irX9sM668 z7!85Z5Eu=C(GVC70X!jafSK(d-@7^$g~n>8JjOdLhKTC=LY~9lsSPYjoDyYk51;!b zkqWP_J7oU8U!T5Dq4Bz~flrPGlJQ%l0~%Bn8ajb^NhCHm`96((V}3qC>SjYfSq4RQSe~i0e#@8_y7M~>rU_ihr2UC z!`*Lh8WtTk5MXxr`~UK$zm2N{5_;zPRB_#u;rvuN|M^#KW_Zt)k!=^R&3buYuXcjN zcl%wAZ{8n9>byRMotMeGZCa%xCNY35Srki!gzRH?TtwJ#fXuLiHrANx99XAWsG3& zKhM!9z*|p@MgeHN314GkG#7xfIKCF=Xh8%jW$_MHjuu3~a(uKP8m*2;tK-pJFq#WS zbHUKh1)z50|NIBl6TkeIe<}U97cp-N?kBrOb|et&OC6S2{;GJ7}kKIw2_mU z%ix9Z1@XMiHH)L8k-9>8z|JDm8U|x{7Yk&TFmUSig8G8poV)W6JyDj2D{o}Qqgww? z+E2Ib+Yo&zo;yHefNn`cbRB^#H6D!v3;Z3*h0E@@oOHKCDCfqbI)2C5PrZ4$NPgM@ z?7{(Eeg@w61bM(mBA~%>e#1MpH~Tmz_tzl0lwv?jajD){F#DALmZ;6%@LSEt z?h~S~9f4;-+pj~p)ACEQPa{I$K&}HY;zbkS@dffg!l4Exo?k2_=84~ZXVg4F3^;5^ zz^(dA>usI;FRo2Pgh1o%24FJLK7fcXAnQO2Bdf$0&KG%y-pw}nd7>SzJmDZ7)!f@7 z_g!483m=wXVBU@=$=+?bYo7RNB0pUDXaXNi;E0?(n!ra(@L^wqA7H=w?T~!tPTQZr P!Dj|fS3j3^P6O>_ z%)lU~3c`$@K`I}Bf-;#d{vkk`35Y>p0T63IX&{>`r`2m(3y`+(ba4!+V0?39_rxO( zJkE|!=YOenYB*UL8~*&{g-NzT3*JBfUH4};BQuY|0R|v(!SF+5S^CYg-0M(*5BUxZ zUs$h*C$LE*G%&JBbVv#?By(T?V`2{#5MW?+SlbVj0ZAvZu^hN@XsaDufW?6^;B_)c zV?smY3`RzSZ3S!nVFHYd0Ss4uLCj51NONH5(T#b187APsAi}WK4%OOUTVMjC){X}9 zXp$PuK%>P4yi6V~94V=RiqtnWE!ZtlZgM9Uw8S_>S>%7CUSEi zm1&H*0>i8W7L4uxel0Bj&tnX#aeMUtKlPrNeSc1a^W%djK~?a91EtJN3pjg(3tp_3 zulj!804(<7Q~l@J)8e=K99a1AK?=A+eXxs>@dC>+PKz(s`S<=#p8;}nLd{S8_^z1W z&sb!n`28T2=Q?Qt2Hymr1@(U~?5=MEyZPAk|FiFJ`LimOiLaMk9a8&W=jCWnGw?gG zaDUy4yY`2{Zhm~a{%6pWTjszps3 zr{TJUL*?{zrR)1F8QYIFPlg3DivwmL|9@t#yFY6t!BC0cC$jU~S;B#AzCZJ4=xM^C z@@eUbt@*$(AP~s=fBK$YAEibxRHo~@uB$C37|8$6=10|CH6j=)^htU;!arCU82X{N uSx4)d(b^Z>U>|Ld@bnC^7Fzwh1N?ezvgvPM=>wa(3=E#GelF{r5}E*4X}v7~ literal 0 HcmV?d00001 diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndXEndY@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndXEndY@3x.png deleted file mode 100644 index 448ad0d27d8a35e98fda5e6c2cafd63754562315..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11338 zcmeAS@N?(olHy`uVBq!ia0y~yU_QXW!1#cJ4JeZJl%)koF%}28J29*~C-V}>;Vkfo zEM{O(v;bj7*J*|cKtY*I7yl3-%>=|C@BxT5pfr#znte^Fz86TFd%8G=R4~4|b$YFg zClABHkN01G-`HrgL5=xP9J{L0wq29godfkR3=S|bLkWcj)(s44C}u-dZmZo^JE{^A zRHLCZnnIwtY&3Vg7%dq_%TG`RGFmE*mWrdLBCKUKS}Kl~ile3CXm0|kmp0l~B-B={ zIB?*8_ilT&1g6iNH<)g)7$VA$g1ZfWOc{kEW;UFD_bc^zO^*>=Zq1%w=l9S1$tqk? z%cLjFFM<^0>!bw^08P^tF1Q)H|IM8KK)77v)bRh;_usYL&v{1ufzd~YL`3ENU>74} z4wKpjBgW}>zn(t#Qz8{E7g70je!cByZnY1;SYp)VG?044G3E*lz6V&s)E;cwU3b$` zelbE$d;P!l^}CDfglG64NPX0J2;SX3aG;bK=uMx5R3^RMucy!bYv2y-i9 zFre`@8_NdH83#_W#FSmvw|<^H1umEH^lJUTuV?gU9C$5UFtcI-(trRk*cr@l2K)Yh zZ_oYoO|WB}-pS4d8$$rb%XMCk1Yv{5shm6Btcx!@cU%K5ci`0O|9@W3j5lb!PFk?n z|Gho;^XvmPq{Z;h>&E*NnAVdP?Eimlw|;Kk_>;64{=7cD?jTDXX~F*gYkv8;d|+xP zDTbfNpa0XuxrfAHe|`Vmock=#NQ>doj0MdlqZtdO=o~y5tA=Sma3uBrfAbd~r!p{z zwSb0D-`;fOa#j>zJ-GA#Qr`c3`4=ZBrRdK+wW8wvyPsL`dc)v=!|emM@~k2fA{qZL z@+R%)hZj=}%+1OBxwkNJ)v)q}@FEqxE2Ilp!yFnt84s_sd$R_)J~?^uKKBA9E(tX= zaH*``3oe$Q6N_d;R))E{%j4H;`)%pz|4VI{)?j zQRk0_KBy@%ns|VLFq(BC<=$w?18f3}7MzeSM#5;dC6O>%>q0ujjled~Xrp1Y$p+~e zj5ZoZ8x4?h0a#y-HX2474bYJjiGzW1 dc+OgP_1hu&^ZSk70|%xVJYD@<);T3K0RXgVDjWa+ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndY@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithOptions_EndY@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8ba7270db2946775996fdf45bea407aa9af589c2 GIT binary patch literal 5905 zcmeHLe@q)?82+xM$Z9JjGUeA+OlDw&PzEHJC{QSdk($wvK|9BfDkAU)KNfUAN9o~` z;?#sK&Q-H0kgbVXSz((-w3NGL>J)~sW({3r6wMg4bQYlbp6`0k`#f)YMtY=(&yC{(0Qkj+3rhiD!2m#_h;TfTIyp()fLcq73V`941UtUi z({lJ&D*(^ENDQdB^uP)pOlT-9If~CLd=Q_0d?Zsde$8!-D7bh6pYw_f^N+SePOI^p zQ_kb$`&{nMS3u$HxK-YGzUV;gyS`2Dm;gH!&PzuD8~+mBMi;H0*BHM(o=FB!1cH{H zmm+{#i|)YSqkXfhH~cXQ7z&S3hyYil?)zpXGLFH^62|!Rsn&^Qg>3 zQ1jF`zQJ5FIVK8bO*?8ryTIL_LQu@hBbGYPArcq{(QvtdI1|3r_q+(ydh=@THc(hU z_{v9}An|Px`0<%0&#^6_M8N6aKEWY2EB$1PergK{f|9}2trNT-8wFoGeO$E-6d{7@ zw@yGks^i8M5c8@)gD|bnYn;#=gLso)H)R?YKoc$JISy8aw-{EO9d69{tTSccs z2H3qx{45nYkT4L?&ha0dB@NQBS{Ibu*Q@P+gEssVdd=ZduBo-Xn%;2I`quflC5oUwt54~uyc^+YD0=|Gx+U_6mxbL=j!baWe)ynL5#GxoO zGT!GE)(!=AyMWds%ad4TZd`60>CUs+xZ}<{_O#nwh`VV?6N<80KFM3F9&_bM9}aRSocN)NrqvZ zUW30+S&UV|O4_uNu7gIOdD<0e+V7ysFBz2Y9nMOn3hD_z0xt7^tDKoYCTP=s7S_tD z<9vaE8F3D&BY=ZmVO`MZC{e<-X840VnM>(yi=|ET>YNUV7|C-hzw9Bat{=$DQ1dWV zM^?Nt%l}+-R0^>)+O#C(e5I;kX}zZ^(nBd%G|+S9aTh2p!qp8;309bv7i_h(X%Ds6 z^+J9iIK4cupDZ?*r6_|Wx6GudD)54o|InvzGx?1?+BARZNsn&8CQ#;Vkfo zEM{O(v;bj7*J*|cKtY*I7yl3-%>=|C@BxT5pfr#zTBz;N_8myudb&7Fa7=RNrR_P@h_yZ?g5 zC=xt>qy-M_Yxr%?Ad%3($Oa=CTNoL6s+e~5&hM2+GKPmEfl;SH5}V50`MIMip+Pko zN~0+Rl9^!nXf$^q%A?WTF`7F@bH`}Oz_e?$R2(f8L9Nlz8ez0X7_AXTYXr<1;m_0g z_G$@CY8wn0+ow5q!#k)Ck{lSK8D=zap7D9`X+!ba!;|1r4h-k_{K~IcSUg?rLlG07 zZo3$~1AE|T1B2KBpn1l^J8a&>yxx!k@A3*9Fkb&pfB)*AxxzPQG&rALcog1!E-+MR zVBNqujfJ$~!!Ryv6OFUyBBtN$Mpw<^zM(pP_Qp(w);-notem1;RmY6ixQrw^ao z%I6L5TQf4+e17%+)9zXK%^G_-Ew;!+A^Pd!%uEpsvq!xJin7tz8cl?wc?(jmjTRY{ z7Vtk<85sWmFK20zXJC*>2MwgYz3JG+Y$(8T@aO;K$G?fkd{I<1sJ^1m<*+o)_WWyg zMoy0f6A%2hS#K|iXr=$jeo#I4%j5eba{p%IC+CAk!D%0u2^tGE16`TQs zbc3owqYsmpcP65i(qZE{Fmv_)r@Lq6djox2bR%*#QuW4jfGq*+ol8MTb=0VL4vfam zXkz0T%{$DaMZsuMU@%$~j1~n9qea1i(V}3qC}18f3Py_p;Lz1*2Vt~TFj^Fh76qe4 t0dORLv?v%Y3Py{9(V}3a6$L*S4!R$bf7`He7jP{%gQu&X%Q~loCIFuRMyvn; diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1192d72e8d3b6759486b0c954aa34d5a6ee2c499 GIT binary patch literal 6102 zcmeAS@N?(olHy`uVBq!ia0y~yU}|7sV07SM1B&RJJqwaxEDmyaVpw-h<|UBBS>O>_ z%)lU~3c`$@K`I}Bf-;#d{vkk`35Y>p0T63IX&{@YO8rPnFpzfhba4!+V0?39V=jv$ z5A%Vy`(J+E&1|&9pu*zzlO+>AEu3^A>inJGcEe%-yVpWYi0RQAdH=GEzKb@ea42JlNJ0Numlz_?*m!_ve| zu$2ZI@*Nn~JUV}Mcig{Ng3A2sGZgXsOa1!0@Vc{Y3Mixm7+4RiVw%>r^dQLF2M+9GWZckYAO61T zXSpOnWj~j`dFAcA-~LP0igs{tGA&?;2t9CVg9+GW5;x2h7{We2e-*3$Uyq>@sL7D*n1|di`{Q%0?60Xkx>cCPx$7Xvv1B030pZMypXgwe4s%I@)H# z*R&h4ZMH^xV8`PB|2W5kT?`D|jG!LH+nd&tWDI#+4(|QGG+bVqEpbtNo6|iDmPsL@ zub)4^E-zd$|G@k6=hyE~1GON5t>awg`u~>SkF(rUe{ksjz7OBh>%r~6|De|8hb$&J zK7MvcTlG7zQNH@e=YLDztlnSp@_l@j^%i);F~;}6;)fR@&CmzH_I812{k~tZ@BhZ= z{r&5m-(CjqfUM@MFtLHQFz*1H((4|b|2=)v`hS;}?yrCO_5vTQZ&6^%*x%+3?WurT z$)SIKzAE4Qy?E!B@A`XXZ^63_>(m}x{Ez|ZgcJZ9z&pC^-^ZWY_se_wzkf@&J6pqh z1Xo#Xq~xHr@H=1+Dg5K})%U;NJOA|3{rz9cGT_C}j#&-vhZjS;4!}Or1Fe61>NS7A z(vSW1d-^@TxA1B#T=+vq1+-VN1K9nEIXZuR-Sukw>E8AKFWp`!3u~f300ts&KeWL= z8i+$G5dS?BaW-HEcaMO?f)rr?t)brg!Q89N=OMZ0|NrGIj4TKR2gDuX8EP59sSem< zpTWpzuwqY(ibKpG8&(NGvI7e-4*wqaRE{9x8=lT9y(R=fmk6*G9c`njxgN@xNADqqmy literal 0 HcmV?d00001 diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions@3x.png deleted file mode 100644 index c2bf62b0786395a78fa42272875d4077801e4be0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12389 zcmeHNdrTBZ7@yr+F7EY+&G}kHjM$6N|k~Hl|8jI zzUV26N<2B57@DAP6?_#cTidEg;V#9Zwknra0ShV-q=LeB7I6341d{us=|6MHKJMmb z_ct@&eDnLh-|UOgN4UzS$^Zbak-G3$03<8`n0=fS{*wBb*b6V%w%CXTpuBO~6ZnNp z*TroEz+*0dV2cX^Y{M0)|l8 zboQ1#jX|DuZ;RAj0W|0x4@jM|fcZT(VYmWc>i{N6Z~e1ndr4&!nc!uamf8G4l$4?w zZ0IDhU@LLOO_jOo=;V>Ns9AO`3r=0>UwyT#?;cX8XaV8Xzn0afE+bichE8lNe*%a$Q2-0fLsA` z1t@$&(I^V8QLX@Ga!_Il<=If$5JO2_l%u9zLG6L#dUsc80hsbJFFHK^H7wuVUruN_ zuBmbJd?oE3GCOYER?T{9-m#MSTW#GhBXEUL8-cf2+d3-bf<_=6OtmKmKly@CDGm9= zVE>nujYcuG|0>W7f`O4CQWfgU@(%@R!SDlvCse+Cez~N3rl*-&%*7K^$^f zi9w+Uj%$_N@89EET(hG4fuddKOn2wra5b%d-%#h&xJExL>)T9bsGRBU+CTCdD~_`3 zof=o~=fCW@LF$(wMbBbr8N zHDX3s23n2y#UHIkh}21`5f1%-lRDO#xNMw8*v&J{i0^LEVws@p<@lXkXomG}zy^W& z({_$qMqq@%GlyumVL*BxRAZTvpM;G@Jh4BeHiJF8@Nb%G21>I}f1NCrc4>G@EmI3I z179!w8iULG$@Yo@WpS{d7=zGsEe1L6az@;A1YsH`NGH;^Xl+)}C2qDgp!c9yng~l^ z1qaj+zaFynuuyE^Q^ligrJsp3UEVoo3@rNY-s0Bm>!HN-@W5ml~IUA7}ztTV|kGBaIh)lAN{-CjgPooPKZx{cXQWhG3fx&b0^YhHBA;{ zCbgwy3@pJ7zvULSx#e6Jk$DOIBV>SF240Dj2?pnF&x7&okHSelp# zw$fljz5~OWN9V8Zj{6r&P?>+7=I&pYF1+X8EB8tfk(9@zJE$= zZRU&b?Q#5HCxAlTfkA{}HCKexG&YdS7?^*vu^iC)7qj>E)BC9el|7lhX|+D@-+vcg zFO)L^MKnhPQ$i@C_u)&RFq23~xZl7KadiIb^1Xj{^AJ?_C#dY}(uMcst8A}0gF_vd ziq>c)WJXAVT?S1>#b4J=ub)m(*=S-LO>FqmLZf9VI+pAXK1+9B?u8!UAAz%?SlI{q%+JQEJp4q#E@LuwAzJhjG2;?O#g?D%<=uHos2K z`94ZRL;|TH@&ecpar>D5FKF9WZ^Fu6@4ojZrfnZe`^^BU{dNJ^e(QO3{?F2!*V73r zyH>vU=T4s5|0pey5JXF40k9<^adiGq@0-{3c?l|8`@ZUPvE;9RC=Iw3hz6Vku!U>T zW&e5lrnSI!9wBAX_rE@SZuI3ZO1n1@soh%#Z1;-PKhsZ*-fu!s*|vSJ&z?_x@f)QD zw-~7f_ZQfL)A)BL{?xX*OoGaCYOl|pf0|%Q8clHUeg!mLjwU#Gmti!)0efUv3PN&A zxVqvlr4@{j?ii0j!AVdZP_N%u9>zTnR4Ftx{{J7`#K454K-@vUA&vpu3kFsiGZ+~^ zL>$(?n>XibE>y>MP>;OibuzeD*3g&?EFzM5%Z01%w_I_J1=m1&lE6-?!*)AJH6vk> z=D=Wc?SuDr>Gaas>0oUSazTB?yT2e67R;KvE%(e7O9REh4)X?e!Y`}^*Iht8eLyq& zP5)eado1$qGl=UdfHe+=H3jAizx#T`UTFo_d6TfYb$`k3!m#a?5ZB$qX3ZVn7q!Ac t;-!fo$L>hM=GM_5!H7OegX95w>eOj$zk=Bx00)#9JYD@<);T3K0RRaH8ZiI> literal 0 HcmV?d00001 diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumHeight@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumHeight@3x.png deleted file mode 100644 index 802dbc7bca2dee80c03cdc9351e05f58c5884647..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9534 zcmeAS@N?(olHy`uVBq!ia0y~yU_QXWz?i|o1{9gWHpvi3F%}28J29*~C-V}>;Vkfo zEM{O(v;bj7*J*|cKtY*I7yl3-%>=|Cumy-Upfr#z)O*3xVIPo=^mK6ysbG9_)3J-$ zP=Mv&&;QGhe-n@SqNr$4eMO#0c) z^*~Jr7;+e2PYY&-{MuKxdY_pE$xpl^$AM6TA6gt-hT$Cd#0&ZVHJQSXe#&S+vA%{!w- z!DvA}TJMZjqrgVaXi+d)6pR)Hqea1JQ83zl8|{sbcCJVGSV1E{aIES7|2<_KM}dP( zVW2^#x1&Q$JflNQqXU4WSjYMvH>cqF}Tr08K=X sb`VB82%{Z@(N@7|Q9y99P$PeNmf-xq`y!76hng5XUHx3vIVCg!0Kh?)9{>OV diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumWidth@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumWidth@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8e9c66caa1d727693187440c6afdeaf9d6c35888 GIT binary patch literal 2582 zcmeAS@N?(olHy`uVBq!ia0vp^Cm0wQ9XQy4te#?2C`Z96^n3u0@7WcE{-7;jBlB-Eog@Q2N^G!DQ@;EqL z6j+=b6dE^gY+Sbk&MS_T%Qt6XQ4(NMRG4t!<_(AN7&vdIPXBgkCMH3SMgakj2RS(l zwDsV;m}$pv^D;Jav^a2Zs1%r)T@V$A^Yl(Xe%sdIz~ZF9!XjiLE&Zaa8_t{l^kbQ` zg94MH0234EoL=6Nqpon?=}#5AN4+;1d!vbS!U3A)y$9EseljyK{Qu8v`QZhyRQd}l zmEPVp?2C2hVZC_s|FYwoip5e&zP)RFu;iiq9;NQ3KKAze|0#U<&Qe!jS2z9N@6S8I zylGE-I6&xlseD0Ngp&f@%J^l3K?e`TN z1ez2CSU7|V_7yVM9_2=;E~@zWxHIhq^< z6g&?6JjVM)R3D-G^wW>G^92+*90fR-SU4^2?`Yijs1>fda;Ht*Z(f8qq|Gmc??I^6 zpME@_pr_ApZu)j`U-|3%mi2SL&)>`@!B+O*7Gslz!2at+760F_Kf12nbp!KtK8=nh z4Uabmfp}jYMR|7;NqCX4)p%I)sJeI>#!(xG#%jshP1{} zKh1TK!YvA1Le{{rD~=U?Z=I^h;V7a~1`K$2%`&gTv$J4k&3V15;=U%gBgZ0zjm$vr zdTk8u%Dx6SD<=HtZ@)-jNV0ay0>dh>Yi>}?W;K{u&v$9vD?jBV0Ci?x(3>fbW|_jx zx*qy*U$7Y5nNyOMi(FsB2{UWwx~}hYHvtm>#F>jlte5Uc^M#oO_VScgm@`McJQ~Zi cPuTz1ZF4pCJ4Gsh%`^rEPgg&ebxsLQ0Ag-&O8@`> literal 0 HcmV?d00001 diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumWidth@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumWidth@3x.png deleted file mode 100644 index 6796058c28ee05319977f7227dde29bfc0889eb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3946 zcmeAS@N?(olHy`uVBq!ia0y~yVAKKP2OMlb5&7_dT|kPlILO_JVcj{Imp~3@fk$L9 z1B0Rk2s64)GfV&q%4E9uhX83NAO?XCK&%0!fo!%*tOcg#Kzg31i(^OydsSvUlCNa`@LaHOypx$fm=WMbhF0}@6|GZ*b^ zWng4t>jn~%jXr_*of;Szn_U|i8had;t;kn&XlOX7-2 zsi_sHB!we|ZEG~p6vl&2KqW>jM$NZ$ITRWi5)^?-B$;M9z7+$S>97H05l`cp1!deo zGZi9$N*vl8(gJp~0?ibFTYGoZ+R;EBDM{-6yPwGi82LnGe(>w?w=%L@TqtnZz;e6w zY-0~|lk2sfHR~1}6Wvmyeo#o~;3J1)j0csn-L5@-_U-MluWAuZsu40LEEFPA&YpP1 zl@;T7x*VuVNQW;)MnGp%T1sqQ-u=9oe4whPqoc-+hTUjF8O;?Wmngp&{4DP*oDf>I R8`z>?@O1TaS?83{1ORmP_*nn| diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumWidthSizingMinimumHeight@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASRelativeLayoutSpecSnapshotTests/testWithSizingOptions_SizingMinimumWidthSizingMinimumHeight@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ddafb41db79eeb03b2ec449f56a9b16577fa1d08 GIT binary patch literal 1965 zcmeAS@N?(olHy`uVBq!ia0vp^CxG|^2OE%dE!2(!QjEnx?oJHr&dIz4aySb-B8wRq z#8g3;(KATp15i*V)5SjoNHYO32vh*E29yS}nU_brpSc-G7kj!mhEy=VxnkJI*;mxi)(@GA4@I%<%@PS{_t{8h%c<& zXY+5TqJlu900(0u%eiB0yB;aQd8w6q?g|KWIB>KyI54FrGshMR!g$X&+1$(H;BZl3 zadJ>-+`O@I-3~afI8rX(oP|Y6fJsqd!hxGN9KvJZyq!Az+ohS91UVW71Uw$(zXU}knfR2_`sZ~D`ZWzG%? zOo{?bOq_Fic}tGE!g;4ZRqP)1-e~MmCvi5$b3fr{VEF(4kX?H#F#D|rWxu!A4D(_P z1y~R6{l7HTQtd)S;-;BR4|3`cF#Wzb|9rna(|ztgHFoyX|NWJ_F5mc`RqyD>|7(~G z1?q(aPR!r2FJ5l{9YhN4<1Ojxgs1GuPd~opgXe*=oCU!?@SHSLr$4_O?yb$q%yW|v zIX9)UW;Y^B$V$Hu5r!M1cKY#cS$L*L(~q)t zxZAAFE@-O3jq#awe7iN=Z8tYI`WeE@iu6r3`|gf<5n8U18jBBN6t45V*)w0B?Y{J% zbGN?Re~S*g{;t7+r$t;9NHIOX6=n7Qw>?WE#}RI!a$sSc9C+V#Z<>-oV};`*K43w* zZtc>~`}CJNusmYzv<4Q)8&|wv6lW~h;jl-ckR4cbP0l+XkKKwAm z5MVO=GyC3U!<}r*OZad2aR?{~2zFdCSJ66I(ZskZkk`yzkV&z}W2Cz|h#^uxv%XqC-Q&K_!O<2RDV_E87JW91bK1DmW-8 zPtbf74KzGq1CW>?ctYf>F3<*p2q1BSBc-Sx z+W-s1|NqaQa9sy134eo1!ndR4Af%KZO>I<8ZKGA@XoFyIHg|yK;60J0mE3*|TY=>v NgQu&X%Q~loCIFws(cu69