FA-61571 / Options payoff and settlement / Open access
Special opening settlement value for index options: a component that did not open contributes zero · case 01
Settlement values drop sharply when any component is halted at the open.
ROOT CAUSE
A missing opening price is replaced with zero instead of the last close.
VERIFIED REPAIR
Use the last close when the component did not open.
Unsuccessful approach: Skipping the component entirely still removes its weight from the index.
Case contract
Inputs components [weight, opening price or None, last close] and a divisor. Each component uses its opening price, or its last close if it did not open. Settlement = sum(weight*price)/divisor computed in Decimal and rounded half-up to cents. Return as a string.
Why this case matters
Option expiry, exercise and settlement engines move cash and shares; a wrong branch misstates obligations.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
from decimal import Decimal, ROUND_HALF_UP, ROUND_HALF_EVEN, ROUND_DOWN
N = 1
observations = []
def solve(components, divisor):
total = Decimal(0)
for w, op, close in components:
px = op if op is not None else 0
total += Decimal(str(w)) * Decimal(str(px))
val = (total / Decimal(str(divisor))).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
return str(val)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression missing open fallback 1', [[[2, None, 115.206], [1, 23.708, 24.652], [0.5, 181.789, 183.252], [2, None, 61.839]], 1], '468.69'], ['regression missing open fallback 2', [[[1.5, None, 24.688], [2, 160.56, 157.77], [1.5, 200.672, 196.322], [3, None, 98.648], [0.5, None, 125.74], [2, 171.321, 172.59]], 2], '680.31'], ['partial repair probe 1', [[[0.5, None, 183.66], [3, 112.315, 112.462]], 4], '107.19'], ['partial repair probe 2', [[[1, None, 10.0], [2, 5.0, 4.0]], 2], '10.00'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1.5, 20.89, 21.872], [0.5, 159.942, 166.962], [2, 58.292, 55.668], [0.5, 183.012, 190.231], [2, 101.494, 106.674]], 2], '261.19'], ['normal control 2', [[[3, 20.48, 20.008], [1.5, 192.549, 189.685], [1, 21.121, 20.491]], 1.25], '297.11'], ['normal control 3', [[[2, 126.363, 124.863], [1, 36.194, 37.017]], 4], '72.23']], [['regression missing open fallback 1', [[[1, 131.736, 138.663], [1.5, 18.442, 18.4], [1.5, None, 24.689], [2, 175.625, 170.018], [3, None, 36.68], [0.5, None, 100.175]], 1.25], '566.25'], ['regression missing open fallback 2', [[[0.5, 160.034, 165.009], [1.5, None, 102.934], [2, 170.712, 162.745]], 4], '143.96'], ['partial repair probe 1', [[[3, None, 81.632], [1.5, 104.297, 105.567], [0.5, 71.467, 69.509], [0.5, 130.197, 132.774], [1, None, 25.693], [1.5, None, 155.608]], 4], '190.32'], ['partial repair probe 2', [[[2, 148.425, 155.968], [3, 57.773, 58.691], [0.5, None, 89.993], [1.5, 191.911, 189.651]], 4], '200.76'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1.5, 35.143, 35.426], [3, 100.617, 103.832], [2, 62.405, 64.429], [2, 80.435, 77.472], [1, 160.139, 152.67]], 1], '800.38'], ['normal control 2', [[[3, 41.378, 43.445], [1, 179.886, 183.213]], 2], '152.01'], ['normal control 3', [[[1, 135.435, 132.265], [3, 78.206, 76.521]], 1], '370.05']], [['regression missing open fallback 1', [[[3, None, 123.886], [0.5, 86.486, 87.731]], 4], '103.73'], ['regression missing open fallback 2', [[[2, 104.342, 106.91], [2, 170.083, 167.568], [1.5, 195.932, 197.972], [1.5, None, 12.919]], 8], '107.77'], ['partial repair probe 1', [[[0.5, None, 167.745], [2, None, 61.499], [1, None, 116.451], [1.5, None, 106.319]], 1], '482.80'], ['partial repair probe 2', [[[3, 135.281, 140.494], [1, None, 68.724], [0.5, 75.18, 76.215]], 1.25], '409.73'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1, 50.757, 51.824], [1, 200.665, 193.258]], 1], '251.42'], ['normal control 2', [[[0.5, 43.515, 43.189], [1.5, 16.167, 16.829], [0.5, 26.702, 26.791]], 8], '7.42'], ['normal control 3', [[[3, 171.072, 165.043], [2, 154.659, 157.216]], 8], '102.82']], [['regression missing open fallback 1', [[[3, 131.008, 134.072], [3, None, 37.926]], 2], '253.40'], ['regression missing open fallback 2', [[[1, 24.616, 23.898], [1, 153.481, 149.285], [2, 183.518, 192.455], [3, None, 166.179], [3, 154.43, 148.43]], 1.25], '1205.57'], ['partial repair probe 1', [[[1.5, 97.392, 97.058], [1.5, None, 76.047], [1, None, 33.703], [0.5, 21.086, 20.886]], 1.25], '243.52'], ['partial repair probe 2', [[[3, None, 179.355], [1.5, 148.385, 144.973], [3, 109.86, 107.267], [1.5, 110.668, 116.093], [3, 146.596, 143.988]], 2], '848.01'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1.5, 18.607, 19.247], [3, 54.074, 54.599], [3, 39.606, 37.821], [3, 109.319, 113.328]], 1.25], '509.53'], ['normal control 2', [[[0.5, 171.205, 173.383], [1, 180.229, 188.896]], 8], '33.23'], ['normal control 3', [[[1.5, 174.784, 180.819], [2, 16.585, 16.819], [1.5, 76.094, 74.256], [2, 90.607, 91.954], [3, 59.168, 59.298]], 8], '96.03']], [['regression missing open fallback 1', [[[2, None, 92.239], [1.5, None, 96.198], [1.5, None, 175.435], [2, 82.14, 84.56]], 0.5], '1512.42'], ['regression missing open fallback 2', [[[1, 155.316, 157.069], [3, None, 132.876], [3, None, 48.224], [0.5, 15.731, 15.984], [1, 32.783, 32.681]], 4], '184.82'], ['partial repair probe 1', [[[0.5, None, 62.2], [1.5, 195.28, 190.501], [3, 27.194, 28.41], [3, 40.239, 38.732]], 1], '526.32'], ['partial repair probe 2', [[[1, None, 186.885], [0.5, None, 185.823]], 4], '69.95'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[3, 80.305, 81.452], [3, 192.096, 191.063], [0.5, 174.687, 183.553], [1, 118.658, 123.09]], 1], '1023.20'], ['normal control 2', [[[3, 31.476, 31.712], [1, 35.573, 36.594], [1.5, 77.187, 76.073], [0.5, 163.144, 157.997]], 4], '81.84'], ['normal control 3', [[[0.5, 66.287, 64.704], [3, 79.954, 82.764]], 2], '136.50']]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression missing open fallback 1 | 114.60 | 468.69 | Failed |
| regression missing open fallback 2 | 482.39 | 680.31 | Failed |
| partial repair probe 1 | 84.24 | 107.19 | Failed |
| partial repair probe 2 | 5.00 | 10.00 | Failed |
| boundary control 1 | 10.01 | 10.01 | Passed |
| normal control 1 | 261.19 | 261.19 | Passed |
| normal control 2 | 297.11 | 297.11 | Passed |
| normal control 3 | 72.23 | 72.23 | Passed |
SHA-256 / bcf1507355d38734f6455be9e3f78177a55323761e7e75cb864c9f2ad839b635
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
from decimal import Decimal, ROUND_HALF_UP, ROUND_HALF_EVEN, ROUND_DOWN
N = 1
observations = []
def solve(components, divisor):
total = Decimal(0)
for w, op, close in components:
if op is None:
continue
px = op
total += Decimal(str(w)) * Decimal(str(px))
val = (total / Decimal(str(divisor))).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
return str(val)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression missing open fallback 1', [[[2, None, 115.206], [1, 23.708, 24.652], [0.5, 181.789, 183.252], [2, None, 61.839]], 1], '468.69'], ['regression missing open fallback 2', [[[1.5, None, 24.688], [2, 160.56, 157.77], [1.5, 200.672, 196.322], [3, None, 98.648], [0.5, None, 125.74], [2, 171.321, 172.59]], 2], '680.31'], ['partial repair probe 1', [[[0.5, None, 183.66], [3, 112.315, 112.462]], 4], '107.19'], ['partial repair probe 2', [[[1, None, 10.0], [2, 5.0, 4.0]], 2], '10.00'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1.5, 20.89, 21.872], [0.5, 159.942, 166.962], [2, 58.292, 55.668], [0.5, 183.012, 190.231], [2, 101.494, 106.674]], 2], '261.19'], ['normal control 2', [[[3, 20.48, 20.008], [1.5, 192.549, 189.685], [1, 21.121, 20.491]], 1.25], '297.11'], ['normal control 3', [[[2, 126.363, 124.863], [1, 36.194, 37.017]], 4], '72.23']], [['regression missing open fallback 1', [[[1, 131.736, 138.663], [1.5, 18.442, 18.4], [1.5, None, 24.689], [2, 175.625, 170.018], [3, None, 36.68], [0.5, None, 100.175]], 1.25], '566.25'], ['regression missing open fallback 2', [[[0.5, 160.034, 165.009], [1.5, None, 102.934], [2, 170.712, 162.745]], 4], '143.96'], ['partial repair probe 1', [[[3, None, 81.632], [1.5, 104.297, 105.567], [0.5, 71.467, 69.509], [0.5, 130.197, 132.774], [1, None, 25.693], [1.5, None, 155.608]], 4], '190.32'], ['partial repair probe 2', [[[2, 148.425, 155.968], [3, 57.773, 58.691], [0.5, None, 89.993], [1.5, 191.911, 189.651]], 4], '200.76'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1.5, 35.143, 35.426], [3, 100.617, 103.832], [2, 62.405, 64.429], [2, 80.435, 77.472], [1, 160.139, 152.67]], 1], '800.38'], ['normal control 2', [[[3, 41.378, 43.445], [1, 179.886, 183.213]], 2], '152.01'], ['normal control 3', [[[1, 135.435, 132.265], [3, 78.206, 76.521]], 1], '370.05']], [['regression missing open fallback 1', [[[3, None, 123.886], [0.5, 86.486, 87.731]], 4], '103.73'], ['regression missing open fallback 2', [[[2, 104.342, 106.91], [2, 170.083, 167.568], [1.5, 195.932, 197.972], [1.5, None, 12.919]], 8], '107.77'], ['partial repair probe 1', [[[0.5, None, 167.745], [2, None, 61.499], [1, None, 116.451], [1.5, None, 106.319]], 1], '482.80'], ['partial repair probe 2', [[[3, 135.281, 140.494], [1, None, 68.724], [0.5, 75.18, 76.215]], 1.25], '409.73'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1, 50.757, 51.824], [1, 200.665, 193.258]], 1], '251.42'], ['normal control 2', [[[0.5, 43.515, 43.189], [1.5, 16.167, 16.829], [0.5, 26.702, 26.791]], 8], '7.42'], ['normal control 3', [[[3, 171.072, 165.043], [2, 154.659, 157.216]], 8], '102.82']], [['regression missing open fallback 1', [[[3, 131.008, 134.072], [3, None, 37.926]], 2], '253.40'], ['regression missing open fallback 2', [[[1, 24.616, 23.898], [1, 153.481, 149.285], [2, 183.518, 192.455], [3, None, 166.179], [3, 154.43, 148.43]], 1.25], '1205.57'], ['partial repair probe 1', [[[1.5, 97.392, 97.058], [1.5, None, 76.047], [1, None, 33.703], [0.5, 21.086, 20.886]], 1.25], '243.52'], ['partial repair probe 2', [[[3, None, 179.355], [1.5, 148.385, 144.973], [3, 109.86, 107.267], [1.5, 110.668, 116.093], [3, 146.596, 143.988]], 2], '848.01'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1.5, 18.607, 19.247], [3, 54.074, 54.599], [3, 39.606, 37.821], [3, 109.319, 113.328]], 1.25], '509.53'], ['normal control 2', [[[0.5, 171.205, 173.383], [1, 180.229, 188.896]], 8], '33.23'], ['normal control 3', [[[1.5, 174.784, 180.819], [2, 16.585, 16.819], [1.5, 76.094, 74.256], [2, 90.607, 91.954], [3, 59.168, 59.298]], 8], '96.03']], [['regression missing open fallback 1', [[[2, None, 92.239], [1.5, None, 96.198], [1.5, None, 175.435], [2, 82.14, 84.56]], 0.5], '1512.42'], ['regression missing open fallback 2', [[[1, 155.316, 157.069], [3, None, 132.876], [3, None, 48.224], [0.5, 15.731, 15.984], [1, 32.783, 32.681]], 4], '184.82'], ['partial repair probe 1', [[[0.5, None, 62.2], [1.5, 195.28, 190.501], [3, 27.194, 28.41], [3, 40.239, 38.732]], 1], '526.32'], ['partial repair probe 2', [[[1, None, 186.885], [0.5, None, 185.823]], 4], '69.95'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[3, 80.305, 81.452], [3, 192.096, 191.063], [0.5, 174.687, 183.553], [1, 118.658, 123.09]], 1], '1023.20'], ['normal control 2', [[[3, 31.476, 31.712], [1, 35.573, 36.594], [1.5, 77.187, 76.073], [0.5, 163.144, 157.997]], 4], '81.84'], ['normal control 3', [[[0.5, 66.287, 64.704], [3, 79.954, 82.764]], 2], '136.50']]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression missing open fallback 1 | 114.60 | 468.69 | Failed |
| regression missing open fallback 2 | 482.39 | 680.31 | Failed |
| partial repair probe 1 | 84.24 | 107.19 | Failed |
| partial repair probe 2 | 5.00 | 10.00 | Failed |
| boundary control 1 | 10.01 | 10.01 | Passed |
| normal control 1 | 261.19 | 261.19 | Passed |
| normal control 2 | 297.11 | 297.11 | Passed |
| normal control 3 | 72.23 | 72.23 | Passed |
SHA-256 / 7b92207ded447d65ae131e28d7d6fec48af982dbbd0d9530d7fe465a263c9ca7
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
from decimal import Decimal, ROUND_HALF_UP, ROUND_HALF_EVEN, ROUND_DOWN
N = 1
observations = []
def solve(components, divisor):
total = Decimal(0)
for w, op, close in components:
px = op if op is not None else close
total += Decimal(str(w)) * Decimal(str(px))
val = (total / Decimal(str(divisor))).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
return str(val)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression missing open fallback 1', [[[2, None, 115.206], [1, 23.708, 24.652], [0.5, 181.789, 183.252], [2, None, 61.839]], 1], '468.69'], ['regression missing open fallback 2', [[[1.5, None, 24.688], [2, 160.56, 157.77], [1.5, 200.672, 196.322], [3, None, 98.648], [0.5, None, 125.74], [2, 171.321, 172.59]], 2], '680.31'], ['partial repair probe 1', [[[0.5, None, 183.66], [3, 112.315, 112.462]], 4], '107.19'], ['partial repair probe 2', [[[1, None, 10.0], [2, 5.0, 4.0]], 2], '10.00'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1.5, 20.89, 21.872], [0.5, 159.942, 166.962], [2, 58.292, 55.668], [0.5, 183.012, 190.231], [2, 101.494, 106.674]], 2], '261.19'], ['normal control 2', [[[3, 20.48, 20.008], [1.5, 192.549, 189.685], [1, 21.121, 20.491]], 1.25], '297.11'], ['normal control 3', [[[2, 126.363, 124.863], [1, 36.194, 37.017]], 4], '72.23']], [['regression missing open fallback 1', [[[1, 131.736, 138.663], [1.5, 18.442, 18.4], [1.5, None, 24.689], [2, 175.625, 170.018], [3, None, 36.68], [0.5, None, 100.175]], 1.25], '566.25'], ['regression missing open fallback 2', [[[0.5, 160.034, 165.009], [1.5, None, 102.934], [2, 170.712, 162.745]], 4], '143.96'], ['partial repair probe 1', [[[3, None, 81.632], [1.5, 104.297, 105.567], [0.5, 71.467, 69.509], [0.5, 130.197, 132.774], [1, None, 25.693], [1.5, None, 155.608]], 4], '190.32'], ['partial repair probe 2', [[[2, 148.425, 155.968], [3, 57.773, 58.691], [0.5, None, 89.993], [1.5, 191.911, 189.651]], 4], '200.76'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1.5, 35.143, 35.426], [3, 100.617, 103.832], [2, 62.405, 64.429], [2, 80.435, 77.472], [1, 160.139, 152.67]], 1], '800.38'], ['normal control 2', [[[3, 41.378, 43.445], [1, 179.886, 183.213]], 2], '152.01'], ['normal control 3', [[[1, 135.435, 132.265], [3, 78.206, 76.521]], 1], '370.05']], [['regression missing open fallback 1', [[[3, None, 123.886], [0.5, 86.486, 87.731]], 4], '103.73'], ['regression missing open fallback 2', [[[2, 104.342, 106.91], [2, 170.083, 167.568], [1.5, 195.932, 197.972], [1.5, None, 12.919]], 8], '107.77'], ['partial repair probe 1', [[[0.5, None, 167.745], [2, None, 61.499], [1, None, 116.451], [1.5, None, 106.319]], 1], '482.80'], ['partial repair probe 2', [[[3, 135.281, 140.494], [1, None, 68.724], [0.5, 75.18, 76.215]], 1.25], '409.73'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1, 50.757, 51.824], [1, 200.665, 193.258]], 1], '251.42'], ['normal control 2', [[[0.5, 43.515, 43.189], [1.5, 16.167, 16.829], [0.5, 26.702, 26.791]], 8], '7.42'], ['normal control 3', [[[3, 171.072, 165.043], [2, 154.659, 157.216]], 8], '102.82']], [['regression missing open fallback 1', [[[3, 131.008, 134.072], [3, None, 37.926]], 2], '253.40'], ['regression missing open fallback 2', [[[1, 24.616, 23.898], [1, 153.481, 149.285], [2, 183.518, 192.455], [3, None, 166.179], [3, 154.43, 148.43]], 1.25], '1205.57'], ['partial repair probe 1', [[[1.5, 97.392, 97.058], [1.5, None, 76.047], [1, None, 33.703], [0.5, 21.086, 20.886]], 1.25], '243.52'], ['partial repair probe 2', [[[3, None, 179.355], [1.5, 148.385, 144.973], [3, 109.86, 107.267], [1.5, 110.668, 116.093], [3, 146.596, 143.988]], 2], '848.01'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[1.5, 18.607, 19.247], [3, 54.074, 54.599], [3, 39.606, 37.821], [3, 109.319, 113.328]], 1.25], '509.53'], ['normal control 2', [[[0.5, 171.205, 173.383], [1, 180.229, 188.896]], 8], '33.23'], ['normal control 3', [[[1.5, 174.784, 180.819], [2, 16.585, 16.819], [1.5, 76.094, 74.256], [2, 90.607, 91.954], [3, 59.168, 59.298]], 8], '96.03']], [['regression missing open fallback 1', [[[2, None, 92.239], [1.5, None, 96.198], [1.5, None, 175.435], [2, 82.14, 84.56]], 0.5], '1512.42'], ['regression missing open fallback 2', [[[1, 155.316, 157.069], [3, None, 132.876], [3, None, 48.224], [0.5, 15.731, 15.984], [1, 32.783, 32.681]], 4], '184.82'], ['partial repair probe 1', [[[0.5, None, 62.2], [1.5, 195.28, 190.501], [3, 27.194, 28.41], [3, 40.239, 38.732]], 1], '526.32'], ['partial repair probe 2', [[[1, None, 186.885], [0.5, None, 185.823]], 4], '69.95'], ['boundary control 1', [[[1, 10.005, 10.0]], 1], '10.01'], ['normal control 1', [[[3, 80.305, 81.452], [3, 192.096, 191.063], [0.5, 174.687, 183.553], [1, 118.658, 123.09]], 1], '1023.20'], ['normal control 2', [[[3, 31.476, 31.712], [1, 35.573, 36.594], [1.5, 77.187, 76.073], [0.5, 163.144, 157.997]], 4], '81.84'], ['normal control 3', [[[0.5, 66.287, 64.704], [3, 79.954, 82.764]], 2], '136.50']]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression missing open fallback 1 | 468.69 | 468.69 | Passed |
| regression missing open fallback 2 | 680.31 | 680.31 | Passed |
| partial repair probe 1 | 107.19 | 107.19 | Passed |
| partial repair probe 2 | 10.00 | 10.00 | Passed |
| boundary control 1 | 10.01 | 10.01 | Passed |
| normal control 1 | 261.19 | 261.19 | Passed |
| normal control 2 | 297.11 | 297.11 | Passed |
| normal control 3 | 72.23 | 72.23 | Passed |
SHA-256 / d50b26e49533e238ad54a420f099e4620a8729d81b8ad73cb98c3685d9b70871
Verification & scope
A deterministic toy contract stated explicitly in the contract field; no claim of conformance to any exchange or clearing rulebook. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:46:56.452720+00:00.
Case digest / 901147f77a42d79a29e7707c7742a3a38d726261375a48ae17bd8aed5e54369c