Entanglement is the weirdest feature of quantum mechanics. David
Mermin (1981) provides an accessible introduction to experiments showing
that local determinism doesn’t hold in the quantum world, simplifying Bell’s
theorem and tests thereof. This post shows the sums in R.
First, a diagram of the setup (Mermin, 1981, p. 400):

We have a device, C, that fires out two particles to
detectors A and B that are far apart from each other.
The detectors have three measurement settings, 1, 2, and 3, and two
lights, red (R) and green (G), which indicate the measurement outcome.
A and B do not communicate with each other in any way
and it is assumed that the measurement settings are independent of each
other.
If you can read bra–ket notation, then the quantum state of the
particles fired out by C is the entangled Bell state, \(|\Phi^+\rangle\):
\[|\Phi^+\rangle = \frac{|R\rangle_A
\otimes |R\rangle_B + |G\rangle_A \otimes
|G\rangle_B}{\sqrt{2}}\]
This means that when the measurement settings on A and
B are the same, e.g., both 1 or both 2, then the same lights
always flash on A and B when the particles arrive.
They are either both red or both green, with equal probability. If the
measurement settings are different then, as we see later, sometimes the
lights flash the same colour and other times they flash different
colours.
One way to make this work is to assume the particles somehow encode
what the measurement outcome will be for each of the three settings and
that this drives the long-distance correlations (local determinism),
it’s just that this encoding is generally hidden from experimenters. The
particles heading left and right would then encode the same information.
We can write this as a three-character string. RGR would denote
that the outcome is red for setting 1, green for setting 2, and red for
setting 3.
Given this encoding, it’s easy to see how the same light can flash at
the two detectors when the measurement settings are the same.
Measurement is equivalent to looking up the encoding and reading off the
colour corresponding to the measurement setting.
Now suppose each measurement setting is chosen randomly with equal
probability and the settings at A and B are
independent. What happens when the settings are different?
Here’s the setup: a and b give the measurement
settings at A and B. o1, o2, and
o3, give the outcome for the three measurement settings, so
concatenating them together gives the three-character string,
hidden. The R code below generates all \(8 \times 9 = 72\) possibilities from the
\(2^3 = 8\) possible particle setups
and the \(3^2 = 9\) different
combinations of measurement settings at A and B.
library(tidyverse)
dat <- expand.grid(
a = 1:3,
b = 1:3,
o1 = c("R", "G"),
o2 = c("R", "G"),
o3 = c("R", "G")
) |>
mutate(A = case_when(a == 1 ~ o1,
a == 2 ~ o2,
a == 3 ~ o3),
B = case_when(b == 1 ~ o1,
b == 2 ~ o2,
b == 3 ~ o3),
hidden = paste0(o1, o2, o3),
same = A == B)
dat |> select(-c(o1,o2,o3))
Now we can see how the probability of getting the same outcome
depends on whether the measurement settings are the same:
dat |>
group_by(a == b) |>
summarise(`P(Same outcome)` = mean(same))
The outcomes are always the same if the settings are the same and
have a 50–50 chance of being the same if the settings are different.
This differs from the predictions of quantum mechanics and empirical
findings from actual experiments.
To see this, let’s view the entangled particles fired from C
as qubits, abstracting from Mermin’s discussion of spin-1/2 particles
and Stern–Gerlach magnets. The measurement settings of A and
B are then implemented as rotating the qubit entering the
detector about the y-axis using an RY
gate. After this rotation, we measure using the computational
basis.
Here’s a quantum circuit with example settings:

The circuit
for C establishes a Bell state by using a Hadmard gate and
CNOT.
The probability that the outcomes are the same at A and
B is given by \(\cos^2(\theta/2)\), where \(\theta\) is the difference between angles
of rotations at A and B. (We’re squaring because Born rule.)
Following Mermin (1981), we choose angles \(0^{\circ}\), \(-120^{\circ}\), and \(120^{\circ}\) for the three measurement
settings. ang_diff gives the difference in the angles in
degrees; ang_diff_rads is the same in radians.
Here is a table of the outcomes:
dat_actual <- expand.grid(a = c(-120,0,120), b = c(-120,0,120)) |>
mutate(ang_diff = b - a,
ang_diff_rads = (ang_diff/360) * 2 * pi,
`P(Same outcome)` = cos(ang_diff_rads/2)^2)
dat_actual |>
select(-ang_diff_rads) |>
arrange(abs(ang_diff), a)
When the settings are the same at A and B, the
findings agree with local determinism: the lights always flash the same
colour. However, when the settings are different, the lights are the
same colour on only \(1/4\) of trials.
This is lower than the \(1/2\)
predicted by the local determinism setup, so something else is going on.
Local determinism is false.
I gave the circuit above a go on an IBM Quantum computer
(ibmq_jakarta). The measurement outcomes were the same on 26.6% of 1,000
trials, 95% CI = [23.9%, 29.5%]. This confidence interval includes the
prediction of quantum mechanics and is well below 50%.
There are values of \(\theta\) for
which the local determinism predictions do work, e.g., \(\frac{\pi}{2}\) radians = \(90^{\circ}\):
cos((pi/2)/2)^2
[1] 0.5
But that clearly doesn’t rescue it.
More generally, here’s what \(\cos^2(\theta/2)\) looks like:
ggplot() +
geom_function(fun = \(x) cos(((x / 360) * 2 * pi) / 2) ^ 2) +
scale_y_continuous(breaks = seq(0, 1, .25)) +
scale_x_continuous(breaks = c(seq(-360, 360, 90),
seq(-240, 240, 120)),
limits = c(-360, 360)) +
labs(x = expression(theta), y = "P(Same outcome)")

Suppose I’m sitting beside detector A and detector
B is light years away. Suppose also that I hold my measurement
setting constant, so any variation in \(\theta\) is driven by the setting over at
B. The measurement outcomes from repeated trials I get here
depend on the measurement settings way over there, and those settings
have an effect apparently instantaneously.
Hossenfelder and Palmer (2020) would want to emphasise that this
falsification of local determinism assumes that the measurement settings
are statistically independent, which they argue isn’t true. Allowing the
measurement settings to be correlated is known as
superdeterminism.
LS0tDQp0aXRsZTogIk1lcm1pbidzICgxOTgxKSB2YXJpYW50IG9mIEJlbGwncyB0aGVvcmVtIC0tIGluIFIiDQphdXRob3I6ICdbQW5kaSBGdWdhcmRdKGh0dHBzOi8vd3d3LmFuZGlmdWdhcmQuaW5mbyknDQpkYXRlOiAiMjcgTWF5IDIwMjMgKGxhc3QgdHdlYWtlZCAxNyBKdW5lIDIwMjMpIg0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOg0KICAgIGNvZGVfZm9sZGluZzogbm9uZQ0KICBodG1sX2RvY3VtZW50Og0KICAgIGRmX3ByaW50OiBwYWdlZA0KLS0tDQoNCkVudGFuZ2xlbWVudCBpcyB0aGUgd2VpcmRlc3QgZmVhdHVyZSBvZiBxdWFudHVtIG1lY2hhbmljcy4gRGF2aWQgTWVybWluICgxOTgxKSBwcm92aWRlcyBhbiBhY2Nlc3NpYmxlIGludHJvZHVjdGlvbiB0byBleHBlcmltZW50cyBzaG93aW5nIHRoYXQgbG9jYWwgZGV0ZXJtaW5pc20gZG9lc24ndCBob2xkIGluIHRoZSBxdWFudHVtIHdvcmxkLCBzaW1wbGlmeWluZyBbQmVsbCdzIHRoZW9yZW1dKGh0dHBzOi8vcGxhdG8uc3RhbmZvcmQuZWR1L2VudHJpZXMvYmVsbC10aGVvcmVtLykgYW5kIHRlc3RzIHRoZXJlb2YuIFRoaXMgcG9zdCBzaG93cyB0aGUgc3VtcyBpbiBSLg0KDQpGaXJzdCwgYSBkaWFncmFtIG9mIHRoZSBzZXR1cCAoTWVybWluLCAxOTgxLCBwLiA0MDApOg0KDQohW10obWVybWluX2RldmljZS5wbmcpDQoNCg0KV2UgaGF2ZSBhIGRldmljZSwgKkMqLCB0aGF0IGZpcmVzIG91dCB0d28gcGFydGljbGVzIHRvIGRldGVjdG9ycyAqQSogYW5kICpCKiB0aGF0IGFyZSBmYXIgYXBhcnQgZnJvbSBlYWNoIG90aGVyLiBUaGUgZGV0ZWN0b3JzIGhhdmUgdGhyZWUgbWVhc3VyZW1lbnQgc2V0dGluZ3MsIDEsIDIsIGFuZCAzLCBhbmQgdHdvIGxpZ2h0cywgcmVkIChSKSBhbmQgZ3JlZW4gKEcpLCB3aGljaCBpbmRpY2F0ZSB0aGUgbWVhc3VyZW1lbnQgb3V0Y29tZS4gKkEqIGFuZCAqQiogZG8gbm90IGNvbW11bmljYXRlIHdpdGggZWFjaCBvdGhlciBpbiBhbnkgd2F5IGFuZCBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIG1lYXN1cmVtZW50IHNldHRpbmdzIGFyZSBpbmRlcGVuZGVudCBvZiBlYWNoIG90aGVyLg0KDQpJZiB5b3UgY2FuIHJlYWQgYnJhLS1rZXQgbm90YXRpb24sIHRoZW4gdGhlIHF1YW50dW0gc3RhdGUgb2YgdGhlIHBhcnRpY2xlcyBmaXJlZCBvdXQgYnkgKkMqIGlzIHRoZSBlbnRhbmdsZWQgW0JlbGwgc3RhdGVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JlbGxfc3RhdGUpLCAkfFxQaGleK1xyYW5nbGUkOg0KDQoNCiQkfFxQaGleK1xyYW5nbGUgPSBcZnJhY3t8UlxyYW5nbGVfQSBcb3RpbWVzIHxSXHJhbmdsZV9CICsgfEdccmFuZ2xlX0EgXG90aW1lcyB8R1xyYW5nbGVfQn17XHNxcnR7Mn19JCQNCg0KVGhpcyBtZWFucyB0aGF0IHdoZW4gdGhlIG1lYXN1cmVtZW50IHNldHRpbmdzIG9uICpBKiBhbmQgKkIqIGFyZSB0aGUgc2FtZSwgZS5nLiwgYm90aCAxIG9yIGJvdGggMiwgdGhlbiB0aGUgc2FtZSBsaWdodHMgYWx3YXlzIGZsYXNoIG9uICpBKiBhbmQgKkIqIHdoZW4gdGhlIHBhcnRpY2xlcyBhcnJpdmUuIFRoZXkgYXJlIGVpdGhlciBib3RoIHJlZCBvciBib3RoIGdyZWVuLCB3aXRoIGVxdWFsIHByb2JhYmlsaXR5LiBJZiB0aGUgbWVhc3VyZW1lbnQgc2V0dGluZ3MgYXJlIGRpZmZlcmVudCB0aGVuLCBhcyB3ZSBzZWUgbGF0ZXIsIHNvbWV0aW1lcyB0aGUgbGlnaHRzIGZsYXNoIHRoZSBzYW1lIGNvbG91ciBhbmQgb3RoZXIgdGltZXMgdGhleSBmbGFzaCBkaWZmZXJlbnQgY29sb3Vycy4NCg0KT25lIHdheSB0byBtYWtlIHRoaXMgd29yayBpcyB0byBhc3N1bWUgdGhlIHBhcnRpY2xlcyBzb21laG93IGVuY29kZSB3aGF0IHRoZSBtZWFzdXJlbWVudCBvdXRjb21lIHdpbGwgYmUgZm9yIGVhY2ggb2YgdGhlIHRocmVlIHNldHRpbmdzIGFuZCB0aGF0IHRoaXMgZHJpdmVzIHRoZSBsb25nLWRpc3RhbmNlIGNvcnJlbGF0aW9ucyAobG9jYWwgZGV0ZXJtaW5pc20pLCBpdCdzIGp1c3QgdGhhdCB0aGlzIGVuY29kaW5nIGlzIGdlbmVyYWxseSBoaWRkZW4gZnJvbSBleHBlcmltZW50ZXJzLiBUaGUgcGFydGljbGVzIGhlYWRpbmcgbGVmdCBhbmQgcmlnaHQgd291bGQgdGhlbiBlbmNvZGUgdGhlIHNhbWUgaW5mb3JtYXRpb24uIFdlIGNhbiB3cml0ZSB0aGlzIGFzIGEgdGhyZWUtY2hhcmFjdGVyIHN0cmluZy4gKlJHUiogd291bGQgZGVub3RlIHRoYXQgdGhlIG91dGNvbWUgaXMgcmVkIGZvciBzZXR0aW5nIDEsIGdyZWVuIGZvciBzZXR0aW5nIDIsIGFuZCByZWQgZm9yIHNldHRpbmcgMy4NCg0KR2l2ZW4gdGhpcyBlbmNvZGluZywgaXQncyBlYXN5IHRvIHNlZSBob3cgdGhlIHNhbWUgbGlnaHQgY2FuIGZsYXNoIGF0IHRoZSB0d28gZGV0ZWN0b3JzIHdoZW4gdGhlIG1lYXN1cmVtZW50IHNldHRpbmdzIGFyZSB0aGUgc2FtZS4gTWVhc3VyZW1lbnQgaXMgZXF1aXZhbGVudCB0byBsb29raW5nIHVwIHRoZSBlbmNvZGluZyBhbmQgcmVhZGluZyBvZmYgdGhlIGNvbG91ciBjb3JyZXNwb25kaW5nIHRvIHRoZSBtZWFzdXJlbWVudCBzZXR0aW5nLg0KDQpOb3cgc3VwcG9zZSBlYWNoIG1lYXN1cmVtZW50IHNldHRpbmcgaXMgY2hvc2VuIHJhbmRvbWx5IHdpdGggZXF1YWwgcHJvYmFiaWxpdHkgYW5kIHRoZSBzZXR0aW5ncyBhdCAqQSogYW5kICpCKiBhcmUgaW5kZXBlbmRlbnQuIFdoYXQgaGFwcGVucyB3aGVuIHRoZSBzZXR0aW5ncyBhcmUgKmRpZmZlcmVudCo/DQoNCkhlcmUncyB0aGUgc2V0dXA6IDx0dD5hPC90dD4gYW5kIDx0dD5iPC90dD4gZ2l2ZSB0aGUgbWVhc3VyZW1lbnQgc2V0dGluZ3MgYXQgKkEqIGFuZCAqQiouIDx0dD5vMTwvdHQ+LCA8dHQ+bzI8L3R0PiwgYW5kIDx0dD5vMzwvdHQ+LCBnaXZlIHRoZSBvdXRjb21lIGZvciB0aGUgdGhyZWUgbWVhc3VyZW1lbnQgc2V0dGluZ3MsIHNvIGNvbmNhdGVuYXRpbmcgdGhlbSB0b2dldGhlciBnaXZlcyB0aGUgdGhyZWUtY2hhcmFjdGVyIHN0cmluZywgPHR0PmhpZGRlbjwvdHQ+LiBUaGUgUiBjb2RlIGJlbG93IGdlbmVyYXRlcyBhbGwgJDggXHRpbWVzIDkgPSA3MiQgcG9zc2liaWxpdGllcyBmcm9tIHRoZSAkMl4zID0gOCQgcG9zc2libGUgcGFydGljbGUgc2V0dXBzIGFuZCB0aGUgJDNeMiA9IDkkIGRpZmZlcmVudCBjb21iaW5hdGlvbnMgb2YgbWVhc3VyZW1lbnQgc2V0dGluZ3MgYXQgKkEqIGFuZCAqQiouDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmBgYA0KDQpgYGB7cn0NCmRhdCA8LSBleHBhbmQuZ3JpZCgNCiAgYSA9IDE6MywNCiAgYiA9IDE6MywNCiAgbzEgPSBjKCJSIiwgIkciKSwNCiAgbzIgPSBjKCJSIiwgIkciKSwNCiAgbzMgPSBjKCJSIiwgIkciKQ0KKSB8Pg0KICBtdXRhdGUoQSA9IGNhc2Vfd2hlbihhID09IDEgfiBvMSwNCiAgICAgICAgICAgICAgICAgICAgICAgYSA9PSAyIH4gbzIsDQogICAgICAgICAgICAgICAgICAgICAgIGEgPT0gMyB+IG8zKSwNCiAgICAgICAgIEIgPSBjYXNlX3doZW4oYiA9PSAxIH4gbzEsDQogICAgICAgICAgICAgICAgICAgICAgIGIgPT0gMiB+IG8yLA0KICAgICAgICAgICAgICAgICAgICAgICBiID09IDMgfiBvMyksDQogICAgICAgICBoaWRkZW4gPSBwYXN0ZTAobzEsIG8yLCBvMyksDQogICAgICAgICBzYW1lID0gQSA9PSBCKQ0KZGF0IHw+IHNlbGVjdCgtYyhvMSxvMixvMykpDQpgYGANCg0KTm93IHdlIGNhbiBzZWUgaG93IHRoZSBwcm9iYWJpbGl0eSBvZiBnZXR0aW5nIHRoZSBzYW1lIG91dGNvbWUgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBtZWFzdXJlbWVudCBzZXR0aW5ncyBhcmUgdGhlIHNhbWU6DQoNCmBgYHtyfQ0KZGF0IHw+DQogIGdyb3VwX2J5KGEgPT0gYikgfD4NCiAgc3VtbWFyaXNlKGBQKFNhbWUgb3V0Y29tZSlgID0gbWVhbihzYW1lKSkNCmBgYA0KDQpUaGUgb3V0Y29tZXMgYXJlIGFsd2F5cyB0aGUgc2FtZSBpZiB0aGUgc2V0dGluZ3MgYXJlIHRoZSBzYW1lIGFuZCBoYXZlIGEgNTAtLTUwIGNoYW5jZSBvZiBiZWluZyB0aGUgc2FtZSBpZiB0aGUgc2V0dGluZ3MgYXJlIGRpZmZlcmVudC4gVGhpcyBkaWZmZXJzIGZyb20gdGhlIHByZWRpY3Rpb25zIG9mIHF1YW50dW0gbWVjaGFuaWNzIGFuZCBlbXBpcmljYWwgZmluZGluZ3MgZnJvbSBhY3R1YWwgZXhwZXJpbWVudHMuDQoNClRvIHNlZSB0aGlzLCBsZXQncyB2aWV3IHRoZSBlbnRhbmdsZWQgcGFydGljbGVzIGZpcmVkIGZyb20gKkMqIGFzIHF1Yml0cywgYWJzdHJhY3RpbmcgZnJvbSBNZXJtaW4ncyBkaXNjdXNzaW9uIG9mIHNwaW4tMS8yIHBhcnRpY2xlcyBhbmQgU3Rlcm4tLUdlcmxhY2ggbWFnbmV0cy4gVGhlIG1lYXN1cmVtZW50IHNldHRpbmdzIG9mICpBKiBhbmQgKkIqIGFyZSB0aGVuIGltcGxlbWVudGVkIGFzIHJvdGF0aW5nIHRoZSBxdWJpdCBlbnRlcmluZyB0aGUgZGV0ZWN0b3IgYWJvdXQgdGhlIHktYXhpcyB1c2luZyBhbiBbUlkgZ2F0ZV0oaHR0cHM6Ly9xaXNraXQub3JnL2RvY3VtZW50YXRpb24vc3R1YnMvcWlza2l0LmNpcmN1aXQubGlicmFyeS5SWUdhdGUuaHRtbCkuIEFmdGVyIHRoaXMgcm90YXRpb24sIHdlIG1lYXN1cmUgdXNpbmcgdGhlIGNvbXB1dGF0aW9uYWwgYmFzaXMuDQoNCkhlcmUncyBhIHF1YW50dW0gY2lyY3VpdCB3aXRoIGV4YW1wbGUgc2V0dGluZ3M6DQoNCiFbXShtZXJtaW5fcWlza2l0LnBuZykNCg0KVGhlIFtjaXJjdWl0XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CZWxsX3N0YXRlI0NyZWF0aW5nX0JlbGxfc3RhdGVzKSBmb3IgKkMqIGVzdGFibGlzaGVzIGEgQmVsbCBzdGF0ZSBieSB1c2luZyBhIEhhZG1hcmQgZ2F0ZSBhbmQgQ05PVC4NCg0KVGhlIHByb2JhYmlsaXR5IHRoYXQgdGhlIG91dGNvbWVzIGFyZSB0aGUgc2FtZSBhdCAqQSogYW5kICpCKiBpcyBnaXZlbiBieSAkXGNvc14yKFx0aGV0YS8yKSQsIHdoZXJlICRcdGhldGEkIGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYW5nbGVzIG9mIHJvdGF0aW9ucyBhdCAqQSogYW5kICpCKi4gKFdlJ3JlIHNxdWFyaW5nIGJlY2F1c2UgW0Jvcm4gcnVsZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQm9ybl9ydWxlKS4pDQoNCkZvbGxvd2luZyBNZXJtaW4gKDE5ODEpLCB3ZSBjaG9vc2UgYW5nbGVzICQwXntcY2lyY30kLCAkLTEyMF57XGNpcmN9JCwgYW5kICQxMjBee1xjaXJjfSQgZm9yIHRoZSB0aHJlZSBtZWFzdXJlbWVudCBzZXR0aW5ncy4gPHR0PmFuZ19kaWZmPC90dD4gZ2l2ZXMgdGhlIGRpZmZlcmVuY2UgaW4gdGhlIGFuZ2xlcyBpbiBkZWdyZWVzOyA8dHQ+YW5nX2RpZmZfcmFkczwvdHQ+IGlzIHRoZSBzYW1lIGluIHJhZGlhbnMuDQoNCkhlcmUgaXMgYSB0YWJsZSBvZiB0aGUgb3V0Y29tZXM6DQoNCmBgYHtyfQ0KZGF0X2FjdHVhbCA8LSBleHBhbmQuZ3JpZChhID0gYygtMTIwLDAsMTIwKSwgYiA9IGMoLTEyMCwwLDEyMCkpIHw+DQogIG11dGF0ZShhbmdfZGlmZiAgICAgICAgICA9IGIgLSBhLA0KICAgICAgICAgYW5nX2RpZmZfcmFkcyAgICAgPSAoYW5nX2RpZmYvMzYwKSAqIDIgKiBwaSwNCiAgICAgICAgIGBQKFNhbWUgb3V0Y29tZSlgID0gY29zKGFuZ19kaWZmX3JhZHMvMileMikNCmRhdF9hY3R1YWwgfD4gDQogIHNlbGVjdCgtYW5nX2RpZmZfcmFkcykgfD4NCiAgYXJyYW5nZShhYnMoYW5nX2RpZmYpLCBhKQ0KYGBgDQoNCldoZW4gdGhlIHNldHRpbmdzIGFyZSB0aGUgc2FtZSBhdCAqQSogYW5kICpCKiwgdGhlIGZpbmRpbmdzIGFncmVlIHdpdGggbG9jYWwgZGV0ZXJtaW5pc206IHRoZSBsaWdodHMgYWx3YXlzIGZsYXNoIHRoZSBzYW1lIGNvbG91ci4gSG93ZXZlciwgd2hlbiB0aGUgc2V0dGluZ3MgYXJlIGRpZmZlcmVudCwgdGhlIGxpZ2h0cyBhcmUgdGhlIHNhbWUgY29sb3VyIG9uIG9ubHkgJDEvNCQgb2YgdHJpYWxzLiBUaGlzIGlzIGxvd2VyIHRoYW4gdGhlICQxLzIkIHByZWRpY3RlZCBieSB0aGUgbG9jYWwgZGV0ZXJtaW5pc20gc2V0dXAsIHNvIHNvbWV0aGluZyBlbHNlIGlzIGdvaW5nIG9uLiBMb2NhbCBkZXRlcm1pbmlzbSBpcyBmYWxzZS4NCg0KSSBnYXZlIHRoZSBjaXJjdWl0IGFib3ZlIGEgZ28gb24gYW4gW0lCTSBRdWFudHVtIGNvbXB1dGVyXShodHRwczovL3F1YW50dW0tY29tcHV0aW5nLmlibS5jb20vKSAoaWJtcV9qYWthcnRhKS4gVGhlIG1lYXN1cmVtZW50IG91dGNvbWVzIHdlcmUgdGhlIHNhbWUgb24gYHIgMTMuOCsxMi44YCUgb2YgMSwwMDAgdHJpYWxzLCA5NSUgQ0kgPSBbMjMuOSUsIDI5LjUlXS4gVGhpcyBjb25maWRlbmNlIGludGVydmFsIGluY2x1ZGVzIHRoZSBwcmVkaWN0aW9uIG9mIHF1YW50dW0gbWVjaGFuaWNzIGFuZCBpcyB3ZWxsIGJlbG93IDUwJS4NCg0KVGhlcmUgYXJlIHZhbHVlcyBvZiAkXHRoZXRhJCBmb3Igd2hpY2ggdGhlIGxvY2FsIGRldGVybWluaXNtIHByZWRpY3Rpb25zIGRvIHdvcmssIGUuZy4sICRcZnJhY3tccGl9ezJ9JCByYWRpYW5zID0gJDkwXntcY2lyY30kOg0KDQpgYGB7cn0NCmNvcygocGkvMikvMileMg0KYGBgDQpCdXQgdGhhdCBjbGVhcmx5IGRvZXNuJ3QgcmVzY3VlIGl0Lg0KDQpNb3JlIGdlbmVyYWxseSwgaGVyZSdzIHdoYXQgJFxjb3NeMihcdGhldGEvMikkIGxvb2tzIGxpa2U6DQoNCmBgYHtyIGZpZy53aWR0aD05LGZpZy5oZWlnaHQ9M30NCmdncGxvdCgpICsNCiAgZ2VvbV9mdW5jdGlvbihmdW4gPSBcKHgpIGNvcygoKHggLyAzNjApICogMiAqIHBpKSAvIDIpIF4gMikgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDEsIC4yNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IGMoc2VxKC0zNjAsIDM2MCwgOTApLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXEoLTI0MCwgMjQwLCAxMjApKSwNCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTM2MCwgMzYwKSkgKw0KICBsYWJzKHggPSBleHByZXNzaW9uKHRoZXRhKSwgeSA9ICJQKFNhbWUgb3V0Y29tZSkiKQ0KYGBgDQoNClN1cHBvc2UgSSdtIHNpdHRpbmcgYmVzaWRlIGRldGVjdG9yICpBKiBhbmQgZGV0ZWN0b3IgKkIqIGlzIGxpZ2h0IHllYXJzIGF3YXkuIFN1cHBvc2UgYWxzbyB0aGF0IEkgaG9sZCBteSBtZWFzdXJlbWVudCBzZXR0aW5nIGNvbnN0YW50LCBzbyBhbnkgdmFyaWF0aW9uIGluICRcdGhldGEkIGlzIGRyaXZlbiBieSB0aGUgc2V0dGluZyBvdmVyIGF0ICpCKi4gVGhlIG1lYXN1cmVtZW50IG91dGNvbWVzIGZyb20gcmVwZWF0ZWQgdHJpYWxzIEkgZ2V0IGhlcmUgZGVwZW5kIG9uIHRoZSBtZWFzdXJlbWVudCBzZXR0aW5ncyB3YXkgb3ZlciB0aGVyZSwgYW5kIHRob3NlIHNldHRpbmdzIGhhdmUgYW4gZWZmZWN0IGFwcGFyZW50bHkgaW5zdGFudGFuZW91c2x5Lg0KDQpIb3NzZW5mZWxkZXIgYW5kIFBhbG1lciAoMjAyMCkgd291bGQgd2FudCB0byBlbXBoYXNpc2UgdGhhdCB0aGlzIGZhbHNpZmljYXRpb24gb2YgbG9jYWwgZGV0ZXJtaW5pc20gYXNzdW1lcyB0aGF0IHRoZSBtZWFzdXJlbWVudCBzZXR0aW5ncyBhcmUgc3RhdGlzdGljYWxseSBpbmRlcGVuZGVudCwgd2hpY2ggdGhleSBhcmd1ZSBpc24ndCB0cnVlLiBBbGxvd2luZyB0aGUgbWVhc3VyZW1lbnQgc2V0dGluZ3MgdG8gYmUgY29ycmVsYXRlZCBpcyBrbm93biBhcyAqc3VwZXJkZXRlcm1pbmlzbSouDQoNCg0KIyMjIFJlZmVyZW5jZXMNCg0KTWVybWluLCBOLiBELiAoMTk4MSkuIFtRdWFudHVtIE15c3RlcmllcyBmb3IgQW55b25lXShodHRwczovL3d3dy5qc3Rvci5vcmcvc3RhYmxlLzIwMjY0ODIpLiAqVGhlIEpvdXJuYWwgb2YgUGhpbG9zb3BoeSosICo3OCooNyksIDM5Ny0tNDA4Lg0KDQpIb3NzZW5mZWxkZXIsIFMuLCAmIFBhbG1lciwgVC4gKDIwMjApLiBbUmV0aGlua2luZyBTdXBlcmRldGVybWluaXNtXShodHRwczovL2RvaS5vcmcvMTAuMzM4OS9mcGh5LjIwMjAuMDAxMzkpLiAqRnJvbnRpZXJzIGluIFBoeXNpY3MqLCAqOCosIDEzOS4NCg0KDQoNCg0K